当前位置: 代码迷 >> Android >> 百度map中android获取经纬度和地方名称
  详细解决方案

百度map中android获取经纬度和地方名称

热度:76   发布时间:2016-04-28 07:07:50.0
百度地图中android获取经纬度和地方名称

package com.liufeng.baidumap; ?

??

import Android.os.Bundle; ?

import Android.view.View; ?

import Android.view.View.OnClickListener; ?

import Android.widget.Button; ?

import Android.widget.EditText; ?

import Android.widget.TextView; ?

??

import com.baidu.mapapi.BMapManager; ?

import com.baidu.mapapi.GeoPoint; ?

import com.baidu.mapapi.MKAddrInfo; ?

import com.baidu.mapapi.MKDrivingRouteResult; ?

import com.baidu.mapapi.MKPoiInfo; ?

import com.baidu.mapapi.MKPoiResult; ?

import com.baidu.mapapi.MKSearch; ?

import com.baidu.mapapi.MKSearchListener; ?

import com.baidu.mapapi.MKTransitRouteResult; ?

import com.baidu.mapapi.MKWalkingRouteResult; ?

import com.baidu.mapapi.MapActivity; ?

??

/**?

?* 根据经纬度查询地址信息?

?* ?

?* @author liufeng?

?* @date 2011-05-03?

?*/ ?

public class QueryAddressActivity extends MapActivity { ?

? ? // 定义地图引擎管理类 ??

? ? private BMapManager mapManager; ?

? ? // 定义搜索服务类 ??

? ? private MKSearch mMKSearch; ?

??

? ? private EditText longitudeEditText; ?

? ? private EditText latitudeEditText; ?

? ? private TextView addressTextView; ?

? ? private Button queryButton; ?

??

? ? @Override ?

? ? public void onCreate(Bundle savedInstanceState) { ?

? ? ? ? super.onCreate(savedInstanceState); ?

? ? ? ? setContentView(R.layout.query_address); ?

??

? ? ? ? // 初始化MapActivity ??

? ? ? ? mapManager = new BMapManager(getApplication()); ?

? ? ? ? // init方法的第一个参数需填入申请的API Key ??

? ? ? ? mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null); ?

? ? ? ? super.initMapActivity(mapManager); ?

??

? ? ? ? // 初始化MKSearch ??

? ? ? ? mMKSearch = new MKSearch(); ?

? ? ? ? mMKSearch.init(mapManager, new MySearchListener()); ?

??

? ? ? ? // 通过id查询在布局文件中定义的控件 ??

? ? ? ? longitudeEditText = (EditText) findViewById(R.id.longitude_input); ?

? ? ? ? latitudeEditText = (EditText) findViewById(R.id.latitude_input); ?

? ? ? ? addressTextView = (TextView) findViewById(R.id.address_text); ?

? ? ? ? queryButton = (Button) findViewById(R.id.query_button); ?

??

? ? ? ? // 给地址查询按钮设置单击事件监听器 ??

? ? ? ? queryButton.setOnClickListener(new OnClickListener() { ?

? ? ? ? ? ? @Override ?

? ? ? ? ? ? public void onClick(View v) { ?

? ? ? ? ? ? ? ? // 用户输入的经度值 ??

? ? ? ? ? ? ? ? String longitudeStr = longitudeEditText.getText().toString(); ?

? ? ? ? ? ? ? ? // 用户输入的纬度值 ??

? ? ? ? ? ? ? ? String latitudeStr = latitudeEditText.getText().toString(); ?

??

? ? ? ? ? ? ? ? try { ?

? ? ? ? ? ? ? ? ? ? // 将用户输入的经纬度值转换成int类型 ??

? ? ? ? ? ? ? ? ? ? int longitude = (int) (1000000 * Double.parseDouble(longitudeStr)); ?

? ? ? ? ? ? ? ? ? ? int latitude = (int) (1000000 * Double.parseDouble(latitudeStr)); ?

??

? ? ? ? ? ? ? ? ? ? // 查询该经纬度值所对应的地址位置信息 ??

? ? ? ? ? ? ? ? ? ? mMKSearch.reverseGeocode(new GeoPoint(latitude, longitude)); ?

? ? ? ? ? ? ? ? } catch (Exception e) { ?

? ? ? ? ? ? ? ? ? ? addressTextView.setText("查询出错,请检查您输入的经纬度值!"); ?

? ? ? ? ? ? ? ? } ?

? ? ? ? ? ? } ?

? ? ? ? }); ?

? ? } ?

??

? ? @Override ?

? ? protected boolean isRouteDisplayed() { ?

? ? ? ? return false; ?

? ? } ?

??

? ? @Override ?

? ? protected void onDestroy() { ?

? ? ? ? if (mapManager != null) { ?

? ? ? ? ? ? // 程序退出前需调用此方法 ??

? ? ? ? ? ? mapManager.destroy(); ?

? ? ? ? ? ? mapManager = null; ?

? ? ? ? } ?

? ? ? ? super.onDestroy(); ?

? ? } ?

??

? ? @Override ?

? ? protected void onPause() { ?

? ? ? ? if (mapManager != null) { ?

? ? ? ? ? ? // 终止百度地图API ??

? ? ? ? ? ? mapManager.stop(); ?

? ? ? ? } ?

? ? ? ? super.onPause(); ?

? ? } ?

??

? ? @Override ?

? ? protected void onResume() { ?

? ? ? ? if (mapManager != null) { ?

? ? ? ? ? ? // 开启百度地图API ??

? ? ? ? ? ? mapManager.start(); ?

? ? ? ? } ?

? ? ? ? super.onResume(); ?

? ? } ?

??

? ? /**?

? ? ?* 内部类实现MKSearchListener接口,用于实现异步搜索服务?

? ? ?* ?

? ? ?* @author liufeng?

? ? ?*/ ?

? ? public class MySearchListener implements MKSearchListener { ?

? ? ? ? /**?

? ? ? ? ?* 根据经纬度搜索地址信息结果?

? ? ? ? ?* ?

? ? ? ? ?* @param result 搜索结果?

? ? ? ? ?* @param iError 错误号(0表示正确返回)?

? ? ? ? ?*/ ?

? ? ? ? @Override ?

? ? ? ? public void onGetAddrResult(MKAddrInfo result, int iError) { ?

? ? ? ? ? ? if (result == null) { ?

? ? ? ? ? ? ? ? return; ?

? ? ? ? ? ? } ?

? ? ? ? ? ? StringBuffer sb = new StringBuffer(); ?

? ? ? ? ? ? // 经纬度所对应的位置 ??

? ? ? ? ? ? sb.append(result.strAddr).append("/n"); ?

??

? ? ? ? ? ? // 判断该地址附近是否有POI(Point of Interest,即兴趣点) ??

? ? ? ? ? ? if (null != result.poiList) { ?

? ? ? ? ? ? ? ? // 遍历所有的兴趣点信息 ??

? ? ? ? ? ? ? ? for (MKPoiInfo poiInfo : result.poiList) { ?

? ? ? ? ? ? ? ? ? ? sb.append("----------------------------------------").append("/n"); ?

? ? ? ? ? ? ? ? ? ? sb.append("名称:").append(poiInfo.name).append("/n"); ?

? ? ? ? ? ? ? ? ? ? sb.append("地址:").append(poiInfo.address).append("/n"); ?

? ? ? ? ? ? ? ? ? ? sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n"); ?

? ? ? ? ? ? ? ? ? ? sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n"); ?

? ? ? ? ? ? ? ? ? ? sb.append("电话:").append(poiInfo.phoneNum).append("/n"); ?

? ? ? ? ? ? ? ? ? ? sb.append("邮编:").append(poiInfo.postCode).append("/n"); ?

? ? ? ? ? ? ? ? ? ? // poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路 ??

? ? ? ? ? ? ? ? ? ? sb.append("类型:").append(poiInfo.ePoiType).append("/n"); ?

? ? ? ? ? ? ? ? } ?

? ? ? ? ? ? } ?

? ? ? ? ? ? // 将地址信息、兴趣点信息显示在TextView上 ??

? ? ? ? ? ? addressTextView.setText(sb.toString()); ?

? ? ? ? } ?

??

? ? ? ? /**?

? ? ? ? ?* 驾车路线搜索结果?

? ? ? ? ?* ?

? ? ? ? ?* @param result 搜索结果?

? ? ? ? ?* @param iError 错误号(0表示正确返回)?

? ? ? ? ?*/ ?

? ? ? ? @Override ?

? ? ? ? public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) { ?

? ? ? ? } ?

??

? ? ? ? /**?

? ? ? ? ?* POI搜索结果(范围检索、城市POI检索、周边检索)?

? ? ? ? ?* ?

? ? ? ? ?* @param result 搜索结果?

? ? ? ? ?* @param type 返回结果类型(11,12,21:poi列表 7:城市列表)?

? ? ? ? ?* @param iError 错误号(0表示正确返回)?

? ? ? ? ?*/ ?

? ? ? ? @Override ?

? ? ? ? public void onGetPoiResult(MKPoiResult result, int type, int iError) { ?

? ? ? ? } ?

??

? ? ? ? /**?

? ? ? ? ?* 公交换乘路线搜索结果?

? ? ? ? ?* ?

? ? ? ? ?* @param result 搜索结果?

? ? ? ? ?* @param iError 错误号(0表示正确返回)?

? ? ? ? ?*/ ?

? ? ? ? @Override ?

? ? ? ? public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) { ?

? ? ? ? } ?

??

? ? ? ? /**?

? ? ? ? ?* 步行路线搜索结果?

? ? ? ? ?* ?

? ? ? ? ?* @param result 搜索结果?

? ? ? ? ?* @param iError 错误号(0表示正确返回)?

? ? ? ? ?*/ ?

? ? ? ? @Override ?

? ? ? ? public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) { ?

? ? ? ? } ?

? ? } ?

} ?

? ?3)AndroidManifest.xml中的配置 ? ??

?

?

<?xml version="1.0" encoding="utf-8"?> ?

<manifest xmlns:Android="http://schemas.android.com/apk/res/android" ?

? ? ? package="com.liufeng.baidumap" ?

? ? ? Android:versionCode="1" ?

? ? ? Android:versionName="1.0"> ?

? ? <application Android:icon="@drawable/icon" android:label="@string/app_name"> ?

? ? ? ? <activity Android:name=".QueryAddressActivity" android:label="@string/app_name"> ?

? ? ? ? ? ? <intent-filter> ?

? ? ? ? ? ? ? ? <action Android:name="android.intent.action.MAIN" /> ?

? ? ? ? ? ? ? ? <category Android:name="android.intent.category.LAUNCHER" /> ?

? ? ? ? ? ? </intent-filter> ?

? ? ? ? </activity> ?

? ? </application> ?

? ? <uses-sdk Android:minSdkVersion="4" /> ?

??

? ? <!-- 访问网络的权限 --> ?

? ? <uses-permission Android:name="android.permission.INTERNET" /> ?

? ? <!-- 访问精确位置的权限 --> ?

? ? <uses-permission Android:name="android.permission.ACCESS_FINE_LOCATION" /> ?

? ? <!-- 访问网络状态的权限 --> ?

? ? <uses-permission Android:name="android.permission.ACCESS_NETWORK_STATE" /> ?

? ? <!-- 访问WIFI网络状态的权限 --> ?

? ? <uses-permission Android:name="android.permission.ACCESS_WIFI_STATE" /> ?

? ? <!-- 改变WIFI网络状态的权限 --> ?

? ? <uses-permission Android:name="android.permission.CHANGE_WIFI_STATE" /> ?

? ? <!-- 读写存储卡的权限 --> ?

? ? <uses-permission Android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ?

? ? <!-- 读取电话状态的权限 --> ?

? ? <uses-permission Android:name="android.permission.READ_PHONE_STATE" /> ?

</manifest> ??

locationManager = (LocationManager) GPSTestActivity.this.getSystemService(Context.LOCATION_SERVICE); ??

?

String provier = LocationManager.GPS_PROVIDER; ? location = locationManager.getLastKnownLocation(provier);

?

? ?if (location == null) { ? ?Criteria criteria = new Criteria(); ? ?criteria.setAccuracy(Criteria.ACCURACY_FINE); ? ?

?

criteria.setAltitudeRequired(false); ?

?

? criteria.setBearingRequired(false); ?

?

? criteria.setCostAllowed(false); ? ?

?

criteria.setPowerRequirement(Criteria.POWER_LOW); ? ?

?

provier = locationManager.getBestProvider(criteria, true); ?

?

? location = locationManager.getLastKnownLocation(provier); ? }

  相关解决方案