Heim > Datenbank > MySQL-Tutorial > Wie kann ich effizient alle Gebäude im Umkreis von 5 Meilen um einen bestimmten Punkt finden?

Wie kann ich effizient alle Gebäude im Umkreis von 5 Meilen um einen bestimmten Punkt finden?

Mary-Kate Olsen
Freigeben: 2025-01-09 11:56:46
Original
156 Leute haben es durchsucht

How Can I Efficiently Find All Buildings Within 5 Miles of a Given Point?

Räumliche Abfrage optimieren: Alle Gebäude im Umkreis von 5 Meilen effizient finden

In diesem Artikel wird ein häufiges räumliches Problem untersucht: das Abrufen aller Gebäude innerhalb eines bestimmten Radius von einem bestimmten Koordinatenpunkt. Die direkte Verwendung der ST_CONTAINS-Funktion ist möglicherweise nicht effizient, daher werden in diesem Artikel bessere Lösungen untersucht.

Die Bedeutung der Datendarstellung

Bevor wir auf die technischen Details eingehen, ist es wichtig, die Bedeutung einer korrekten Datendarstellung hervorzuheben. Das Speichern von Geodaten als separate Längen- und Breitengradspalten führt zu Ineffizienzen bei Abfragevorgängen. Zu diesem Zweck wird dringend empfohlen, die Datentypen geometry oder geography zu verwenden, die zwei Koordinaten in einem einzigen Feld kapseln.

Verwenden Sie ST_DWithin, um Näherungsabfragen effizient durchzuführen

ST_DWithin ist eine leistungsstarke Funktion, die direkt prüft, ob zwei Geometrien innerhalb eines bestimmten Abstands liegen. Indem wir den Suchradius in Meter umrechnen und ihn mit der mit ST_DWithin berechneten Entfernung vergleichen, können wir Gebäude innerhalb des gewünschten Bereichs effizient identifizieren.

<code class="language-sql">SELECT name, long, lat
FROM building
WHERE ST_DWithin(
  ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
  ST_POINT(long, lat),
  8046.72
);
-- 8046.72 米 = 5 英里</code>
Nach dem Login kopieren

Verwenden Sie ST_Distance, um die konvertierte Meilenentfernung zu verarbeiten

Alternativ können Sie ST_Distance verwenden, um den Abstand zwischen geometrischen Formen zu berechnen. Die Ausgabe erfolgt zunächst in Metern, wir können sie jedoch mithilfe eines einfachen Multiplikationsfaktors in Meilen umrechnen:

<code class="language-sql">SELECT name, long, lat,
  ST_Distance(
    ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
    ST_POINT(long, lat)
  ) * 0.000621371 AS distance
FROM building
WHERE distance < 5;</code>
Nach dem Login kopieren

Hinweis: Bei Verwendung von ST_Distance müssen räumliche Abfragen mithilfe von Indizes effizient verarbeitet werden. Obwohl ST_Distance selbst keine Indizierung unterstützt, kann die Erstellung eines räumlichen Indexes für ST_GEOMETRY die allgemeine Abfrageleistung optimieren.

Zusammenfassung

Durch die Erforschung alternativer Ansätze und den Schwerpunkt auf die Optimierung der Datendarstellung demonstrieren wir eine Methode zum effizienten Abrufen von Gebäuden innerhalb eines bestimmten Bereichs. Die in diesem Dokument vorgestellten Techniken bieten Skalierbarkeit und Leistungsverbesserungen für räumliche Abfragen in realen Anwendungen.

Das obige ist der detaillierte Inhalt vonWie kann ich effizient alle Gebäude im Umkreis von 5 Meilen um einen bestimmten Punkt finden?. 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