Я сталкиваюсь с расхождениями при использовании mysql's st_contains
. У меня есть таблица зон, в которой есть столбцы latitude
и longitude
, я просто хочу запросить все записи, которые попадают в полигон.
Когда я делаю это, mysql возвращает записи вне многоугольника и пропускает записи, которые определенно находятся внутри многоугольника. Я смог создать визуал, используя карты Google результатов MySQL для помощи в отладке.
Ниже приведен SQL-запрос
SELECT *
FROM `zones`
WHERE (ST_CONTAINS(ST_GEOMFROMTEXT('POLYGON((22.43079687220491 89.14206562499999, 33.72385081452048 96.70065937499999, 22.917381576171614 107.77487812499999, 20.796651975524764 108.12644062499999, 17.643461922028166 107.42331562499999, 7.361883956935348 117.26706562499999, 2.1060545562538273 148.54242063498816, -7.365289419995424 171.21820188498816, -25.802453489204527 171.74554563498816, -36.08590711168321 -175.3694333408895, -51.731473033051614 172.21043060460465, -44.34469762328107 138.81199310460465, -34.74750931376504 107.87449310460465, -12.04633897054804 98.73386810460465, 2.804203457833971 93.76073834567285, 16.292162960708847 90.77245709567285, 22.43079687220491 89.14206562499999, 22.43079687220491 89.14206562499999))'), POINT(latitude, longitude))) AND `zones`.`deleted_at` IS NULL
На визуальном изображении показаны записи за пределами предоставленного многоугольника, и отсутствуют записи, которые должны находиться внутри многоугольника.
Например, у меня есть запись зон для Гастингса, Австралия с latitude:-38.3
и longitude:145.216667
, которая явно будет в многоугольнике, но mysql никогда не возвращает эту запись. В Новой Зеландии также есть несколько записей.
Граница создается с помощью плагина рисования карт Google.
Это ошибка MySQL или я что-то не так делаю?