Heim >Datenbank >MySQL-Tutorial >Wie kann ich MySQL verwenden, um Punkte innerhalb eines bestimmten Breiten- und Längenradius zu finden?
Um räumliche Abfragen basierend auf Breiten- und Längengrad durchzuführen, ist die Erweiterung von MySQL um Geodatenfunktionen erforderlich. Es ist jedoch wichtig zu beachten, dass MySQL über integrierte räumliche Funktionen verfügt, die speziell für Entfernungsberechnungen mit diesen Koordinaten entwickelt wurden.
Stattdessen erfordern Näherungskreise auf der Erdoberfläche die Verwendung der Großkreisentfernung Formel, die mithilfe des Haversinus oder anderer geeigneter Algorithmen implementiert werden kann. MySQL 5.6 bietet eine undokumentierte Funktion st_distance(p1, p2), die kartesische Abstände innerhalb planarer Formen berechnet. Diese ist jedoch aufgrund der durch kartesische Abstände verursachten Verzerrungen für Breiten- und Längengrad-basierte Berechnungen ungeeignet.
Für eine praktische Anwendung können Sie eine Abfrage in Betracht ziehen, um alle Flaggen innerhalb von zehn Meilen um einen bestimmten Breiten-/Längengrad zu finden Punkt:
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)
In dieser Abfrage:
Um die Ergebnisse auf Punkte innerhalb des Kreises zu beschränken und sie nach Nähe zu sortieren, schließen Sie die Abfrage in eine andere ein Abfrage:
SELECT id, coordinates, name FROM ( /* the above query, pasted in here */ ) AS d WHERE d.distance <= d.r ORDER BY d.distance ASC
Das obige ist der detaillierte Inhalt vonWie kann ich MySQL verwenden, um Punkte innerhalb eines bestimmten Breiten- und Längenradius zu finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!