Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android百度地圖之實現根據城市名,地址名獲取GPS緯度、經度值示例

Android百度地圖之實現根據城市名,地址名獲取GPS緯度、經度值示例

編輯:Android開發實例

場景:我知道某個城市名和這個城市裡的一個小地方的地址,我想知道哪這個城市裡這個小地方的GPS緯度、經度值。

例如:我想知道上海市,益江路盛夏路的GPS緯度、經度值是多少?

注:一些基本的概念什麼的就都不講了,前面已經講過了,想要了解的請查看:Android百度地圖SDK版本v2.0.0試用

一、假設基於百度地圖SDK,底圖(最基本的圖層)你已經實現了,並且設置顯示的地圖為上海市的。

二、獲取上海市,益江路盛夏路的GPS緯度、經度值:

1、創建MKSearch類的實例,並初始化。

  1. mMKSearch = new MKSearch();  
  2.       mMKSearch.init(mMapManager, new MKSearchListener(){  
  3.  
  4.           @Override 
  5.           public void onGetAddrResult(MKAddrInfo result, int error) {  
  6.             
  7.           }  
  8.  
  9.           @Override 
  10.           public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {  
  11.               // TODO Auto-generated method stub  
  12.                 
  13.           }  
  14.  
  15.           @Override 
  16.           public void onGetDrivingRouteResult(MKDrivingRouteResult result, int arg1) {  
  17.                 
  18.           }  
  19.  
  20.           @Override 
  21.           public void onGetPoiDetailSearchResult(int arg0, int arg1) {  
  22.               // TODO Auto-generated method stub  
  23.                 
  24.           }  
  25.  
  26.           @Override 
  27.           public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {  
  28.               // TODO Auto-generated method stub  
  29.                 
  30.           }  
  31.  
  32.           @Override 
  33.           public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {  
  34.               // TODO Auto-generated method stub  
  35.                 
  36.           }  
  37.  
  38.           @Override 
  39.           public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {  
  40.               // TODO Auto-generated method stub  
  41.                 
  42.           }  
  43.  
  44.           @Override 
  45.           public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {  
  46.               // TODO Auto-generated method stub  
  47.                 
  48.           }  
  49.             
  50.       });  

2、調用  mMKSearch.geocode(String  address,  String city)方法,返回值是int類型的。

 參數列表:某個城市中某個地方的地址,城市名。例如:陸家嘴,上海市

  1. mMKSearch.geocode("益江路盛夏路", "上海市"); 

3、在回調onGetAddrResult(MKAddrInfo result, int error)裡面處理查到的結果。

將得到的結果用兩種方式呈現:a. 以對話框的形式展現;b. 在地圖上標注出來。

  1. @Override 
  2.           public void onGetAddrResult(MKAddrInfo result, int error) {  
  3.               // error的含義: 錯誤號,0表示結果正確,result中有相關結果信息;  
  4.               // 100表示結果正確,result中無相關地址信息   
  5.               if(error != 0 || result == null){  
  6.                   String str = String.format("錯誤號:%d", error);   
  7.                   Toast.makeText(BaiduMapGeocodeActivity.this, str, Toast.LENGTH_LONG).show();  
  8.                   return;  
  9.               }  
  10.                 
  11.            GeoPoint mPoint = result.geoPt;  
  12.                 
  13.              // 將得到的結果以對話框的形式展現  
  14.              showGeocode(result.strAddr, mPoint);  
  15.                
  16.               // 將找到的位置設置為在手機屏幕內可見地圖的中心點  
  17.               mMapView.getController().animateTo(mPoint);  
  18.                 
  19.               // 得到需要標在地圖上的資源  
  20.               Drawable marker = getResources().getDrawable(R.drawable.icon_marka);    
  21.               // 為maker定義位置和邊界  
  22.               // marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());    
  23.                 
  24.               mMapView.getOverlays().clear();   
  25.               mMapView.getOverlays().add(new MyOverlay(marker, mPoint, result.strAddr));  
  26.               mMapView.refresh();  
  27.           }  

運行效果圖如下:

a. 對話框形式

            

b. 在地圖上標注

 

 

完整代碼:

  1. package com.android.baidu.map;  
  2.  
  3. import java.util.ArrayList;  
  4.  
  5. import android.app.Activity;  
  6. import android.app.AlertDialog;  
  7. import android.content.Context;  
  8. import android.content.res.Configuration;  
  9. import android.graphics.drawable.Drawable;  
  10. import android.os.Bundle;  
  11. import android.util.Log;  
  12. import android.widget.Toast;  
  13.  
  14. import com.baidu.mapapi.BMapManager;  
  15. import com.baidu.mapapi.MKGeneralListener;  
  16. import com.baidu.mapapi.map.ItemizedOverlay;  
  17. import com.baidu.mapapi.map.MKEvent;  
  18. import com.baidu.mapapi.map.MapController;  
  19. import com.baidu.mapapi.map.MapView;  
  20. import com.baidu.mapapi.map.OverlayItem;  
  21. import com.baidu.mapapi.search.MKAddrInfo;  
  22. import com.baidu.mapapi.search.MKBusLineResult;  
  23. import com.baidu.mapapi.search.MKDrivingRouteResult;  
  24. import com.baidu.mapapi.search.MKPoiResult;  
  25. import com.baidu.mapapi.search.MKSearch;  
  26. import com.baidu.mapapi.search.MKSearchListener;  
  27. import com.baidu.mapapi.search.MKSuggestionResult;  
  28. import com.baidu.mapapi.search.MKTransitRouteResult;  
  29. import com.baidu.mapapi.search.MKWalkingRouteResult;  
  30. import com.baidu.platform.comapi.basestruct.GeoPoint;  
  31.  
  32. /**  
  33.  * 根據城市名,地址名獲取地址信息 (GPS緯度、經度值)  
  34.  * @author android_ls  
  35.  *  
  36.  */ 
  37. public class BaiduMapGeocodeActivity extends Activity {  
  38.  
  39.     public static final String TAG = "BaiduMapGeocodeActivity";  
  40.       
  41.     public static final String BAIDU_MAP_KEY = "07418AEC69BAAB7104C6230A6120C580DFFAEEBB";  
  42.  
  43.     private BMapManager mMapManager = null;  
  44.  
  45.     private MapView mMapView = null;  
  46.  
  47.     private MKSearch mMKSearch = null;  
  48.       
  49.     private Context mContext;  
  50.  
  51.     @Override 
  52.     public void onCreate(Bundle savedInstanceState) {  
  53.         super.onCreate(savedInstanceState);  
  54.  
  55.         mContext = BaiduMapGeocodeActivity.this.getApplicationContext();  
  56.  
  57.         mMapManager = new BMapManager(getApplicationContext());  
  58.         mMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {  
  59.  
  60.             @Override 
  61.             public void onGetNetworkState(int errorCode) {  
  62.                 if (errorCode == MKEvent.ERROR_NETWORK_CONNECT) {  
  63.                     Toast.makeText(mContext, "您的網絡出錯啦!",  
  64.                             Toast.LENGTH_LONG).show();  
  65.                 }  
  66.             }  
  67.  
  68.             @Override 
  69.             public void onGetPermissionState(int errorCode) {  
  70.                 if (errorCode == MKEvent.ERROR_PERMISSION_DENIED) {  
  71.                     // 授權Key錯誤:  
  72.                     Toast.makeText(mContext,  
  73.                             "請在 DemoApplication.java文件輸入正確的授權Key!",  
  74.                             Toast.LENGTH_LONG).show();  
  75.                 }  
  76.             }  
  77.         });  
  78.  
  79.         setContentView(R.layout.main);  
  80.  
  81.         mMapView = (MapView) this.findViewById(R.id.bmapsView);  
  82.         mMapView.setBuiltInZoomControls(true);  
  83.  
  84.         MapController mMapController = mMapView.getController();  
  85.         // 上海市的GPS緯度經度值:31.232310,121.469160  
  86.         GeoPoint mGeoPoint = new GeoPoint(  
  87.                 (int) (31.232310 * 1E6),  
  88.                 (int) (121.469160 * 1E6)  
  89.                 );  
  90.           
  91.         mMapController.setCenter(mGeoPoint);  
  92.         mMapController.setZoom(18);  
  93.  
  94.         mMKSearch = new MKSearch();  
  95.         mMKSearch.init(mMapManager, new MKSearchListener(){  
  96.  
  97.             @Override 
  98.             public void onGetAddrResult(MKAddrInfo result, int error) {  
  99.                 // error的含義: 錯誤號,0表示結果正確,result中有相關結果信息;  
  100.                 // 100表示結果正確,result中無相關地址信息   
  101.                 if(error != 0 || result == null){  
  102.                     String str = String.format("錯誤號:%d", error);   
  103.                     Toast.makeText(BaiduMapGeocodeActivity.this,  
  104.                             str, Toast.LENGTH_LONG).show();  
  105.                     return;  
  106.                 }  
  107.                   
  108.                GeoPoint mPoint = result.geoPt;  
  109.                   
  110.                // 將得到的結果以對話框的形式展現  
  111.                showGeocode(result.strAddr, mPoint);  
  112.                  
  113.                 // 將找到的位置設置為在手機屏幕內可見地圖的中心點  
  114.                 mMapView.getController().animateTo(mPoint);  
  115.                   
  116.                 // 得到需要標在地圖上的資源  
  117.                 Drawable marker = getResources().getDrawable(R.drawable.icon_marka);    
  118.                 // 為maker定義位置和邊界  
  119.                 // marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());    
  120.                   
  121.                 mMapView.getOverlays().clear();   
  122.                 mMapView.getOverlays().add(  
  123.                         new MyOverlay(marker, mPoint, result.strAddr));  
  124.                 mMapView.refresh();  
  125.             }  
  126.  
  127.             @Override 
  128.             public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {  
  129.                 // TODO Auto-generated method stub  
  130.                   
  131.             }  
  132.  
  133.             @Override 
  134.             public void onGetDrivingRouteResult(MKDrivingRouteResult result, int arg1) {  
  135.                   
  136.             }  
  137.  
  138.             @Override 
  139.             public void onGetPoiDetailSearchResult(int arg0, int arg1) {  
  140.                 // TODO Auto-generated method stub  
  141.                   
  142.             }  
  143.  
  144.             @Override 
  145.             public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {  
  146.                 // TODO Auto-generated method stub  
  147.                   
  148.             }  
  149.  
  150.             @Override 
  151.             public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {  
  152.                 // TODO Auto-generated method stub  
  153.                   
  154.             }  
  155.  
  156.             @Override 
  157.             public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {  
  158.                 // TODO Auto-generated method stub  
  159.                   
  160.             }  
  161.  
  162.             @Override 
  163.             public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {  
  164.                 // TODO Auto-generated method stub  
  165.                   
  166.             }  
  167.               
  168.         });  
  169.           
  170.         // 根據地址名獲取地址信息 異步函數,返回結果在MKSearchListener裡的onGetAddrResult方法通知  
  171.         mMKSearch.geocode("益江路盛夏路", "上海市");  
  172.           
  173.         // 測試:下面的都獲取不到GPS緯度、經度值。感慨:百度地圖這方面有待提高。  
  174.         // mMKSearch.geocode("浦東軟件園", "上海市");  
  175.         // mMKSearch.geocode("廣蘭路", "上海市");  
  176.         // mMKSearch.geocode("祖沖之路金科路", "上海市");  
  177.         // mMKSearch.geocode("陸家嘴", "上海市");  
  178.           
  179.     }  
  180.       
  181.     /**  
  182.      * 以Dialog的形式顯示查找結果  
  183.      * @param address 地址  
  184.      * @param mPoint 地理坐標點  
  185.      */ 
  186.     private void showGeocode(String address, GeoPoint mPoint)  
  187.     {  
  188.         // 將以微度的整數形式存儲的地理坐標點轉換成GPS緯度經度值  
  189.         double latitude  = mPoint.getLatitudeE6()/1E6; // 緯度  
  190.         double longitude = mPoint.getLongitudeE6()/1E6;// 經度  
  191.         Log.i(TAG, "latitude = " + latitude + "\t longitude = " + longitude);  
  192.           
  193.         StringBuilder sb = new StringBuilder(address);  
  194.         sb.append("\n")  
  195.         .append("緯度:\t").append(latitude)  
  196.         .append("\n")  
  197.         .append("經度:\t").append(longitude);  
  198.           
  199.         new AlertDialog.Builder(this)   
  200.         .setTitle("根據地址名獲取GPS緯度、經度值")  
  201.         .setMessage(sb)  
  202.         .show();  
  203.     }  
  204.       
  205.     class MyOverlay extends ItemizedOverlay<OverlayItem>{  
  206.  
  207.         private ArrayList<OverlayItem> overlayList = new ArrayList<OverlayItem>();  
  208.           
  209.         public MyOverlay(Drawable drawable, GeoPoint point, String address) {  
  210.             super(drawable);  
  211.             overlayList.add(new OverlayItem(point, address, address));  
  212.             populate();  
  213.         }  
  214.  
  215.         @Override 
  216.         protected OverlayItem createItem(int index) {  
  217.             return overlayList.get(index);  
  218.         }  
  219.  
  220.         @Override 
  221.         public int size() {  
  222.             return overlayList.size();  
  223.         }  
  224.           
  225.     }  
  226.       
  227.     @Override 
  228.     public void onConfigurationChanged(Configuration newConfig) {  
  229.         super.onConfigurationChanged(newConfig);  
  230.     }  
  231.  
  232.     @Override 
  233.     protected void onSaveInstanceState(Bundle outState) {  
  234.         super.onSaveInstanceState(outState);  
  235.         mMapView.onSaveInstanceState(outState);  
  236.     }  
  237.  
  238.     @Override 
  239.     protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  240.         super.onRestoreInstanceState(savedInstanceState);  
  241.         mMapView.onRestoreInstanceState(savedInstanceState);  
  242.     }  
  243.  
  244.     @Override 
  245.     protected void onResume() {  
  246.         mMapView.onResume();  
  247.  
  248.         if (mMapManager != null) {  
  249.             mMapManager.start();  
  250.         }  
  251.  
  252.         super.onResume();  
  253.     }  
  254.  
  255.     @Override 
  256.     protected void onPause() {  
  257.         mMapView.onPause();  
  258.         if (mMapManager != null) {  
  259.             mMapManager.stop();  
  260.         }  
  261.         super.onPause();  
  262.     }  
  263.  
  264.     @Override 
  265.     protected void onDestroy() {  
  266.         mMapView.destroy();  
  267.         if (mMapManager != null) {  
  268.             mMapManager.destroy();  
  269.             mMapManager = null;  
  270.         }  
  271.         super.onDestroy();  
  272.     }  
  273.  
  274. }  



轉自:http://blog.csdn.net/android_ls/article/details/8579695

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved