收藏
回答

小程序map组件,如何测量拖动地图后地图两中心点的距离

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 需求 map 工具 6.6.7 2.2.0

- 需求的场景描述(希望解决的问题)

用户拖动地图后,需要得到前后地图两中心点的距离


- 希望提供的能力

地图组件map能否有一个api可以得到当前地图视野范围中心点,并且提供一个api可以计算两中心点坐标距离


以下是个人代码片段

// 视野发生变化时触发

bindregionchange(e){

console.log(e);

let that = this;

this.mapCtx.getCenterLocation({

success:function(res){

let startLoc={

latitude:'',

longitude:''

};

let endLoc = {

latitude: '',

longitude: ''

};

if(e.type==='begin'){

startLoc.latitude = res.latitude;

startLoc.latitude = res.longitude

}else{

startLoc.latitude = res.latitude;

startLoc.latitude = res.longitude;

//如果map中心点坐标没有变就不需要重新请求数据

let isCenterChange = that.data.latitude === that.data.latitudeCenter &&

that.data.longitude === that.data.longitudeCenter;

if (!isCenterChange) {

that.handleinitMap({ latitude: res.latitude, longitude: res.longitude });

}

}

//测两点距离

// let distance = that.distance(startLoc.latitude,startLoc.longitude,endLoc.longitude,endLoc.longitude);

// if (distance > 13000){

//   console.log(distance);

// }


},

});

},


// 计算两点的距离

distance(la1, lo1, la2, lo2) {

var La1 = la1 * Math.PI / 180.0;

var La2 = la2 * Math.PI / 180.0;

var La3 = Math.abs(La1 - La2);

var Lb3 = Math.abs(lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0);

var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)));

s = s * 6378.137;//地球半径,单位公里

s = Math.round(s * 10000) / 10000;

return s;

},


回答关注问题邀请回答
收藏

2 个回答

  • cunjinli
    cunjinli
    2018-08-30

    你好,你的反馈我们已收到,我们会在后续的版本中考虑增加类似功能。

    2018-08-30
    有用 1
    回复
  • 黄瑞垠(Ryan.H)
    黄瑞垠(Ryan.H)
    2019-12-26

    楼主的代码片段,bug真多,哈

    2019-12-26
    有用
    回复
登录 后发表内容