1. 程式人生 > >高德地圖心得(一)—定位與移動(Maker處於地圖中心)

高德地圖心得(一)—定位與移動(Maker處於地圖中心)

摘要:從事android開發已有一年多,做了不少有關地圖開發的專案。遇到的坑也很多(官方demo畢竟只是參考,不一定是最簡潔的),下面就用程式碼展示我認為最簡潔的核心功能點,這也是我第一篇部落格,希望對你們能有些幫助!

 //地圖定位,使自定位Maker處於地圖中心
  aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() {
    @Override
    public void onMyLocationChange(Location location) {

        LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
        Constant.latLng = latLng;
        if (localMark == null) {
            String url = "";
            if (!TextUtils.isEmpty(TokenSavemanager.userId(MainActivity.this))) {
                url = UserInfoManager.getUserBean(MainActivity.this).getPhoto();
            }
            View view = new MyMarkerView(MainActivity.this, url, R.mipmap.img_head_maintenance_default);//自定義Maker
            localMark = aMap.addMarker(new MarkerOptions().position(latLng).icon(BitmapDescriptorFactory.fromView(view)));
        } else {
            localMark.setPosition(latLng);
        }

        requestMarksData(latLng);//請求網路,載入其餘的Maker(注:給這些Maker設Tag,例:maker.setObject("Tag"))

    }
});

  //地圖移動,自定義Maker始終處於地圖中心點
  aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition cameraPosition) {
                if (localMark != null) {
                    LatLng latLng = cameraPosition.target;
                    localMark.setPosition(latLng);
                }
            }

            @Override
            public void onCameraChangeFinish(CameraPosition cameraPosition) {
                removeMarksFromMap();//移動結束的時候,先移除地圖上Maker(除了處於地圖中心的Maker)
                requestMarksData(cameraPosition.target);

            }
        });

        
   //移除地圖上除中心點的所有Maker
   private void removeMarksFromMap() {
        List<Marker> saveMarkerList = aMap.getMapScreenMarkers();//獲得所有地圖上所有Maker.
        for (Marker marker : saveMarkerList) {
            if (marker.getObject() != null && marker.getObject().toString().equals("tag")) {
                marker.remove();
            }
        }
    }
}