Heim  >  Artikel  >  Datenbank  >  Wie kann ich Umkreissuchen in einer Datenbank für Geodaten effizient durchführen?

Wie kann ich Umkreissuchen in einer Datenbank für Geodaten effizient durchführen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 01:13:28662Durchsuche

How can I efficiently perform radius searches in a database for geospatial data?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn