2011-01-07 12 views
1

Ich habe diese Website, die Breiten- und Längengrad von einigen Orten speichert und ich möchte die nächstgelegenen Orte (sagen wir, in einem Umkreis von 10km) von einem bestimmten Ort anzeigen.Finden Sie Orte in der Nähe von Längen- und Breitengrad

Wie suche ich in meiner MySQL-Tabelle für diese Orte?

+0

Ein ausführlicher Blog: http://sforsuresh.in/finding-nearest-location-using-latitude-longitude/ –

Antwort

4

Ich beantwortete diese Art von Frage vor einigen Jahren um Google Answers und wieder vor kurzem bei Uclue.

Ich sollte beachten, dass die bevorzugte technische Konvention Längen im Westen als negative Werte darstellt, aber das wird manchmal nicht beobachtet. Es wird keinen großen Unterschied machen, es sei denn, Sie berechnen über den Meridian gegenüber dem Nullmeridian (wo die Länge umgeht), aber es ist etwas, das Sie über Ihre Datenbank und die Konsistenz mit anderen geografischen Repositorien wissen sollten.

am: Wie in der Uclue Frage oben verbunden umrissen, das Ziel ist, zwei Paare von Werten zu berechnen, MINLATITUDE/MAXLATITUDE und MINLONGITUDE/MAXLONGITUDE, so dass alle Punkte in einem bestimmten Abstand von einer gegebenen Position sind enthalten in die Ergebnisse der SQL-Abfrage:

SELECT * FROM Locations 
    WHERE (latitude between MINLATITUDE and MAXLATITUDE) 
    and (longitude between MINLONGITUDE and MAXLONGITUDE) 

Ab MySQL 5.0 können wir die Berechnungen der MIN/MAX-Paare zusammen mit der SELECT in einer bequemen gespeicherten Prozedur bündeln. Wir können sogar die Ergebnisse einer solchen Abfrage mit einem Cursor durchlaufen und die exakte "Großkreis" -Distanz überprüfen, wenn eine solche Genauigkeit gewünscht wird. Ich würde jedoch annehmen, dass ein vereinfachter Ansatz, der die obige Abfrage dynamisch von einem aufrufenden Framework wie Python oder C++ erstellt, für die meisten Anwendungen sinnvoll ist (um die Arbeit des Datenbankservers zu minimieren).

Lassen Sie mich wissen, wenn ich auf diese Möglichkeiten eingehen sollte.

Verwandte Themen