欢迎访问宙启技术站
智能推送

小程序实例:如何根据经纬度计算两点之间的距离(代码)

发布时间:2023-05-17 00:46:49

小程序能够基于用户的当前位置信息进行地图定位、路线推荐等功能,因此在小程序中计算两点之间的距离也是经常涉及的一个问题。本文将为大家详细介绍如何在小程序中根据经纬度计算两点之间的距离,并提供相应的代码实现。

首先,使用小程序的API定位授权功能获取用户当前位置信息。需要在app.json中配置地图定位相关的组件和API:

{
  "pages": [
    "pages/index/index"
  ],
  "window": {
    "navigationBarTitleText": "小程序"
  },
  "permission": {
    "scope.userLocation": {
      "desc": "获取位置信息"
    }
  }
}

在小程序页面的js文件中,可以使用wx.getLocation()函数获取用户当前位置信息:

wx.getLocation({
  type: 'wgs84',
  success(res) {
    const latitude = res.latitude
    const longitude = res.longitude
    const speed = res.speed
    const accuracy = res.accuracy
  }
})

其中,type参数表示返回经纬度的坐标类型,wgs84表示返回的是GPS坐标。接下来,我们可以通过计算两点之间的距离来实现小程序中的路线规划等功能。下面是计算两个GPS坐标之间的距离的函数实现:

function getDistance(lat1, lng1, lat2, lng2) {
  const EARTH_RADIUS = 6378137.0 // 地球半径,单位为米
  const radLat1 = lat1 * Math.PI / 180.0
  const radLat2 = lat2 * Math.PI / 180.0
  const radLng1 = lng1 * Math.PI / 180.0
  const radLng2 = lng2 * Math.PI / 180.0
  const a = radLat1 - radLat2
  const b = radLng1 - radLng2
  let 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.0 // 结果精度为米
  return s
}

该函数传入四个参数:lat、lng表示 个GPS坐标的纬度和经度,lat2、lng2表示第二个GPS坐标的纬度和经度。函数内部先将纬度和经度换算成弧度,然后根据海伦公式计算出两个GPS坐标之间的弧长,再乘以地球半径得到两点之间距离。

在实际代码中,需要将获取到的两个GPS坐标作为参数传递给getDistance()函数,如下所示:

const lat1 = 30.280583 //       个坐标的纬度
const lng1 = 120.016618 //       个坐标的经度
const lat2 = 30.291322 // 第二个坐标的纬度
const lng2 = 120.019915 // 第二个坐标的经度

const distance = getDistance(lat1, lng1, lat2, lng2)
console.log(distance) // 输出两个坐标之间距离,单位为米

以上就是在小程序中根据GPS坐标计算两点之间距离的实现方法。通过这种方式,我们可以实现路线规划、导航等功能,为用户提供更好的使用体验。