在python中以最小距离返回lat long

时间:2017-02-09 07:50:05

标签: python python-2.7 python-3.x

我想找到最小距离的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'),我无法返回。

有人可以帮我解决最后一块吗?

由于

1 个答案:

答案 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