Mysql: ST_Contains с границами, чтобы определить, содержит ли мультиполигон точку

Я использую пространственные функции mysql.

Мне нужно понять, лежат ли точки внутри мультиполигона.
Изначально я использовал MBRContains, но он работает странно, поэтому столкнулся со следующей ошибкой: Функция Mysql MBRContains неверна

введите здесь описание изображения

Следующим моим шагом было переключение на функции ST_Contains. Но я обнаружил, что если я использую вершину полигона (из мультиполигона) в качестве аргумента - функция возвращает false, но я хочу исключить все границы мультиполигона.

P.S.

Я обнаружил, что где функция:

ST_Touches(g1, g2)

Две геометрии пространственно соприкасаются, если их внутренности не пересекаются, но граница одной из геометрий пересекает либо границу, либо внутренность другой

Вроде работает как я хочу(в OR условиях с ST_contains) но документация мне непонятна. Можете ли вы объяснить, как два условия могут быть истинными вместе
1. Внутренности не пересекаются
2. Граница пересекает внутренности.

?

Вопрос:

Как я могу добиться желаемого поведения?


person gstackoverflow    schedule 24.11.2018    source источник
comment
В чем именно заключается ваш вопрос еще раз. Как выглядят данные?   -  person Salman A    schedule 04.12.2018
comment
@ Салман А, извините, я не могу добавить больше информации. Не могли бы вы уточнить ваш вопрос?   -  person gstackoverflow    schedule 04.12.2018
comment
Я имею в виду, что я не могу передать изображение в MySQL. Как именно выглядят данные?   -  person Salman A    schedule 04.12.2018
comment
@Salman A, Согласно NDA, я не могу предоставить конкретные данные. Но можно создать полигон как на картинке   -  person gstackoverflow    schedule 04.12.2018
comment
Итак, у вас есть многоугольник и точка, и вы хотите проверить, присутствует ли точка или нет внутри многоугольника?   -  person Salman A    schedule 04.12.2018
comment
@Salmam, да, я хочу проверить, находится ли точка внутри многоугольника. Если точка находится на границе полигона, то ответ должен быть верным   -  person gstackoverflow    schedule 05.12.2018
comment
Внутренности не могут пересекаться, и внутренняя граница соприкосновения истинна тогда и только тогда, когда полигоны соприкасаются. Вот почему функция называется ST_Touches. Я не знаю, почему ответ @gstackoverflow не подходит для вашего случая, похоже, нет?   -  person Adam Dadvar    schedule 06.12.2018


Ответы (2)


Похоже на рабочее решение:

ST_Contains(g1,g2) || ST_Touches(g1, g2)
person gstackoverflow    schedule 30.11.2018

Похоже, ST_Distance(AREA, @point)) = 0 включает границу

person gstackoverflow    schedule 30.11.2018