需求:使用<map>组件 地图 移动地图时 需要获取地图的中心点位置,点标记也要相应移到新的地图中心点位置,这种如何去实现
- 发布:2019-05-12 21:57
- 更新:2022-04-12 08:52
- 阅读:3486
uni map 地图移动事件获取
有一个方法吧,其实uniapp这方面都是想到的,
第一个问题:如何监听到地图移动后的事件。
可以使用:@regionchange事件
虽然上面没有写nvue和vue可用,但是测试了一波,是可以的
手机安卓和IOS系统的可能会发生的事情,这个大佬写的可以,我没有深入那么多,
地址:https://ask.dcloud.net.cn/article/38699
然后我们只需要再结束移动的监听中,获取到当前中心点的位置,第二个问题出现了,如何获取当前中心点位置。
第二个问题:如何获取当前中心点位置
查看uniapp所有关于地图的解释,我再API中找到一个方法,同样,不好上传图片,就直接说吧,
API-》位置-》地图组件控制-》uni.createMapContext(mapId,this)
根据描述和它带有的方法:
创建并返回 map 上下文 mapContext 对象。在自定义组件下,第二个参数传入组件实例this,以操作组件内 <map> 组件。
可以再下面看到,它有一个方法是getCenterLocation
getCenterLocation:获取当前地图中心的经纬度,返回的是 gcj02 坐标系,可以用于 uni.openLocation
好,第二个问题好像也就解决了,最后:
<map id="map" ref="map" :style="{height:windowHeight+'px'}" :latitude="latitude" :longitude="longitude" :markers="markers"
:enable-rotate="false" @markertap="getMarkerTap" @regionchange="changeMap" @updated="onMapFinish"></map>
//滑动了地图
changeMap(e){
let type = '';
const { platform } = uni.getSystemInfoSync();
switch (platform) {
case 'android':
type = e.type;
break;
case 'ios':
type = e.detail.type;
break;
}
if (type === 'end') {
// 处理拖拽结束时的逻辑
console.log("结束了");
let mapCtx =uni.createMapContext('map',this);
mapCtx.getCenterLocation({
success:res=> {
console.log(res);
// 当前中心经纬度位置
this.latitude = res.latitude;
this.longitude =res.longitude;
}
})
}
},
上述就是我自己的理解,但是位置的准确度还有其他问题有待观察,但是现阶段至少可以满足要求,后续会再CSDN上面写一篇博客记录一下吧。