小程序之地图

具体用法:
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
大概就先写这些,等到后面遇到了再补充

你可能感兴趣的:(小程序之地图)