Mein Ziel ist es, die lat/long-Position eines Benutzers abzurufen und dann den nächsten lat/long in meiner Liste der Orte zu finden. Unten ist, was ich habe und ich glaube, es funktioniert, aber ich bin mir nicht sicher, ob dies die beste Methode ist, um zu dem Endergebnis zu kommen, das ich will.Finde das nächste Wertpaar mit Python3
Ich gehe durch die Liste der Standorte, die sie in absolute Werte umwandeln, subtrahiere dann den Standortwert des Benutzers, um die Entfernung zu erhalten. Wenn entweder X oy Y kleiner als das zuvor aufgezeichnete X oder Y ist, wird die Abstandsvariable mit den neuen Werten aktualisiert.
Dies scheint zu funktionieren, aber wie ich schon sagte, ich bin mir nicht sicher, ob ich es in der bestmöglichen Weise gemacht habe. Meine Liste der Standorte wird immer wieder aktualisiert, aber es werden nicht mehr als 100 mögliche Positionen angezeigt.
Vielen Dank für Ihre Zeit.
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
geografische Breite und Länge sind nicht x/y. Sie können nicht einfach die euklidische oder Manhatten-Distanz usw. zwischen zwei solchen Koordinaten berechnen. Weiter gibt es einen Wraparond. –
Wie genau brauchen Sie das? Weil die euklidische Distanz vielleicht nicht präzise genug ist - zum Beispiel nimmt ein Breitengrad an den Polen ~ 111,7 km ein, aber am Äquator deckt er "nur" ~ 110,6 km ab. – zwer
Ich verstehe, wenn wir auf den gesamten Globus skaliert sind, dass wir diese Koordinaten nicht als Gitter darstellen können, aber ich arbeite mit einer kleinen Region der USA, also dachte ich, dass es in meinem eingeschränkten Bereich für relative Entfernung funktionieren könnte. Ist meine Annahme falsch? – Reizvoller