小程序开发 map问题
发布于 5 年前 作者 vhu 7734 次浏览 来自 问答

最近开发小程序遇到以下问题:

1 onLoad()方法中动态设置地图的中心点经纬度在手机(android,ios)有时候失效,有时候可以

2  同样是在onload方法中: map.moveToLocation()也是有时候生效,有时候不生效,但是通过地图上的控件点击触发map.moveToLocation()却是一定生效。

3 onLoadf方法中获取地图的视野范围,返回的经纬度却不一定是正确的,目前是一直获取直到获取正确为止才继续往下执行

希望有人能帮忙解解惑,真心不知道需要在地图的哪个时候去用这些方法了。

4 回复

我也遇到同样的问题,请问有解决的方案了吗?

就目前自己解决的方式说下:

第一个问题:

在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的框架,所以如果没有用框架需要修改下

上述只是我自己解决的方法,可能没有追究原因很深。

同问,几个月前就是这个问题,现在还这样

怎么解决的?

回到顶部