-
Twórz swoje punkty za pomocą
PointwartościGeometrytypy danych wMyISAMstół. Od Mysql 5.7.5,InnoDBtabele obsługują teraz takżeSPATIALindeksy. -
Utwórz
SPATIALindeks w tych punktach -
Użyj
MBRContains()aby znaleźć wartości: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)
lub w MySQL 5.1 i wyżej:
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
)
Spowoduje to wybranie wszystkich punktów w przybliżeniu w polu (@lat +/- 10 km, @lon +/- 10km) .
To właściwie nie jest pudełko, ale sferyczny prostokąt:segment kuli związany z szerokością i długością geograficzną. Może się to różnić od zwykłego prostokąta na ziemi Franciszka Józefa , ale dość blisko w większości zamieszkałych miejsc.
-
Zastosuj dodatkowe filtrowanie, aby zaznaczyć wszystko w okręgu (nie w kwadracie)
-
Ewentualnie zastosuj dodatkowe dokładne filtrowanie, aby uwzględnić odległość dużego koła (dla dużych odległości)