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

背景

最近在做一个地图操作的页面,需求是在地图上画一个圆圈圈出一片区域之后在圆圈的边缘展现一个弹出层来进行一些操作。调用高德的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}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容