如何编写以中心point
作为参数并返回半径10 km之内的10
点列表的方法。
class Point(NamedTuple):
latitude: float
longitude: float
def _points_within_radius_km(central_point: Point) -> List[Point]
什么是最好的方法?
答案 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))