已知某点的经纬度,计算往正北或者正南多少公里之后的经纬度

背景

最近在做一个地图操作的页面,需求是在地图上画一个圆圈圈出一片区域之后在圆圈的边缘展现一个弹出层来进行一些操作。调用高德的api,能够获取到该圆圈的中心点的经纬度以及圆圈的半径,但是因为缩放等级的不同,要正好在边缘上显示这个弹出层只能通过获取该弹出层出现的地方的经纬度来得知。因此,就有了这个需求,已知某点的经纬度,计算往正北或者正南多少公里之后的经纬度。

如何计算已知经纬度的两点之间的距离?

首先,地球是个球体,而不是平面,经纬度之间的距离其实是球体上的弧面间的距离。这里有一个方程式可以算出这个距离,Haversine Formula

Haversine Formula from Wikimedia

hav是Haversine function:

Haversine Function

根据Haversine Formula,推算出已知某点的经纬度,计算往正北或者正南多少公里之后的经纬度的JavaScript代码实现。

推算过程写了两张草稿纸,细节欢迎留言咨询。结果如下:

const {
  sqrt, PI, tan, asin,
} = Math;

// (mean) radius of Earth (meters)
const R = 6378137;

function squared(x) {
  return x * x;
}

function toAngle(radian) {
  return radian * 180 / PI; /* eslint no-mixed-operators:0 */
}

// fomular refers to https://en.wikipedia.org/wiki/Haversine_formula
module.exports = function calculateLonLatInSameLongitude(longitude, latitude, distance) {
  const x = tan(distance / R / 2);
  const y = squared(x) / (1 + squared(x));
  const z = asin(sqrt(y)) * 2;
  const latitudeDiff = toAngle(z);
  const newLatitude = latitude + latitudeDiff;
  return {
    longitude,
    latitude: newLatitude,
  };
};

程序接收三个参数,分别是经度,维度,距离(往北为正,往南为负),返回对象{longitude, latitude}

你可能感兴趣的:(已知某点的经纬度,计算往正北或者正南多少公里之后的经纬度)