Я извлекаю строки на основе пространственного значения столбца latlng, но получаю значения за пределами многоугольника, используемого запросом. Например, одно из возвращенных значений находится на 39.245231, -094.41976 почти в 5 милях от полигона. Что не так с моим запросом?
SELECT class, address, latitude, longitude, callsign,
CONCAT(latitude,',',longitude) as koords,
CONCAT(name,'<br>',address,'<br>',city,'<br>',latitude,', ',longitude) as addr,
REPLACE(tactical,'-','') AS tactical
FROM poi
WHERE MBRContains(GeomFromText('POLYGON(( 39.6697989 -95.029305 , 39.6697989 -94.293333 , 38.899486 -94.293333 , 38.899486 -95.029305 , 39.6697989 -95.029305 ))'),latlng)
AND class = 'Sheriff'
ORDER BY class
Вы можете посмотреть на создаваемую карту; https://net-control.us/map1Rose3.php после того, как появится кнопка «Полиция» маркер в правом нижнем углу, чтобы увидеть возвращенные значения. На карте показаны 4 синих флажка, обозначающих границы многоугольника, красный флаг - центр. И два маркера «P», которые находятся за пределами многоугольника.
1 ответ
MBRContains()
- функция минимального ограничивающего прямоугольника. Он вычисляет минимальный ограничивающий прямоугольник первого параметра - обводит его рамкой - затем проверяет, находится ли второй параметр внутри этого поля. Он спроектирован так, чтобы дешево использовать в компьютерных циклах и вводе-выводе, но компромисс заключается в том, что он собирает элементы, которые находятся в MBR, но за пределами многоугольника.
Попробуйте {{X0 }} вместо этого.
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.