Heim > Datenbank > MySQL-Tutorial > Wie wähle ich Punkte innerhalb eines Kreises mithilfe von MySQL Spatial Extensions und Breiten-/Längengrad aus?

Wie wähle ich Punkte innerhalb eines Kreises mithilfe von MySQL Spatial Extensions und Breiten-/Längengrad aus?

Mary-Kate Olsen
Freigeben: 2025-01-06 12:23:41
Original
378 Leute haben es durchsucht

How to Select Points Within a Circle Using MySQL Spatial Extensions and Latitude/Longitude?

MySQL Spatial Extensions: Punkte innerhalb eines Kreises basierend auf Breiten-/Längengrad auswählen

Hintergrund:

MySQL kann mithilfe seiner räumlichen Erweiterungen Geodaten speichern. Dies ermöglicht eine effiziente Abfrage und Manipulation von räumlichen Objekten, einschließlich Punkten, Linien und Polygonen. Eine häufige Aufgabe besteht darin, Punkte innerhalb eines bestimmten Radius von einem bestimmten Standort aus auszuwählen.

Geodatenerweiterungen verwenden:

Um diese Aufgabe auszuführen, stellt MySQL mehrere Geodatenfunktionen bereit, einschließlich Puffer (), wodurch eine Pufferzone um einen Punkt oder eine Linie erstellt wird. Es ist jedoch wichtig zu beachten, dass MySQL Näherungsberechnungen basierend auf Breiten- und Längengrad nicht nativ unterstützt.

Alternativer Ansatz:

Zur Bestimmung von Punkten innerhalb eines Kreises basierend auf Breiten- und Längengrad erfordern einen anderen Ansatz. Mit der Großkreisentfernungsformel kann der Abstand zwischen zwei Punkten auf der Erdoberfläche berechnet werden. Dies kann in eine MySQL-Abfrage integriert werden, um Punkte innerhalb eines bestimmten Radius zu filtern.

Beispielabfrage:

Die folgende Abfrage zeigt, wie die Formel „Großkreisentfernung“ verwendet wird Wählen Sie Flaggen in einem Umkreis von 100 Metern um einen bestimmten Breiten- und Längengrad aus:

SELECT id, coordinates, name, r,
        units * DEGREES(ACOS(LEAST(1.0, COS(RADIANS(latpoint))
                  * COS(RADIANS(latitude))
                  * COS(RADIANS(longpoint) - RADIANS(longitude))
                  + SIN(RADIANS(latpoint))
                  * SIN(RADIANS(latitude))))) AS distance
   FROM flags
   JOIN (
        SELECT 42.81  AS latpoint,  -70.81 AS longpoint, 
               10.0 AS r, 69.0 AS units
        ) AS p ON (1=1)
  WHERE MbrContains(GeomFromText (
        CONCAT('LINESTRING(',
              latpoint-(r/units),' ',
              longpoint-(r /(units* COS(RADIANS(latpoint)))),
              ',', 
              latpoint+(r/units) ,' ',
              longpoint+(r /(units * COS(RADIANS(latpoint)))),
              ')')),  coordinates)
Nach dem Login kopieren

In dieser Abfrage werden der Breitengrad und Longpoint-Parameter stellen den Standort des Benutzers dar. Die Parameter „r“ und „units“ geben den Radius (in Metern) und die Entfernungseinheiten pro Breitengrad an.

Zusätzliche Überlegungen:

  • Die obige Abfrage berechnet Entfernungen Verwenden der Großkreisentfernungsformel, die genauer ist als die kartesische Entfernung für Breiten- und Längengrade.
  • Um die Ergebnisse auf Punkte innerhalb des zu beschränken Kreis hinzufügen, fügen Sie eine WHERE-Klausel hinzu, um nach Entfernungen zu filtern, die kleiner oder gleich dem Radius sind.
  • Ordnen Sie die Ergebnisse nach Entfernung, um die nächstgelegenen Flaggen zuerst anzuzeigen.
  • Die räumliche Indizierung in der Koordinatenspalte kann verbessert werden Die Abfrageleistung wird erheblich verbessert.

Durch die Befolgung dieses Ansatzes können Sie Punkte innerhalb eines Kreises basierend auf Breiten- und Längengrad effektiv auswählen und so standortbasierte Anwendungen erstellen Räumliche MySQL-Erweiterungen.

Das obige ist der detaillierte Inhalt vonWie wähle ich Punkte innerhalb eines Kreises mithilfe von MySQL Spatial Extensions und Breiten-/Längengrad aus?. 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