android 用百度地图API获取经纬度和地理位置

时间:2021-09-09 10:52:58

转自:http://www.cnblogs.com/caishuowen/archive/2011/12/14/2287669.html


android获取经纬度和地方名称
  1. package com.liufeng.baidumap;
  2. importAndroid.os.Bundle;
  3. importAndroid.view.View;
  4. importAndroid.view.View.OnClickListener;
  5. importAndroid.widget.Button;
  6. importAndroid.widget.EditText;
  7. importAndroid.widget.TextView;
  8. import com.baidu.mapapi.BMapManager;
  9. import com.baidu.mapapi.GeoPoint;
  10. import com.baidu.mapapi.MKAddrInfo;
  11. import com.baidu.mapapi.MKDrivingRouteResult;
  12. import com.baidu.mapapi.MKPoiInfo;
  13. import com.baidu.mapapi.MKPoiResult;
  14. import com.baidu.mapapi.MKSearch;
  15. import com.baidu.mapapi.MKSearchListener;
  16. import com.baidu.mapapi.MKTransitRouteResult;
  17. import com.baidu.mapapi.MKWalkingRouteResult;
  18. import com.baidu.mapapi.MapActivity;
  19. /**
  20. * 根据经纬度查询地址信息
  21. *
  22. * @author liufeng
  23. * @date 2011-05-03
  24. */
  25. publicclass QueryAddressActivityextends MapActivity {
  26. // 定义地图引擎管理类
  27. private BMapManager mapManager;
  28. // 定义搜索服务类
  29. private MKSearch mMKSearch;
  30. private EditText longitudeEditText;
  31. private EditText latitudeEditText;
  32. private TextView addressTextView;
  33. private Button queryButton;
  34. @Override
  35. publicvoid onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37. setContentView(R.layout.query_address);
  38. // 初始化MapActivity
  39. mapManager = new BMapManager(getApplication());
  40. // init方法的第一个参数需填入申请的API Key
  41. mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4",null);
  42. super.initMapActivity(mapManager);
  43. // 初始化MKSearch
  44. mMKSearch = new MKSearch();
  45. mMKSearch.init(mapManager, new MySearchListener());
  46. // 通过id查询在布局文件中定义的控件
  47. longitudeEditText = (EditText) findViewById(R.id.longitude_input);
  48. latitudeEditText = (EditText) findViewById(R.id.latitude_input);
  49. addressTextView = (TextView) findViewById(R.id.address_text);
  50. queryButton = (Button) findViewById(R.id.query_button);
  51. // 给地址查询按钮设置单击事件监听器
  52. queryButton.setOnClickListener(new OnClickListener() {
  53. @Override
  54. publicvoid onClick(View v) {
  55. // 用户输入的经度值
  56. String longitudeStr = longitudeEditText.getText().toString();
  57. // 用户输入的纬度值
  58. String latitudeStr = latitudeEditText.getText().toString();
  59. try {
  60. // 将用户输入的经纬度值转换成int类型
  61. int longitude = (int) (1000000 * Double.parseDouble(longitudeStr));
  62. int latitude = (int) (1000000 * Double.parseDouble(latitudeStr));
  63. // 查询该经纬度值所对应的地址位置信息
  64. mMKSearch.reverseGeocode(new GeoPoint(latitude, longitude));
  65. } catch (Exception e) {
  66. addressTextView.setText("查询出错,请检查您输入的经纬度值!");
  67. }
  68. }
  69. });
  70. }
  71. @Override
  72. protectedboolean isRouteDisplayed() {
  73. returnfalse;
  74. }
  75. @Override
  76. protectedvoid onDestroy() {
  77. if (mapManager !=null) {
  78. // 程序退出前需调用此方法
  79. mapManager.destroy();
  80. mapManager = null;
  81. }
  82. super.onDestroy();
  83. }
  84. @Override
  85. protectedvoid onPause() {
  86. if (mapManager !=null) {
  87. // 终止百度地图API
  88. mapManager.stop();
  89. }
  90. super.onPause();
  91. }
  92. @Override
  93. protectedvoid onResume() {
  94. if (mapManager !=null) {
  95. // 开启百度地图API
  96. mapManager.start();
  97. }
  98. super.onResume();
  99. }
  100. /**
  101. * 内部类实现MKSearchListener接口,用于实现异步搜索服务
  102. *
  103. * @author liufeng
  104. */
  105. publicclass MySearchListenerimplements MKSearchListener {
  106. /**
  107. * 根据经纬度搜索地址信息结果
  108. *
  109. * @param result 搜索结果
  110. * @param iError 错误号(0表示正确返回)
  111. */
  112. @Override
  113. publicvoid onGetAddrResult(MKAddrInfo result,int iError) {
  114. if (result ==null) {
  115. return;
  116. }
  117. StringBuffer sb = new StringBuffer();
  118. // 经纬度所对应的位置
  119. sb.append(result.strAddr).append("/n");
  120. // 判断该地址附近是否有POI(Point of Interest,即兴趣点)
  121. if (null != result.poiList) {
  122. // 遍历所有的兴趣点信息
  123. for (MKPoiInfo poiInfo : result.poiList) {
  124. sb.append("----------------------------------------").append("/n");
  125. sb.append("名称:").append(poiInfo.name).append("/n");
  126. sb.append("地址:").append(poiInfo.address).append("/n");
  127. sb.append("经度:").append(poiInfo.pt.getLongitudeE6() /1000000.0f).append("/n");
  128. sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() /1000000.0f).append("/n");
  129. sb.append("电话:").append(poiInfo.phoneNum).append("/n");
  130. sb.append("邮编:").append(poiInfo.postCode).append("/n");
  131. // poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路
  132. sb.append("类型:").append(poiInfo.ePoiType).append("/n");
  133. }
  134. }
  135. // 将地址信息、兴趣点信息显示在TextView上
  136. addressTextView.setText(sb.toString());
  137. }
  138. /**
  139. * 驾车路线搜索结果
  140. *
  141. * @param result 搜索结果
  142. * @param iError 错误号(0表示正确返回)
  143. */
  144. @Override
  145. publicvoid onGetDrivingRouteResult(MKDrivingRouteResult result,int iError) {
  146. }
  147. /**
  148. * POI搜索结果(范围检索、城市POI检索、周边检索)
  149. *
  150. * @param result 搜索结果
  151. * @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
  152. * @param iError 错误号(0表示正确返回)
  153. */
  154. @Override
  155. publicvoid onGetPoiResult(MKPoiResult result,int type,int iError) {
  156. }
  157. /**
  158. * 公交换乘路线搜索结果
  159. *
  160. * @param result 搜索结果
  161. * @param iError 错误号(0表示正确返回)
  162. */
  163. @Override
  164. publicvoid onGetTransitRouteResult(MKTransitRouteResult result,int iError) {
  165. }
  166. /**
  167. * 步行路线搜索结果
  168. *
  169. * @param result 搜索结果
  170. * @param iError 错误号(0表示正确返回)
  171. */
  172. @Override
  173. publicvoid onGetWalkingRouteResult(MKWalkingRouteResult result,int iError) {
  174. }
  175. }
  176. }

3)AndroidManifest.xml中的配置

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:Android="http://schemas.android.com/apk/res/android"
  3. package="com.liufeng.baidumap"
  4. Android:versionCode="1"
  5. Android:versionName="1.0">
  6. <applicationAndroid:icon="@drawable/icon"android:label="@string/app_name">
  7. <activityAndroid:name=".QueryAddressActivity"android:label="@string/app_name">
  8. <intent-filter>
  9. <actionAndroid:name="android.intent.action.MAIN"/>
  10. <categoryAndroid:name="android.intent.category.LAUNCHER"/>
  11. </intent-filter>
  12. </activity>
  13. </application>
  14. <uses-sdkAndroid:minSdkVersion="4"/>
  15. <!-- 访问网络的权限 -->
  16. <uses-permissionAndroid:name="android.permission.INTERNET"/>
  17. <!-- 访问精确位置的权限 -->
  18. <uses-permissionAndroid:name="android.permission.ACCESS_FINE_LOCATION"/>
  19. <!-- 访问网络状态的权限 -->
  20. <uses-permissionAndroid:name="android.permission.ACCESS_NETWORK_STATE"/>
  21. <!-- 访问WIFI网络状态的权限 -->
  22. <uses-permissionAndroid:name="android.permission.ACCESS_WIFI_STATE"/>
  23. <!-- 改变WIFI网络状态的权限 -->
  24. <uses-permissionAndroid:name="android.permission.CHANGE_WIFI_STATE"/>
  25. <!-- 读写存储卡的权限 -->
  26. <uses-permissionAndroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  27. <!-- 读取电话状态的权限 -->
  28. <uses-permissionAndroid:name="android.permission.READ_PHONE_STATE"/>
  29. </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); }