如何检查特定区域内的坐标 Python
How to check if coordinate inside certain area Python
假设我有两种坐标,第一种称为 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
如何判断test_point
是在Python的center_point
半径内还是在半径外?我如何在 Python?
中执行此类任务
预期结果会说 test_point
在 center_point
坐标的 radius
内部或外部。
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")
根据@user1753919 在his/her 评论中的推荐,我在这里得到了答案: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')
谢谢
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
,第二种称为 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
如何判断test_point
是在Python的center_point
半径内还是在半径外?我如何在 Python?
预期结果会说 test_point
在 center_point
坐标的 radius
内部或外部。
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")
根据@user1753919 在his/her 评论中的推荐,我在这里得到了答案: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')
谢谢
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