-
Създайте своите точки с помощта на
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)
.
Това всъщност не е кутия, а сферичен правоъгълник:сегмент от сферата, обвързан с географска ширина и дължина. Това може да се различава от обикновен правоъгълник на Земя на Франц Йосиф , но доста близо до него на повечето населени места.
-
Приложете допълнително филтриране, за да изберете всичко в кръга (не квадрата)
-
Възможно е да приложите допълнително фино филтриране, за да отчетете разстоянието на големия кръг (за големи разстояния)