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

在python中以最小距离返回lat long,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我想找到最短距离的横向长组合。x_lat,x_long是常数。我想得到y_纬度,y_经度的组合,计算距离,找出最小距离,并返回相应的y_纬度,y_经度 下面是一个尝试 x_lat = 33.50194395 x_long = -112.048885 y_latitude = ['56.16', '33.211045400000003', '37.36'] y_longitude = ['-117.3700631', '-118.244'] 我有一个距离函数,它会返回距离 from math

我想找到最短距离的横向长组合。x_lat,x_long是常数。我想得到y_纬度,y_经度的组合,计算距离,找出最小距离,并返回相应的y_纬度,y_经度

下面是一个尝试

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_纬度和y_经度的所有可能组合,并计算距离并返回最小距离的索引。我无法让它返回相应的y_纬度和y_经度

这里最小距离的指数是2,输出是2。所需的输出为“33.211045400000003”,“-117.370631”,我无法使其返回

有人能帮我解决最后一个问题吗

谢谢你试试这个

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]

附加lat和long以及dist,并获得第一个索引的min,

返回mindist,而不是返回其索引,该索引只返回最小距离。我想要最小距离对应的y_lat和y_long