-
Erstellen Sie Ihre Punkte mit
Point
Werte vonGeometry
Datentypen inMyISAM
Tisch. Ab MySQL 5.7.5,InnoDB
Tabellen unterstützen jetzt auchSPATIAL
Indizes. -
Erstellen Sie einen
SPATIAL
Index zu diesen Punkten -
Verwenden Sie
MBRContains()
um die Werte zu finden:SELECT * FROM table WHERE MBRContains(LineFromText(CONCAT( '(' , @lon + 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat + 10 / 111.1 , ',' , @lon - 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat - 10 / 111.1 , ')' ) ,mypoint)
, oder in MySQL 5.1
und höher:
SELECT *
FROM table
WHERE MBRContains
(
LineString
(
Point (
@lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat + 10 / 111.1
),
Point (
@lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat - 10 / 111.1
)
),
mypoint
)
Dadurch werden alle Punkte ungefähr innerhalb des Felds (@lat +/- 10 km, @lon +/- 10km)
ausgewählt .
Dies ist eigentlich kein Kasten, sondern ein kugelförmiges Rechteck:Breiten- und Längengrad gebundenes Segment der Kugel. Diese kann auf dem Franz-Joseph-Land von einem einfachen Rechteck abweichen , aber ziemlich nahe an den meisten bewohnten Orten.
-
Wenden Sie eine zusätzliche Filterung an, um alles innerhalb des Kreises auszuwählen (nicht das Quadrat)
-
Wenden Sie möglicherweise eine zusätzliche Feinfilterung an, um die Entfernung des großen Kreises zu berücksichtigen (für große Entfernungen)