Я извлекаю строки на основе пространственного значения столбца 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», которые находятся за пределами многоугольника.

0
Keith D Kaiser 14 Июн 2020 в 23:54

1 ответ

Лучший ответ

MBRContains() - функция минимального ограничивающего прямоугольника. Он вычисляет минимальный ограничивающий прямоугольник первого параметра - обводит его рамкой - затем проверяет, находится ли второй параметр внутри этого поля. Он спроектирован так, чтобы дешево использовать в компьютерных циклах и вводе-выводе, но компромисс заключается в том, что он собирает элементы, которые находятся в MBR, но за пределами многоугольника.

Попробуйте {{X0 }} вместо этого.

1
O. Jones 14 Июн 2020 в 22:07