我想找到最小距离的lat,long组合。 x_lat,x_long是常量。我想获得y_latitude,y_longitude的组合并计算距离并找出最小距离并返回相应的y_latitude,y_longitude。
以下是尝试,
x_lat = 33.50194395
x_long = -112.048885
y_latitude = ['56.16', '33.211045400000003', '37.36']
y_longitude = ['-117.3700631', '-118.244']
我有一个距离函数可以返回距离,
from math import radians, cos, sin, asin, sqrt
def distance(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))
km = 6367 * c
return km
所以我尝试了类似下面的内容,
dist = []
for i in itertools.product(y_latitude , y_longitude):
print i
dist.append(distance(float(i[1]),float(i[0]),float(x_long), float(x_lat)))
print dist.index(min(dist))
因此,这会创建y_latitude和y_longitude的所有可能组合,并计算距离并返回最小距离的索引。我无法返回相应的y_latitude和y_longitude。
这里最小距离的索引是2,输出是2.所需的输出是('33 .211045400000003',' - 117.3700631'),我无法返回。
有人可以帮我解决最后一块吗?
由于
答案 0 :(得分:1)
试试这个,
dist = []
for i in itertools.product(y_latitude , y_longitude):
dist.append([distance(float(i[1]),float(i[0]),float(x_long), float(x_lat)),i])
min_lat,min_lng = min(dist, key = lambda x: x[0])[1]
将纬度和长度与dist一起追加,并得到第一个索引的min
,