Ich habe eine mySQL-Tabelle mit Benutzername, Breite und Länge des Benutzers. Ich möchte eine Liste von Benutzern erhalten, die sich innerhalb des Kreises oder Quadrats eines bestimmten Breiten- und Längengrads mit einem bestimmten Abstand befinden. Zum Beispiel meine Eingabe Lat = 78,3232 und Long = 65,3234 und Entfernung = 30 Meilen. Ich möchte die Liste der Benutzer erhalten, die sich innerhalb von 30 Meilen Entfernung von den Punkten 78.3232 und 65.3234 befinden. Ist es möglich, dies mit einer einzigen Abfrage zu lösen? Oder können Sie mir einen Tipp geben, wie ich diese Frage lösen kann? Ich bin neu in den geobasierten Informationen.
20
Antworten:
Die SQL-Anweisung, mit der die nächsten 20 Positionen innerhalb eines Radius von 30 Meilen zur Koordinate 78.3232, 65.3234 gefunden werden. Es berechnet die Entfernung basierend auf der Breite / Länge dieser Zeile und der geografischen Breite / Länge des Ziels und fragt dann nur Zeilen ab, in denen der Entfernungswert weniger als 30 Meilen beträgt, ordnet die gesamte Abfrage nach Entfernung und begrenzt sie auf 20 Ergebnisse. Um nach Kilometern anstatt nach Meilen zu suchen, ersetzen Sie 3959 durch 6371.
Hierbei wird die Google Maps API v3 mit einem MySQL-Backend verwendet, über das Sie bereits verfügen.
https://developers.google.com/maps/articles/phpsqlsearch_v3#findnearsql
quelle
Die Antwort von Mapperz ist ungültig. Der Sinus muss aus dem Breitengrad und NICHT aus dem Längengrad berechnet werden. Die korrekte SQL-Anweisung lautet also:
quelle
Es kann eine Basis sein, um eine Funktion zu erstellen, damit Sie sie in anderen Bereichen wiederverwenden können. Würde auch deine Abfrage ein bisschen sauberer machen ... Zumindest sind das meine 2 Cent.
quelle
Hier ist meine Variante der Abfrage, scheint ein bisschen einfacher ( http://dexxtr.com/post/83498801191/how-to-determine-point-inside-circle-using-mysql )
quelle