【发布时间】:2018-11-19 02:29:40
【问题描述】:
我有 2 组纬度和经度。
A = [{'lat' :40.2877, 'lon' : -94.7913}, {'lat' :40.7171, 'lon' : -73.9664}, {'lat' :32.7052, 'lon' : -117.1897}, {'lat' :33.2388, 'lon' : -115.5045}, .... ]
B = [{'lat' :47.7351, 'lon' : -117.3705}, {'lat' :41.6422, 'lon' : -71.1706}]
我需要找到B 的最近点、第二近点和第三近点。
为了找到最近的,我使用了:
from math import cos, asin, sqrt
def distance(lat1, lon1, lat2, lon2):
p = 0.017453292519943295
a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p)*cos(lat2*p) * (1-cos((lon2-lon1)*p)) / 2
return 12742 * asin(sqrt(a))
def closest(data, B):
return min(data, key=lambda p:distance(B['lat'],B['lon'],p['lat'],p['lon']))
for item in B:
print(closest(A, item))
如何在B 中找到每个项目的第二近点和第三近点?
【问题讨论】:
-
不使用
min,而是使用sorted和相同的lambda键。这应该为您提供A中每个点的距离分数,对于B中的每个点。
标签: python distance latitude-longitude