具体用法:
https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.openLocation.html
去搜了下关于使用微信打开地图会遇到的问题,我下面总结下大家遇到的问题,可能不全面:
1、在IOS遇到的errMsg:openLocation:fail invalid_coordinate
传到openLocation的latitude,logitude,必须是浮点类型的。(偏多人遇到)
openLocation需要使用火星坐标(https://baike.baidu.com/item/火星坐标系统/6734069 , https://www.cnblogs.com/sylvanas2012/p/5342530.html) 才能定位准确,所需getLocation的时候,type可以传gcj02(总的来说百度地图用在他们自己软件比较好,我们吧用高德和腾讯地图)
例如:
wx.getLocation({
type:'gcj02',
success: function(res) {
var latitude = res.latitude;
var longitude = res.longitude;
wx.openLocation({
latitude: latitude,
longitude: longitude,
scale:30,
name:'地图',
address:'福州'
})
},
})
2、如果想通过js修改地图的mark的坐标,光修改绑定坐标是无效的,需要通过小程序的地图组件控制接口wx.createMapContext,用translateMarker方法修改标记坐标才行
首先在页面onReady创建对象
onReady: function (e) {
// 使用 wx.createMapContext 获取 map 上下文
this.mapCtx = wx.createMapContext('restaurantMap')
}
然后在需要修改坐标的时候用此方法
this.mapCtx.translateMarker({
markerId: 0,//所要操作的标记ID,在data中已预先定义
autoRotate: false,
rotate: 0,
duration: 100,
destination: {//新的坐标值
latitude: ***,
longitude: ***,
},
animationEnd() {
console.log('animation end')
}
})
3、计算两地之间的距离:
var EARTH_RADIUS = 6378.137; //地球半径
function rad(d) {
return d * Math.PI / 180.0;
}
function getDistance(lng1, lat1, lng2, lat2) {
var radLat1 = rad(lat1);
var radLat2 = rad(lat2);
var a = radLat1 - radLat2;
var b = rad(lng1) - rad(lng2);
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;//返回数值单位:公里
}
还有一种据说比较精确,尚未验证
function getFlatternDistance(lat1,lng1,lat2,lng2){
var f = getRad((lat1 + lat2)/2);
var g = getRad((lat1 - lat2)/2);
var l = getRad((lng1 - lng2)/2);
var sg = Math.sin(g);
var sl = Math.sin(l);
var sf = Math.sin(f);
var s,c,w,r,d,h1,h2;
var a = EARTH_RADIUS;
var fl = 1/298.257;
sg = sg*sg;
sl = sl*sl;
sf = sf*sf;
s = sg*(1-sl) + (1-sf)*sl;
c = (1-sg)*(1-sl) + sf*sl;
w = Math.atan(Math.sqrt(s/c));
r = Math.sqrt(s*c)/w;
d = 2*w*a;
h1 = (3*r -1)/2/c;
h2 = (3*r +1)/2/s;
return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));
}
还有的可以看这个哦,很清楚
转载注明:https://blog.csdn.net/sinat_41310868/article/details/78896324
大概就先写这些,等到后面遇到了再补充