-
Twórz swoje punkty za pomocą
Point
wartościGeometry
typy danych wMyISAM
stół. Od Mysql 5.7.5,InnoDB
tabele obsługują teraz takżeSPATIAL
indeksy. -
Utwórz
SPATIAL
indeks 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)