gpt4 book ai didi

latitude-longitude - 确定纬度/经度是否在地球表面的多边形内

转载 作者:行者123 更新时间:2023-12-02 04:04:58 27 4
gpt4 key购买 nike

我想弄清楚纬度/经度点是否包含在由代表地球上的点(也包括纬度/经度,按顺时针顺序)的顶点定义的多边形内。这对于可以映射到 2D lat/lon 空间的多边形来说是微不足道的。

这变得越来越困难的是圆形(现在切换回 3D)可能从一极到另一极覆盖半个地球。经纬度的转换看起来像一个正弦波。多边形测试中的二维点不再适用于这种情况。是否存在解决此问题的算法?

================== 澄清以下评论:===================多边形定义为以度为单位的 (lon, lat) 对,即 (60, 90)、(60, 110)、(-30, 110)、(-30, 90)。

我确实有实现光线转换算法的代码,而且可以正常工作。然而,地球表面的某些多边形不会转换为二维空间中的闭合多边形。

最佳答案

如 denniston.t 所述,如果您只对圆感兴趣,并且有半径,您可以简单地检查 Great Circle Distance 是否存在。中心点与点之间的距离小于半径。要查找大圆距离,您通常使用 Haversine Formula .以下是我在python中的实现:

from math import radians, sin, cos, asin, sqrt

def haversine(point1, point2):
"""Gives the distance between two points on earth.

The haversine formula, given two sets of latitude and longitude,
returns the distance along the surface of the earth in miles,
ignoring potential changes in elevation. The points must be in
decimal degrees.
"""
earth_radius_miles = 3956
lat1, lon1 = (radians(coord) for coord in point1)
lat2, lon2 = (radians(coord) for coord in point2)
dlat, dlon = (lat2 - lat1, lon2 - lon1)
a = sin(dlat/2.0)**2 + cos(lat1) * cos(lat2) * sin(dlon/2.0)**2
great_circle_distance = 2 * asin(min(1,sqrt(a)))
d = earth_radius_miles * great_circle_distance
return d

关于latitude-longitude - 确定纬度/经度是否在地球表面的多边形内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com