-
Създайте своите точки с помощта на
Pointстойности наGeometryтипове данни вMyISAMмаса. От Mysql 5.7.5,InnoDBтаблиците вече поддържат иSPATIALиндекси. -
Създайте
SPATIALиндекс на тези точки -
Използвайте
MBRContains()за да намерите стойностите: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)
, или в MySQL 5.1 и по-горе:
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
)
Това ще избере всички точки приблизително в рамките на полето (@lat +/- 10 km, @lon +/- 10km) .
Това всъщност не е кутия, а сферичен правоъгълник:сегмент от сферата, обвързан с географска ширина и дължина. Това може да се различава от обикновен правоъгълник на Земя на Франц Йосиф , но доста близо до него на повечето населени места.
-
Приложете допълнително филтриране, за да изберете всичко в кръга (не квадрата)
-
Възможно е да приложите допълнително фино филтриране, за да отчетете разстоянието на големия кръг (за големи разстояния)