-
Crea i tuoi punti usando
Point
valori diGeometry
tipi di dati inMyISAM
tavolo. A partire da Mysql 5.7.5,InnoDB
le tabelle ora supportano ancheSPATIAL
indici. -
Crea un
SPATIAL
indice su questi punti -
Usa
MBRContains()
per trovare i valori: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)
o, in MySQL 5.1
e oltre:
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
)
Questo selezionerà tutti i punti approssimativamente all'interno della casella (@lat +/- 10 km, @lon +/- 10km)
.
Questa in realtà non è una scatola, ma un rettangolo sferico:segmento della sfera legato a latitudine e longitudine. Può differire da un rettangolo semplice nella Franz Joseph Land , ma abbastanza vicino ad esso nella maggior parte dei luoghi abitati.
-
Applica un filtro aggiuntivo per selezionare tutto all'interno del cerchio (non il quadrato)
-
Eventualmente applicare un ulteriore filtro fine per tenere conto della distanza del cerchio grande (per grandi distanze)