-
Vytvořte své body pomocí
Point
hodnotyGeometry
datové typy vMyISAM
stůl. Od Mysql 5.7.5,InnoDB
tabulky nyní také podporujíSPATIAL
indexy. -
Vytvořte
SPATIAL
index na těchto bodech -
Použijte
MBRContains()
najít hodnoty: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)
nebo v MySQL 5.1
a výše:
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
)
Tím vyberete všechny body přibližně v rámečku (@lat +/- 10 km, @lon +/- 10km)
.
Toto ve skutečnosti není krabice, ale sférický obdélník:segment koule vázaný na zeměpisnou šířku a délku. Může se lišit od prostého obdélníku na Země Františka Josefa , ale na většině obydlených míst docela blízko.
-
Použijte další filtrování a vyberte vše uvnitř kruhu (ne čtverce)
-
Případně použijte další jemné filtrování pro zohlednění vzdálenosti velkého kruhu (pro velké vzdálenosti)