生成给定距离的坐标,距中心的角度

Posted

技术标签:

【中文标题】生成给定距离的坐标,距中心的角度【英文标题】:Generate coordinates given distance, angle from a center 【发布时间】:2017-06-24 19:17:18 【问题描述】:

我在地图 [x1,y1] 中有一个给定的中心。从那个中心我画一个半径为 1 英里的圆。我需要在圆周围再生成 8 个点,各个点到中心的距离应该是 1 英里,所以它们在圆的边界上。我确实知道得到 x2, y2 的公式,但问题是它不适用于地球地图,因为它不是一个完美的球体。

我尝试过使用this,但没有成功。

谁能指出我的某个地方,或者我弄错了?

编辑:已解决!

所以仔细阅读 Movable Type Scripts 我发现了这个(为了我的使用稍微修改了):

   let getPoint = (distance, bearing, center) => 

    let δ = Number(distance) / 6371e3; 
    let θ = Number(bearing).toRadians();

    let φ1 = center[0].toRadians();
    let λ1 = center[1].toRadians();

    let sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1);
    let sinδ = Math.sin(δ), cosδ = Math.cos(δ);
    let sinθ = Math.sin(θ), cosθ = Math.cos(θ);

    let sinφ2 = sinφ1*cosδ + cosφ1*sinδ*cosθ;
    let φ2 = Math.asin(sinφ2);
    let y = sinθ * sinδ * cosφ1;
    let x = cosδ - sinφ1 * sinφ2;
    let λ2 = λ1 + Math.atan2(y, x);

    return [φ2.toDegrees(), (λ2.toDegrees()+540)%360-180]; 
;

它确实解决了我的问题。

【问题讨论】:

您没有指定最大允许误差,但是如果您忽略地球的实际拓扑结构,则在一英里的范围内该误差可以忽略不计 【参考方案1】:

您正在尝试解决所谓的first (or direct) geodetic problem。知道这个名字会让你的研究更容易。

正如对“How to draw polyline perpendicular to another polyline using Leaflet”和“Find destination coordinates given starting coodinates, bearing, and distance”的回答所指出的那样,在 javascript 中解决此问题的主要选项是 cheap-ruler 用于小(ish)区域,greographiclib 用于远距离。

cheap-ruler 往往非常快但不准确,geographiclib 往往较慢但非常准确。

您可能会发现其他实现,每个都有自己的折衷方案。大地测量很难,所以there is no "one true way" 来计算距离或方位角。

【讨论】:

以上是关于生成给定距离的坐标,距中心的角度的主要内容,如果未能解决你的问题,请参考以下文章

请教excel的坐标距离计算公式。

定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: 可以生成具有特定坐标的点对象。 提供可以设置三个坐标的方法。 提供可以计算该“点”距原点距离平方的方法

定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: 可以生成具有特定坐标的点对象。 提供可以设置三个坐标的方法。 提供可以计算该“点”距原点距离平方的方法

用起始位置和距离计算新坐标

JavaScript 地理定位:检查距 2 gps 坐标的距离

在距源一定距离处找到坐标