微信小程序 高德地图知道两点求道路_微信小程序——计算2点之间的距离

本文介绍了在微信小程序中如何使用高德地图和腾讯地图API来计算两点之间的距离。首先,通过定位获取起始点坐标,然后利用地址逆解析获取目标点坐标。接着,通过自定义函数或腾讯地图提供的接口计算距离。在使用过程中遇到的顺序不匹配和解析问题也进行了讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于计算2点之间的距离都依赖了腾讯地图,所以请先在

下面具体讲计算2点之间距离的方法。

方法一:

getPosition: function() {var that = this;

wx.getLocation({

success:function(res) {

that.setData({

fromLng: res.longitude,

fromLat: res.latitude

})

}

})

},

2.通过腾讯地图 逆解析 你的目的地地址,获取经度,纬度:

wx.request({

url:'https://apis.map.qq.com/ws/geocoder/v1/',

data: {"key": "你的腾讯地图 key","address": "目的地"},

method:'GET',

success:function(res) {if(res.data.result) {

const addressLocation=res.data.result.location;

const courseLat= addressLocation.lat;//获取目的地的纬度

const courseLng = addressLocation.lng;//获取目的地的经度

}

that.setData({

toLat: courseLat,

toLng:courseLng

})

}

})

3.定义 计算距离的 方法:

getDistance: function(lat1, lng1, lat2, lng2) {

lat1= lat1 || 0;

lng1= lng1 || 0;

lat2= lat2 || 0;

lng2= lng2 || 0;var rad1 = lat1 * Math.PI / 180.0;var rad2 = lat2 * Math.PI / 180.0;var a = rad1 -rad2;var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;var r = 6378137;var distance = r * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos(rad2) * Math.pow(Math.sin(b / 2), 2)));returndistance;

}

4.调用该方法:

getDistance(fromLng,fromLat,toLat,toLng)

我需要同时计算多条数据的距离,我发现在遍历返回目的地经纬度的时候,它返回来的结果并不是按照你列表的顺序返回来的,而且有些地址还解析不出来。

不知道是我的写法有问题,还是接口调用的问题。如果哪位大神看到网上有这种示例,麻烦提供一下链接给我,借鉴学习一下~后面我采取的是下面这种方法:

方法二:通过腾讯地图的距离计算接口

1.跟方法一第1步一样,获取用户的接口权限;

2.把 qqmap-wx-jssdk.min.js 加到你小程序;

3.在需要计算距离的js页面引用 qmap-wx-jssdk.min.js ,并实例化该对象:

const QQMapWX = require('../../lib/js/qqmap-wx-jssdk.min.js');varqqmapsdk;

onLoad:function(options) {//实例化API核心类

qqmapsdk = newQQMapWX({

key:'VBXBZ-YVGRW-2Z4RK-O6H27-WEXUT-3ZB2M'});

},

4.先逆解析目的地,再调用

wx.request({

url:'https://apis.map.qq.com/ws/geocoder/v1/',

data: {"key": "你的key","address": "目的地名称"},

method:'GET',

success:function(res) {if(res.data.result) {

const addressLocation=res.data.result.location;

const courseLat=addressLocation.lat;

const courseLng=addressLocation.lng;

let destinationDistance;

qqmapsdk.calculateDistance({

to: [{

latitude: courseLat,

longitude: courseLng

}],

success:function(res) {

destinationDistance= res.result.elements[0].distance;

let distanceKm= `${(destinationDistance/1000).toFixed(2)}Km`;//转换成km

that.setData({

distance: distanceKm

})

},

fail:function(res) {

console.log(res);

}

});

}

}

})

注意腾讯地图的请求限制:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值