如何检查某个区域内的坐标Python

Posted

技术标签:

【中文标题】如何检查某个区域内的坐标Python【英文标题】:How to check if coordinate inside certain area Python 【发布时间】:2017-07-29 21:42:18 【问题描述】:

假设我有两种坐标,第一种称为center_point,第二种称为test_point。我想通过应用radius 阈值来知道test_point 坐标是否在center_point 坐标附近。如果我写它,它就像:

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

radius = 5 # in kilometer

如何在 Python 中检查 test_point 是否位于center_point 的半径内或外?我如何在 Python 中执行这种任务?

预期结果将显示test_pointradius 内部或外部center_point 坐标。

【问题讨论】:

使用harsine公式***.com/questions/4913349/…计算距离,看是否小于r 嗨@user1753919 谢谢,它的工作原理。 【参考方案1】:

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

【讨论】:

谢谢。这真的很有帮助。我认为你可以直接这样做 center_point_tuple = (-7.7940023, 110.3656535) test_point_tuple = (-7.79457, 110.36563) 你这样写有什么理由吗?【参考方案2】:
from math import sqrt
a = center_point[0]['lat'] - test_point[0]['lat']
b = center_point[0]['lng'] - test_point[0]['lng']
c = sqrt(a * a  +  b * b)
if (c < radius):
        print("inside")
else:
        print("outside")

【讨论】:

嗨,c = math.sqrt(aa + bb) 中的 aabb 指的是什么? 抱歉,格式错误。我对其进行了编辑以使其更清晰。 如何以更少的计算成本在整个数据帧上进行测试? 这应该使用 KDTree 或 kNearestNeighbors 算法更有效地完成,但我还没有找到任何实际使用 lat-lon 点的示例。【参考方案3】:

根据@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')

谢谢

【讨论】:

感谢您的解决方案!非常适合我们的项目 :)

以上是关于如何检查某个区域内的坐标Python的主要内容,如果未能解决你的问题,请参考以下文章

如何改变图像中某个区域的灰度值?

获取特定区域内的坐标

在ionic 3中检查我的区域圈内的纬度和经度

区域内的地理点

获取一个区域内的所有坐标 - 谷歌地图

如何确定您之前是不是在时间序列数据中访问过某个区域