Heim > Datenbank > MySQL-Tutorial > Wie kann man Gebäude im Umkreis von 5 Meilen um gegebene Koordinaten effizient abrufen?

Wie kann man Gebäude im Umkreis von 5 Meilen um gegebene Koordinaten effizient abrufen?

Barbara Streisand
Freigeben: 2025-01-09 11:47:42
Original
115 Leute haben es durchsucht

How to Efficiently Retrieve Buildings within 5 Miles of Given Coordinates?

Ortung von Gebäuden im Umkreis von 5 Meilen: Eine raumbezogene Lösung

Dieser Artikel befasst sich mit der häufigen Herausforderung, alle Gebäude innerhalb eines 5-Meilen-Radius um bestimmte Koordinaten zu identifizieren. Wir stellen eine leistungsstarke Lösung für diese räumliche Abfrage vor.

Szenario:

Stellen Sie sich eine Datenbanktabelle „Gebäude“ mit den Spalten „Name“, „Breitengrad“ („lat“) und „Längengrad“ („lng“) vor. Der Standort jedes Gebäudes wird durch seinen Breiten- und Längengrad definiert.

Das Problem:

Das Ziel besteht darin, alle Gebäude im Umkreis von 5 Meilen um ein bestimmtes Koordinatenpaar abzurufen, zum Beispiel: -84.38653999999998, 33.72024.

Ineffiziente Ansätze:

Die Verwendung von Funktionen wie ST_CONTAINS mit separat gespeicherten Breiten- und Längengradwerten ist ineffizient. Dieser Ansatz führt zu einem erheblichen Mehraufwand bei der Abfrageverarbeitung.

Optimale Lösung: Nutzung räumlicher Datentypen

Für eine optimale Leistung speichern Sie Koordinaten als Geometrie- oder Geografie-Datentypen. Dies vereinfacht die Entfernungsberechnung erheblich. Wir demonstrieren die Verwendung von PostGIS-Funktionen.

Effiziente Methoden: ST_DWithin und ST_Distance

PostGIS bietet leistungsstarke räumliche Funktionen für effiziente Entfernungsberechnungen. So verwenden Sie ST_DWithin und ST_Distance:

Verwendung von ST_DWithin (Boolesches Ergebnis):

ST_DWithin gibt einen booleschen Wert zurück, der angibt, ob Geometrien innerhalb eines angegebenen Abstands liegen.

<code class="language-sql">SELECT name, lng, lat,
  ST_Distance('POINT(-4.6314 54.0887)'::geography,
              ST_MakePoint(lng,lat)::geography) * 0.000621371 AS distance
FROM building
WHERE
  ST_DWithin('POINT(-4.6314 54.0887)'::geography,
              ST_MakePoint(lng,lat)::geography, 8046.72); -- 8046.72 meters = 5 miles</code>
Nach dem Login kopieren

Mit ST_Distance (Entfernung in Meilen):

ST_Distance gibt die Entfernung in Metern zurück. Wir rechnen mithilfe des Umrechnungsfaktors in Meilen um.

<code class="language-sql">SELECT name, lng, lat,
  ST_Distance('POINT(-4.6314 54.0887)'::geography,
              ST_MakePoint(lng,lat)::geography) * 0.000621371 AS distance
FROM building
WHERE 
  ST_Distance('POINT(-4.6314 54.0887)'::geography,
              ST_MakePoint(lng,lat)::geography) * 0.000621371 <= 5;</code>
Nach dem Login kopieren

Durch die Verwendung dieser räumlichen Funktionen und die entsprechende Speicherung von Koordinaten erreichen Sie eine genaue und effiziente Abfrage von Gebäuden in einem Umkreis von 5 Meilen, was für effektive Geodatenanwendungen von entscheidender Bedeutung ist. Denken Sie daran, (-4.6314, 54.0887) durch Ihre tatsächlichen Koordinaten zu ersetzen.

Das obige ist der detaillierte Inhalt vonWie kann man Gebäude im Umkreis von 5 Meilen um gegebene Koordinaten effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage