在微信小程序当中,实现简易的、没有很多复杂功能的地图,可以选用小程序的原生map组件。

WXML如下:

<map id="mymap" longitude="{{longitude}}" latitude="{{latitude}}" scale="14" markers="{{markers}}" subkey="IULBZ-XXXX-XXXX-XXXX-XXXX" bindmarkertap="markertap" show-location>
</map>

常用属性如下:(来自微信公众平台-小程序开发文档

属性类型默认值说明
longitudeNumber 中心经度
latitudeNumber 中心纬度
scaleNumber16缩放级别,取值范围为5-18
markersArray 标记点
subkeyString''个性化地图使用的key,仅初始化地图时有效
bindmarkertapEventHandle 点击标记点时触发,会返回marker的id

1、导航功能实现

需求:从当前位置导航至标记点所在的位置,当点击标记点时触发导航功能

markertap: function (e) {
    wx.openLocation({
      latitude: 39.915378,
      longitude: 116.403694,
      scale: 18,
      name: '天安门广场',
      address:'北京市东城区长安街'
    })
},

2、两点间距离的计算(默认单位km)

    //进行经纬度转换为距离的计算
    function Rad(d){
       return d * Math.PI / 180.0;//经纬度转换成三角函数中度分表形式。
    }

    //计算距离,参数分别为第一点的纬度,经度;第二点的纬度,经度
    function GetDistance(lat1,lng1,lat2,lng2){
 
        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 *6378.137 ;// EARTH_RADIUS;
        s = Math.round(s * 10000) / 10000; //输出为公里
        //s=s.toFixed(2);
        return s;
    }

PS:上面的公式是通过弧度公式算出来的球体上两点之间的最短距离,和导航上的步行/骑行等距离有差别。

 

参考:https://blog.csdn.net/zzjiadw/article/details/7031610

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐