高德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);

    }

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

如何去掉定位图标下面的阴影部分

代码如下

  myLocationStyle.strokeColor(Color.TRANSPARENT);// 设置圆形的边框颜色
        myLocationStyle.radiusFillColor(Color.TRANSPARENT);// 设置圆形的填充颜色
        myLocationStyle.strokeWidth(0.0f);// 设置圆形的边框粗细

添加以上代码后,就ok了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在uniapp中接入高德地图导航sdk的代码示例: 1. 首先,在uniapp工程中安装高德地图导航sdk插件,可以使用uni-app插件市场中的插件或手动下载集成。 2. 在需要使用高德地图导航sdk的页面中,引入高德地图导航sdk插件,并在页面mounted生命周期中初始化地图导航对象。 ``` <template> <view> <button @click="navigate">开始导航</button> </view> </template> <script> import amap from '@/uni_modules/amap-navigation/js_sdk/amap-wx.js'; export default { mounted() { // 初始化地图导航对象 this.amapNavigation = new amap.AMapNavigation({ key: 'your amap key', version: '1.4.15', plugins: ['AMap.Geolocation'] }); }, methods: { navigate() { // 开始导航 this.amapNavigation.navigateTo({ destLatitude: this.destLatitude, destLongitude: this.destLongitude, destName: this.destName }); } } } </script> ``` 3. 在导航页面中,使用高德地图导航sdk提供的API,实现导航功能。 ``` <template> <view> <button @click="back">返回</button> </view> </template> <script> import amap from '@/uni_modules/amap-navigation/js_sdk/amap-wx.js'; export default { mounted() { // 初始化地图导航对象 this.amapNavigation = new amap.AMapNavigation({ key: 'your amap key', version: '1.4.15', plugins: ['AMap.Geolocation'] }); // 监听导航状态变化 this.amapNavigation.on('routeChanged', (event) => { console.log('routeChanged', event); }); this.amapNavigation.on('naviInfoUpdated', (event) => { console.log('naviInfoUpdated', event); }); this.amapNavigation.on('naviExit', (event) => { console.log('naviExit', event); }); this.amapNavigation.on('error', (event) => { console.log('error', event); }); }, methods: { back() { // 结束导航 this.amapNavigation.stop(); // 返回上一页 uni.navigateBack(); } } } </script> ``` 以上是在uniapp中接入高德地图导航sdk的代码示例,具体实现方式还需根据自己的业务需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值