最近开发小程序遇到以下问题:
1 onLoad()方法中动态设置地图的中心点经纬度在手机(android,ios)有时候失效,有时候可以
2 同样是在onload方法中: map.moveToLocation()也是有时候生效,有时候不生效,但是通过地图上的控件点击触发map.moveToLocation()却是一定生效。
3 onLoadf方法中获取地图的视野范围,返回的经纬度却不一定是正确的,目前是一直获取直到获取正确为止才继续往下执行
希望有人能帮忙解解惑,真心不知道需要在地图的哪个时候去用这些方法了。
就目前自己解决的方式说下:
第一个问题:
在onload方法中设置中心点不生效,是因为onload方法中地图没有加载完成,需要在onready中加载,为了确定地图已经加载完成,利用map的bindupdated绑定方法,标识一个加载完成的标识位,具体代码参考:
async onReady() {
let flag = true
while (flag) {
if (this.mapCtx && this.mapUpdateFinishFLag) {
this.latitude = this.latitudemedian
this.longitude = this.longitudemedian
flag = false
this.$apply()
}
await this.sleep(1) // 自己写的一个睡眠的
}
}
async onLoad() {
_this.mapCtx = await wx.createMapContext(‘myMap’)
}
updateFinish() {
this.mapUpdateFinishFLag = true // data中设置默认为false
this.$apply()
}
第二个问题:
自己手动调用moveToLocation似乎总会用问题发生,就算是用了类型第一个问题的方式去解决,所以如果是想地图加载的时候就直接定位到中心点,应该手动获取到自己位置的经纬度(wx.getLoacation),并设置为地图map的经纬度上,注意一个点,调用wx.getLocation获取经纬度是type需要设置为gcj02的类型,默认是wgs84。再利用设置中心点的方式定位到当前位置就可以了。
第三个问题,不多说,还是利用死循环:
// 获取当前的视野范围
async getRegion() {
let _this = this
while (true) {
let res = await new Promise((resolve, reject) => {
this.mapCtx.getRegion({
success: resolve,
fail: reject
})
})
if (res.southwest.longitude > 90 && res.southwest.longitude < 180 && res.southwest.latitude > 0 && res.southwest.latitude < 90 && res.northeast.longitude > 90 && res.northeast.longitude < 180 && res.northeast.latitude > 0 && res.northeast.latitude < 90) {
_this.northeast = res.northeast
_this.southwest = res.southwest
break
}
_this.sleep(1)
}
}
提醒下:我用的wepy的框架,所以如果没有用框架需要修改下
上述只是我自己解决的方法,可能没有追究原因很深。