生成给定点10公里以内的经/纬度列表

时间:2018-09-13 15:12:06

标签: python algorithm

如何编写以中心point作为参数并返回半径10 km之内的10点列表的方法。

class Point(NamedTuple):
    latitude: float
    longitude: float

def _points_within_radius_km(central_point: Point) -> List[Point]

什么是最好的方法?

1 个答案:

答案 0 :(得分:1)

您可以使用this page中的公式,
给定目标点与起点的距离和方位

φ2 = asin( sin φ1 ⋅ cos δ + cos φ1 ⋅ sin δ ⋅ cos θ )
λ2 = λ1 + atan2( sin θ ⋅ sin δ ⋅ cos φ1, cos δ − sin φ1 ⋅ sin φ2 )

其中φ是纬度,λ是经度,θ是方位角(从北向顺时针方向),δ是角距d / R; d为行进距离,R为地球半径。
Javascript:

  var φ2 = Math.asin( Math.sin(φ1)*Math.cos(d/R) +
                Math.cos(φ1)*Math.sin(d/R)*Math.cos(brng) );
  var λ2 = λ1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(φ1),
                     Math.cos(d/R)-Math.sin(φ1)*Math.sin(φ2));

要在10 km的圆周上取得一些随机点,请生成0..2*Pi范围内的随机方位角和0..10范围内的随机距离。要提供均匀的点分布(如果重要),请将距离设为10.0*Sqrt(random(0..1))