Создание точек с использованием значений точек типов данных Geometry в таблице MyISAM
Создание индекса SPATIAL для этих точек
Используйте MBRContains (), чтобы найти значения:
SELECT *
FROM table
WHERE MBRContains(LineFromText(CONCAT(
'('
, @lon + 10 / ( 111.1 / cos(RADIANS(@lon)))
, ' '
, @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 км, @lon +/- 10 км).
На самом деле это не прямоугольник, а сферический прямоугольник: связанный с широтой и долготой сегмент сферы.Это может отличаться от простого прямоугольника на Земле Франца-Иосифа, но довольно близко к нему в большинстве населенных мест.
Применить дополнительную фильтрацию, чтобы выделить все внутри круга (не квадрата)
Возможноприменить дополнительную тонкую фильтрацию, чтобы учесть большое расстояние круга (для больших расстояний)
здесь следующее решение, чтобы нажать