2017-07-19 17 views
0

私の目標は、ユーザーの緯度/経度の位置を取得し、次に緯度/経度に最も近い緯度/経度を検索することです。以下は私が持っているものですが、私はそれがうまくいくと信じていますが、これが私が望む最終結果に至る最善の方法であるかどうかはわかりません。最も近い値のペアをPython3で探す

私は場所のリストを絶対値に変換してから、ユーザーの位置の値を差し引いて距離を取得します。 X oy Yが以前に記録されたXまたはYより小さい場合、距離変数は新しい値で更新されます。

しかし、私が言ったように、これはうまくいくとは思えません。私の場所のリストは非常に頻繁に更新されますが、100の可能な位置を超えません。

ありがとうございます。

locations = [(-71.43994800000002,41.6919549), 
(-71.61075089999997,41.577545), 
(-71.06653670000003,42.41383099999999), 
(-71.41283429999999,41.8239891), 
(-71.05888010000001,42.3600825), 
(-74.00594130000002,40.7127837)] 

userlocation = (-71.28254930000003,41.7303793) 

distance = [999,999] #initial value holder for distance 
for location in locations: 
    x = abs(location[0]) # absolute value of latitude 
    y = abs(location[1]) #absolute value of longitude 
    xu = abs(userlocation[0]) #absolute value of user's latitude 
    yu = abs(userlocation[1]) #absolute value of user's longitude 
    dx = x-xu #Subtract user from location X 
    dy = y-yu #subtract user from location Y 
    if dx < distance[0]: #if distance X is less than the current distance value 
     distance[0] = dx #update with new values 
     distance[1] = dy 
     continue #go to the next one 
    if dy < distance[1]: #if distance Y is less than the current distance value 
     distance[0] = dx #update with new values 
     distance[1] = dy 
     continue #go to the next one 
print(distance) #print the end smallest result 
+0

緯度と経度は、x/yのない取得しよう。このような2つの座標間のユークリッド距離やマンハッタン距離などを単純に計算することはできません。もっといっぱい、ラパラッドがあります。 –

+0

どのくらい正確に必要ですか?ユークリッド距離は十分に正確ではないかもしれません - 例えば、極の緯度は約111.7kmですが、赤道では唯一〜110.6kmをカバーします。 – zwer

+0

私は、グリッドとしてこれらの座標を表現することができない地球全体にスケールアップされたときは理解していますが、私は米国の小さな領域で作業していますので、制限された領域内では相対距離で動作すると思っていました。私の仮定は間違っていますか? – Reizvoller

答えて

0

Iは実際の距離は、次にハック方法Calculate distance between two latitude-longitude points? (Haversine formula)に距離を比較した後

def calculate_distance(lat1, lon1, lat2, lon2): 
    # go to the link to use the implementation 
    pass 
locations = [] 
user_loc = (-71.28254930000003,41.7303793) 
ulat, ulon = user_loc 
res = map(lambda x: (calculate_distance(ulat, ulon, x[0], x[1]), x), locations) 
print min(res, key=lambda x: x[0]) 
関連する問題