生成给定距离的坐标,距中心的角度
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" 来计算距离或方位角。
【讨论】:
以上是关于生成给定距离的坐标,距中心的角度的主要内容,如果未能解决你的问题,请参考以下文章
定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: 可以生成具有特定坐标的点对象。 提供可以设置三个坐标的方法。 提供可以计算该“点”距原点距离平方的方法
定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: 可以生成具有特定坐标的点对象。 提供可以设置三个坐标的方法。 提供可以计算该“点”距原点距离平方的方法