Android百度地圖開發實現點選地圖新增Marker並獲取地址資訊

codeceo發表於2015-07-25

概述:

使用前下載最新的庫檔案,將liblocSDK4.so檔案拷貝到libs/armeabi目錄下,及locSDK4.0.jar檔案拷貝到工程的libs目錄下

  • BaiduMap.OnMapClickListener   地圖單擊事件監聽介面
  • GeoCoder   地理編碼查詢介面
  • reverseGeoCode(ReverseGeoCodeOption option)   發起反地理編碼請求(經緯度->地址資訊)
  • setOnGetGeoCodeResultListener(OnGetGeoCoderResultListener listener)   設定查詢結果監聽者

1.首先在佈局檔案新增mapview

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:top="http://schemas.android.com/apk/res-auto"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical" >  

    <com.baidu.mapapi.map.MapView  
        android:id="@+id/bmapView"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:clickable="true" />  

</LinearLayout>

2.MainActivity裡新增使用

    public class MapActivity extends Activity {  
        private MapView mMapView = null;  
        private BaiduMap mBaiduMap;  
        private BitmapDescriptor bitmap;  
        private String address= "";  

        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            // 在使用SDK各元件之前初始化context資訊,傳入ApplicationContext  
            // 注意該方法要再setContentView方法之前實現  
            SDKInitializer.initialize(getApplicationContext());  
            setContentView(R.layout.activity_map);  

            // 獲取地圖控制元件引用  
            mMapView = (MapView) findViewById(R.id.bmapView);  
            mBaiduMap = mMapView.getMap();  
            //設定是否顯示比例尺控制元件  
            mMapView.showScaleControl(false);  
            //設定是否顯示縮放控制元件  
            mMapView.showZoomControls(false);  
            // 刪除百度地圖LoGo  
            mMapView.removeViewAt(1);  

            // 設定marker圖示  
            bitmap = BitmapDescriptorFactory.fromResource(R.drawable.maker);  
            mBaiduMap.setOnMapClickListener(new OnMapClickListener() {  

                @Override  
                public boolean onMapPoiClick(MapPoi arg0) {  
                    // TODO Auto-generated method stub  
                    return false;  
                }  

                //此方法就是點選地圖監聽  
                @Override  
                public void onMapClick(LatLng latLng) {  
                    //獲取經緯度  
                    double latitude = latLng.latitude;  
                    double longitude = latLng.longitude;  
                    System.out.println("latitude=" + latitude + ",longitude=" + longitude);  
                    //先清除圖層  
                    mBaiduMap.clear();  
                    // 定義Maker座標點  
                    LatLng point = new LatLng(latitude, longitude);  
                    // 構建MarkerOption,用於在地圖上新增Marker  
                    MarkerOptions options = new MarkerOptions().position(point)  
                            .icon(bitmap);  
                    // 在地圖上新增Marker,並顯示  
                    mBaiduMap.addOverlay(options);  
                    //例項化一個地理編碼查詢物件  
                    GeoCoder geoCoder = GeoCoder.newInstance();  
                    //設定反地理編碼位置座標  
                    ReverseGeoCodeOption op = new ReverseGeoCodeOption();  
                    op.location(latLng);  
                    //發起反地理編碼請求(經緯度->地址資訊)  
                    geoCoder.reverseGeoCode(op);  
                    geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {  

                        @Override  
                        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) {  
                            //獲取點選的座標地址  
                            address = arg0.getAddress();  
                            System.out.println("address="+address);  
                        }  

                        @Override  
                        public void onGetGeoCodeResult(GeoCodeResult arg0) {  
                        }  
                    });  
                }  
            });  
        }  

        @Override  
        protected void onDestroy() {  
            super.onDestroy();  
            // 在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理  
            mMapView.onDestroy();  
        }  

        @Override  
        protected void onResume() {  
            super.onResume();  
            // 在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理  
            mMapView.onResume();  
        }  

        @Override  
        protected void onPause() {  
            super.onPause();  
            // 在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理  
            mMapView.onPause();  
        }  
    }

相關文章