最近新需求:大致是实现实现实时定位在制定范围内打卡
1、一开始照着官方文档这么写的 把整个_getPosition()函数放在定时器中 就出现标记重复的问题,其实这个代码的正确解释应该是 实时创建多个单独的定位
2、百度不到相关的解决方案,只能看高德文档 终于找到了
解决方法 把geolocation.getCurrentPosition() 拆分出来放在定时器中 就解决了

_getPosition () { // 调用浏览器定位服务
      let geolocation = null
      this.myMap.plugin('AMap.Geolocation', () => {
        geolocation = new AMap.Geolocation({
          enableHighAccuracy: true, // 是否使用高精度定位,默认:true
          noIpLocate: 1,
          timeout: 100, // 超过10秒后停止定位,默认:无穷大
          maximumAge: 0, // 定位结果缓存0毫秒,默认:0
          convert: true, // 自动偏移坐标,偏移后的坐标为高德坐标,默认:true
          showButton: false, // 显示定位按钮,默认:true
          buttonPosition: 'LB', // 定位按钮停靠位置,默认:'LB',左下角
          buttonOffset: new AMap.Pixel(10, 20), // 定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
          showMarker: true, // 定位成功后在定位到的位置显示点标记,默认:true
          showCircle: true, // 定位成功后用圆圈表示定位精度范围,默认:true
          panToLocation: false, // 定位成功后将定位到的位置作为地图中心点,默认:true
          zoomToAccuracy: false // 定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
        })
        this.myMap.addControl(geolocation)
        geolocation.getCurrentPosition((status, result) => {
          if (status === 'complete') {
            this.onComplete(result)
          } else {
            this.onError(result)
          }
        })
      })
    }

正确代码

this.interval = setInterval(() => {
  this._getPositionFunc()
}, 2000)

 _getPosition () { // 调用浏览器定位服务
      this.myMap.plugin('AMap.Geolocation', () => {
        this.geolocation = new AMap.Geolocation({
          enableHighAccuracy: true, // 是否使用高精度定位,默认:true
          noIpLocate: 1,
          timeout: 100, // 超过10秒后停止定位,默认:无穷大
          maximumAge: 0, // 定位结果缓存0毫秒,默认:0
          convert: true, // 自动偏移坐标,偏移后的坐标为高德坐标,默认:true
          showButton: false, // 显示定位按钮,默认:true
          buttonPosition: 'LB', // 定位按钮停靠位置,默认:'LB',左下角
          buttonOffset: new AMap.Pixel(10, 20), // 定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
          showMarker: true, // 定位成功后在定位到的位置显示点标记,默认:true
          showCircle: true, // 定位成功后用圆圈表示定位精度范围,默认:true
          panToLocation: false, // 定位成功后将定位到的位置作为地图中心点,默认:true
          zoomToAccuracy: false // 定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
        })
        this.myMap.addControl(this.geolocation)
        this._getPositionFunc()
      })
    },
    _getPositionFunc () {
      this.geolocation.getCurrentPosition((status, result) => {
        console.log('11')
        if (status === 'complete') {
          this.onComplete(result)
        } else {
          this.onError(result)
        }
      })
    }

clearclear
50 声望2 粉丝

引用和评论

0 条评论