如何检查特定区域内Python的坐标

新手上路,请多包涵

可以说我有两种坐标,第一种叫做 center_point 第二种叫做 test_point 。我想知道 test_point 坐标是否在 center_point 通过应用 radius 阈值。如果我写它,它就像:

 center_point = [{'lat': -7.7940023, 'lng': 110.3656535}]
test_point = [{'lat': -7.79457, 'lng': 110.36563}]

radius = 5 # in kilometer

如何检查 test_point center_point 的半径内还是半径外?我如何在 Python 中执行此类任务?

预期结果会说 test_point 在 --- 的内部或外部 radius 来自 center_point 坐标。

原文由 ytomo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 611
2 个回答

根据@user1753919 在他/她的评论中的推荐,我在这里得到了答案: Haversine Formula in Python (Bearing and Distance between two GPS points)

最终代码:

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

def haversine(lon1, lat1, lon2, lat2):
    """
    Calculate the great circle distance between two points
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

    # haversine formula
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a))
    r = 6371 # Radius of earth in kilometers. Use 3956 for miles
    return c * r

center_point = [{'lat': -7.7940023, 'lng': 110.3656535}]
test_point = [{'lat': -7.79457, 'lng': 110.36563}]

lat1 = center_point[0]['lat']
lon1 = center_point[0]['lng']
lat2 = test_point[0]['lat']
lon2 = test_point[0]['lng']

radius = 1.00 # in kilometer

a = haversine(lon1, lat1, lon2, lat2)

print('Distance (km) : ', a)
if a <= radius:
    print('Inside the area')
else:
    print('Outside the area')

谢谢

原文由 ytomo 发布,翻译遵循 CC BY-SA 3.0 许可协议

GeoPy 可以优雅地处理它:

 from geopy import distance

center_point = [{'lat': -7.7940023, 'lng': 110.3656535}]
test_point = [{'lat': -7.79457, 'lng': 110.36563}]
radius = 5 # in kilometer

center_point_tuple = tuple(center_point[0].values()) # (-7.7940023, 110.3656535)
test_point_tuple = tuple(test_point[0].values()) # (-7.79457, 110.36563)

dis = distance.distance(center_point_tuple, test_point_tuple).km
print("Distance: {}".format(dis)) # Distance: 0.0628380925748918

if dis <= radius:
    print("{} point is inside the {} km radius from {} coordinate".format(test_point_tuple, radius, center_point_tuple))
else:
    print("{} point is outside the {} km radius from {} coordinate".format(test_point_tuple, radius, center_point_tuple))

或者如果你需要知道大圆距离:

 dis = distance.great_circle(center_point_tuple, test_point_tuple).km
print("Distance: {}".format(dis)) # Distance: 0.0631785164583489

原文由 Igor-S 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题