MySQL LineString пересечения с Linestring или Polygon - PullRequest
2 голосов
/ 08 марта 2012

У меня проблема с пространственными функциями mySQL.Моя цель - узнать, проходит ли объект LINESTRING через объект POLYGON или нет.Чтобы определить, что я пытался поэкспериментировать с двумя объектами LINESTRING, чтобы определить, пересекаются они или нет.

SET @ls='LINESTRING (0 0, 1 1, 2 2, 3 3)'; -- original linestring
SET @lp='LINESTRING (0 1, 1 2, 2 3, 3 4)'; -- parallel linestring
SET @lx='LINESTRING (0 3, 1 2, 2 1, 3 0)'; -- crossed linestring

Я пробовал несколько функций, чтобы достичь своей цели:

SELECT crosses(GeomFromText(@ls), GeomFromText(@lx)); -- crossing linestrings
returns 0;

SELECT intersects(GeomFromText(@ls), GeomFromText(@lp)); -- parallel linestrings
returns 1;

SELECT overlaps(GeomFromText(@ls), GeomFromText(@lp)); -- parallel linestrings
returns 1;

Я понимаю, что это вопрос сравнения границ или что-то еще, но есть ли способ (или функцияили простое решение) как достичь своей цели?Другая возможность состояла бы в том, чтобы проверить, находится ли POINT в LINESTRING в пределах POLYGON, но мне было интересно, есть ли другой способ сделать это?

решение, предоставленное в пересечении MySQL Great Circle (пересекаются две дороги?) мне, к сожалению, не помогает ..

1 Ответ

3 голосов
/ 18 апреля 2013

Из документации MySQL для 'Функции, которые проверяют пространственные отношения между геометриями' в 5.6.1:

MySQL изначально реализовал эти функции так, что они использовали ограничивающие прямоугольники объектов и возвращали тот же результат, что и соответствующие функции на основе MBR. Начиная с MySQL 5.6.1, доступны соответствующие версии, в которых используются точные формы объектов. Эти версии названы с префиксом ST_. Например, Contains () использует ограничивающие прямоугольники объекта, тогда как ST_Contains () использует формы объекта.

Начиная с MySQL 5.6.1, существуют также псевдонимы ST_ для существующих пространственных функций, которые уже были точными. Например, ST_IsEmpty () является псевдонимом для IsEmpty ()

Ваша функция intersects, например, возвращает true, потому что минимальный ограничительный прямоугольник (MBR) двух фигур do пересекается. Если вместо этого вы используете ST_Intersects (при условии, что у вас MySQL 5.6.1 или выше), он вернет false, как и предполагалось. Эти функции можно использовать с точками, линиями и многоугольниками, поэтому следует также решить ваш запрос «многоугольник, пересекающий линии» (ST_Crosses также существует, если требуется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...