比较Lat/Lon并在Python中显示最接近最远
我有一个程序,将用户输入的Lat/Lon与一组Lat/Lon进行比较,并显示最接近的值。代码如下,运行良好:比较Lat/Lon并在Python中显示最接近最远,python,Python,我有一个程序,将用户输入的Lat/Lon与一组Lat/Lon进行比较,并显示最接近的值。代码如下,运行良好: #prints out the closest lat and lon from math import cos, asin, sqrt #Haversine formula def distance(lat1, lon1, lat2, lon2): p = 0.017453292519943295#degree to radian a = 0.5 - cos((lat
#prints out the closest lat and lon
from math import cos, asin, sqrt
#Haversine formula
def distance(lat1, lon1, lat2, lon2):
p = 0.017453292519943295#degree to radian
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))#print in km
def closest(data, v):
return min(data, key=lambda p: distance(v['lat'],v['lon'],p['lat'],p['lon']))
sdata = [{'lat': 37.82, 'lon': 86.142},
{'lat': 38.88, 'lon': 87.251 },
{'lat': 39.78, 'lon': 89.336},
{'lat': 40.42, 'lon': 86.123},
{'lat': 41.35, 'lon': 90.21 },
{'lat': 39.66, 'lon': 87.11}]
lat = input("Latitude:")
lon = input("Longitude:")
cust = {'lat': lat, 'lon':lon}
print(closest(sdata,cust))
但是,我希望在一个范围内显示结果,即从距离列表最近到最远的Lat/lon,而不是单个Lat/lon输出。输入:
lat:40 lon:80
输出:
{'lat':40.42,'lon':86.123}
预期输出:
{'lat':40.42,'lon':86.123},{'lat':39.78,'lon':89.336},{'lat':39.66,'lon':87.11},{'lat':41.35,'lon':90.21},{'lat 38.88,'lon':87.251},{'lat 37.82,'lon':86.142}
获取与输入的所有距离列表,然后对其进行排序
在Python3中测试
from operator import itemgetter
# Use raw_input() with Python 2
lat = float(input("Latitude:"))
lon = float(input("Longitude:"))
distances = (distance(v['lat'],v['lon'],lat,lon) for v in sdata)
for lat_lng, d in sorted(zip(sdata, distances), key=itemgetter(1)):
print(lat_lng['lat'], lat_lng['lon'], d)
输出
Latitude: 0.0
Longitude: 0.0
37.82 86.142 9668.762962674926
40.42 86.123 9679.445101487952
39.66 87.11 9760.193791714297
38.88 87.251 9769.623036766754
39.78 89.336 9950.802415333788
41.35 90.21 10025.072644640604
你也可以在一行中完成
cust = {'lat': 40, 'lon': 80}
out = sorted(sdata, key=lambda data: distance(data['lat'], data['lon'], cust['lat'], cust['lon']))
print(out)
输出:
[{'lat': 40.42, 'lon': 86.123}, {'lat': 37.82, 'lon': 86.142}, {'lat': 39.66, 'lon': 87.11}, {'lat': 38.88, 'lon': 87.251}, {'lat': 39.78, 'lon': 89.336}, {'lat': 41.35, 'lon': 90.21}]
请修复缩进?完成,请现在检查。提供上述代码的输出和预期输出。检查
sorted()
函数已添加输入、输出和预期输出。谢谢,基于距离,现在更准确。我发布的预期输出是错误的。