-
Skapa dina poäng med
Point
värden förGeometry
datatyper iMyISAM
tabell. Från och med Mysql 5.7.5,InnoDB
tabeller stöder nu ävenSPATIAL
index. -
Skapa en
SPATIAL
index på dessa punkter -
Använd
MBRContains()
för att hitta värdena: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)
, eller i MySQL 5.1
och över:
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
)
Detta kommer att välja alla punkter ungefär inom rutan (@lat +/- 10 km, @lon +/- 10km)
.
Detta är faktiskt inte en ruta, utan en sfärisk rektangel:latitud- och longitudbundet segment av sfären. Detta kan skilja sig från en vanlig rektangel på Franz Joseph Land , men ganska nära den på de flesta bebodda platser.
-
Använd ytterligare filtrering för att markera allt inuti cirkeln (inte kvadraten)
-
Använd eventuellt ytterligare finfiltrering för att ta hänsyn till det stora cirkelavståndet (för stora avstånd)