上記の問題がどこにあるのか正確にはわかりません。座標のセットに基づいて距離を計算するためにアルゴリズムを使用する場合は、以下のコードを自由に使用してください。
from math import radians, cos, sin, asin, sqrt
def haversine(lat1, lng1, lat2, lng2, metric=False):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
earths_radius_km = 6378.1
# convert decimal degrees to radians
lat1, lng1, lat2, lng2 = map(radians, [lat1, lng1, lat2, lng2])
# haversine formula
dlat = lat2 - lat1
dlng = lng2 - lng1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlng/2)**2
c = 2 * asin(sqrt(a))
km = earths_radius_km * c
if not metric:
km_to_miles = 0.621371192
dist = km * km_to_miles
units = 'miles'
else:
dist = km
units = 'km'
return dist, units
if __name__ == '__main__':
print 'Please call from within another script'
# example...
lat1, lng1, lat2, lng2 = 51.0820266, 1.1834209, 52.4931226, -2.1786751
print 'e.g. distance in km is:', haversine(lat1, lng1, lat2, lng2, True)
print 'e.g. distance in miles is:', haversine(lat1, lng1, lat2, lng2)
私の理解が正しければ、あるファイルの座標をループして、別のファイルで最も近い座標を見つけたいですか? この場合、min_distance を任意の高い値 (最初のセットの各値に対して 1000000 など) に初期化し、2 番目の座標セットをループして上記の式 (または使用する任意の距離関数) を呼び出し、min_distance を次の値にリセットします。結果が < 現在の min_distance の場合の結果 (および、2 番目のリストから必要な追加の値を一時変数に格納し、より短い距離を見つけるたびに上書きします)。内側のループですべての反復を実行したら、外側のループの次の反復を開始する前に、必要なデータをリストに格納できます。