場所のリストがあり、各場所を他の場所と比較して、近い場所を除外したいと考えています。ここで「近い」とは20kmという意味です。任意の場所間の距離が「近い」よりも大きい場合は、十分に遠い場所として結果リストに追加する必要があります。これを行って、各場所をリスト内の他の場所と比較しました。しかし、私はいくつかの距離の比較が欠けていると思います。だから、どんな助けも素晴らしいでしょう。
私が達成したいことと行き詰まった場所についての例を挙げましょう。たとえばlocation_list=[A,B,C,D,E,F]
、最初の比較ペアは で(A,B)
、それらの間の距離は 25km です。そのため、しきい値を超えているA,B
ため、結果リストに追加できます。2 番目の比較は(A,C)
、それらの間の距離が 50 km であり、しきい値を超えています。ここでは、以前に結果リストに追加された A および B と C を比較する必要があります。間の距離(B,C)
がしきい値よりも大きい場合、i をC
結果リストに追加する必要があります。それ以外の場合は、以前に追加した場所に近いため、C をリストに追加しないでください。
私が行き詰まったポイントはこれです。前のステップでリストに追加された新しい場所(e.g., C)
をどのように比較できますか。(A,B)
from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
# 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
result=[]
location_list=[(44.968046,-94.420307),
(44.33328,-89.132008),
(33.755787,-116.359998),
(33.844843,-116.54911),
(44.92057,-93.44786),
(44.240309,-91.493619),
(44.968041,-94.419696),
(44.333304,-89.132027),
(33.755783,-116.360066),
(33.844847,-116.549069),
(44.920474,-93.447851),
(44.240304,-91.493768)]
for j in location_list:
for k in location_list:
if haversine(j[0],j[1],k[0],k[1])>20:
print j,k,haversine(j[0],j[1],k[0],k[1])
result.append(j[0],j[1])
result.append(k[0],k[1])