Datenbankabfragen für geografische Radiussuchen
In diesem Zusammenhang zielen wir darauf ab, Personen zu identifizieren, deren Standorte innerhalb definierter Radiusbereiche liegen, die durch Markierungen auf dargestellt werden eine Karte.
Radiusberechnung
Um zu bestimmen, ob ein Punkt (x, y) innerhalb eines Kreises mit Mittelpunkt (x1, y1) und einem Radius von r liegt, Wir verwenden die folgende Formel:
(x - x1)^2 (y - y1)^2 <= r^2
Umrechnung von Grad in Kilometer
Um konsistente Einheiten auf beiden Seiten der Gleichung zu gewährleisten, konvertieren wir Breiten- und Längengrade mit dem Umrechnungsfaktor 111,12 km/Grad in Kilometer.
Modifizierte Formel
Mit der angewendeten Konvertierung lautet die geänderte Formel:
((x - x1) * 111,12)^2 ((y - y1) * 111,12)^2 <= 4
wobei 4 den Quadratradius von 2 Kilometern darstellt.
SQL-Implementierung
Um diese Formel in MySQL zu implementieren, erstellen wir eine Abfrage, die jeden Marker (Benutzer A ) mit dem Mittelpunkt des zu lokalisierenden Benutzers (Benutzer B):
<code class="sql">SELECT A.user_id, A.radius_id, A.latitude, A.longitude FROM UserA AS A JOIN (SELECT user_id, latitude, longitude FROM UserB WHERE user_id = 8) AS B ON (POW((A.latitude - B.latitude) * 111.12, 2) + POW((A.longitude - B.longitude) * 111.12, 2)) <= 4</code>
Genauigkeitsverbesserung
Für genauere Ergebnisse kann die Formel geändert werden Berücksichtigen Sie die Unterschiede zwischen Breiten- und Längengrad in Bezug auf den Breitengrad:
((x - x1) * 111,12 * cos(B.latitude))^2 ((y - y1) * 111,12)^2 < = 4
oder in Bezug auf den Längengrad:
((x - x1) * 111,12 * cos(A.latitude))^2 ((y - y1) * 111,12)^2 < ;= 4
Das obige ist der detaillierte Inhalt vonWie kann ich Umkreissuchen in einer Datenbank für Geodaten effizient durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!