高德sdk5.0之后的地图实践接入(二)

设置地图的缩放级别

谷歌地图的默认缩放级别是10,通过如下代码可获取

float defaultZoom = aMap.getCameraPosition().zoom;

通过如下代码可设置

 aMap.moveCamera(CameraUpdateFactory.zoomTo(14));

设置为14之后,地图的缩放效果如下

设置定位的频率

默认情况下地图的定位频率是,没隔1秒,就请求一次,同时将蓝点移动到当前位置。现在我们希望只定位一次,添加如下代码即可

 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;

特别注意:

当你的定位频率设置为1次时,首次进入地图,可能会出现一个bug,就是首次地图展示时,需要一个定位的权限,当你点击允许定位权限后,发现地图并没有进行更新到自己的当前位置。因此为了解决这个问题,我们可以通过如下代码来解决.

//设置地图的定位源监听
aMap.setLocationSource(this);

setLocationSource 的监听器有两个回调activate 和deactivate

activate表示定位已经激活成功,因此在activate添加如下代码

    OnLocationChangedListener mListener;
    AMapLocationClient mlocationClient;
    AMapLocationClientOption mLocationOption;
    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
        mListener = onLocationChangedListener;
        if (mlocationClient == null) {
            mlocationClient = new AMapLocationClient(this);
            mLocationOption = new AMapLocationClientOption();
            //设置定位监听
            mlocationClient.setLocationListener(new AMapLocationListener() {
                @Override
                public void onLocationChanged(AMapLocation amapLocation) {
                    if (mListener != null && amapLocation != null) {
                        if (amapLocation != null
                                && amapLocation.getErrorCode() == 0) {
                            mListener.onLocationChanged(amapLocation);

                            LatLng curLatlng = new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude());

                        } else {
                            String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();
                        }
                    }
                }
            });
            //设置为高精度定位模式
            mLocationOption.setOnceLocation(true);
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置定位参数
            mlocationClient.setLocationOption(mLocationOption);
            // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
            // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
            // 在定位结束后,在合适的生命周期调用onDestroy()方法
            // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
            mlocationClient.startLocation();
        }
    }

deactive表示已经停止定位,在该方法中应该释放资源

    @Override
    public void deactivate() {
        mListener = null;
        if (mlocationClient != null) {
            mlocationClient.stopLocation();
            mlocationClient.onDestroy();
        }
        mlocationClient = null;
    }

给地图添加一个自己的定位图标

效果如下

首先准备一个定位图标,如下

添加如下代码,即可有上述效果

 //当地图加载完成之后,就往上面加一个自己的定位图标
        aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {
            @Override
            public void onMapLoaded() {
                addMarkerInScreenCenter(null);
            }
        });

Marker locationMarker;
    private void addMarkerInScreenCenter(LatLng locationLatLng) {
        LatLng latLng = aMap.getCameraPosition().target;
        Point screenPosition = aMap.getProjection().toScreenLocation(latLng);
        locationMarker = aMap.addMarker(new MarkerOptions()
                .anchor(0.5f,0.5f)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.purple_pin)));
        //设置Marker在屏幕上,不跟随地图移动
        locationMarker.setPositionByPixels(screenPosition.x,screenPosition.y);
        locationMarker.setZIndex(1);

    }

测试效果,当你移动地图时,当前的图标始终处于地图的中心点,并不会跟随地图移动

发布了16 篇原创文章 · 获赞 1 · 访问量 709

猜你喜欢

转载自blog.csdn.net/u010632547/article/details/104937676