Dies ist mein erster Blick auf den geografischen Standort. Bitte vergib mir meine lange Frage. Ich hoffe es ist klar.
Ich habe eine Datenbank, die Datensätze mit lat & amp; lng. Ich versuche, eine PHP-Klasse zu schreiben, die vier Dezimalkoordinaten definiert, die eine Umrandungsbox bilden (um dann alle Datensätze innerhalb der Box abzurufen).
Ich muss nur wissen, welche Orte sich innerhalb n km des Benutzerstandorts befinden. Ich brauche die Entfernungen vom Benutzer zu den Orten nicht.
Ich stütze mich auf den ersten Teil dieser Antwort .
Im Kern der obigen Antwort ist:
10 km in einer geraden Linie ist:
%Vor%Verwenden Sie dies als Grundlage, machen Sie ein paar schnelle Mathe und fügen Sie in Ihrer Abfrage die hinzu WHERE-Klausel entfernt alle Orte, die außerhalb der "Box" sind erzeugt durch Hinzufügen der Pufferzone mit der Annahme von 1 'lat & amp; 6 ' lang.
Mmmm, "mach ein paar schnelle Mathe" sagt Patrick. Ich habe es versäumt, die Mathematik nach ein paar Tagen richtig zu machen.
Meine Klasse hängt dort drinnen und scheint 10km lang zu arbeiten. Allerdings kann ich es nicht mit einer anderen Entfernung arbeiten.
Zuerst bin ich zu Sekunden gewechselt, also 10km ist:
%Vor%Das hat gut funktioniert.
Allerdings habe ich dann versucht 5km ist:
%Vor%Das hat nicht funktioniert.
Können Sie erklären, warum dieser Ansatz für 5 km (und andere Entfernungen, die ich ausprobiert habe) nicht funktioniert?
Unten ist mein Klassencode. Klar ist der Schalter Müll. Jede Hilfe wird geschätzt.
%Vor%Wie die andere Antwort bemerkt, möchten Sie wirklich die Haversine-Formel verwenden, die den Benutzer-Breitengrad berücksichtigt.
Haversine Formel: Ссылка
Diese andere Antwort hat eine Menge großer Ressourcen, um dies in PHP oder SQL zu erreichen:
10 km in einer geraden Linie ist: auf der Länge ist gleich ~ 6 Minuten
Das Verhältnis von Entfernung zu Länge ist keine Konstante - es hängt von der Breite des Benutzers ab. Sie können diese Funktion für den Längenunterschied verwenden:
%Vor%Die Formel stammt aus dieser Frage .
Sie können die Breitenunterschiede von einer bestimmten Entfernung berechnen, indem Sie Folgendes verwenden:
%Vor%Tags und Links php geolocation geographical-information