收藏
回答

小程序开发 map问题

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug map 客户端 6.6.7 2.0.4


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

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

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

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


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


最后一次编辑于  2018-07-10
回答关注问题邀请回答
收藏

3 个回答

  • 柯基猫
    柯基猫
    2018-08-15

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

    第一个问题:

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

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


    2018-08-15
    有用
    回复
  • 灰灰
    灰灰
    2018-08-10

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

    2018-08-10
    有用
    回复 1
    • 柯基猫
      柯基猫
      2018-08-10

      第三的个问题利用死循环解决的

      第一二个问题我是无法了


      2018-08-10
      回复
  • AUTMN
    AUTMN
    2018-08-01

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

    2018-08-01
    有用
    回复 3
    • 柯基猫
      柯基猫
      2018-08-10

      第三的个问题利用死循环解决的

      第一二个问题我是无法了


      2018-08-10
      回复
    • AUTMN
      AUTMN
      2018-08-11

      include-points去掉,地图加载后,就会定位到中心了

      2018-08-11
      回复
    • 柯基猫
      柯基猫
      2018-08-14回复AUTMN

      我并没有用 include-points呀,我有动态加markers和controls,在onload里,你设置动态设置中心点完全没报错了?

      2018-08-14
      回复
登录 后发表内容