mysql polygon + point

205
30 декабря 2017, 02:00

Я пытаюсь получить записи из mysql по имеющейся области. Не могу понять в чем проблема в запросе. Вот как я пытаюсь это сделать:

SELECT CONCAT('POINT(',lat,' ',lng,')') as pnt, if(Contains(GeomFromText('POLYGON((55.342165 31.733829, 58.118611 42.808047, 58.141857 43.643008, 57.721089 45.005313, 57.247739 46.016055, 56.574652 46.587344, 55.367202 46.543399, 54.327584 44.653751, 53.810645 42.676212, 53.575909 39.951602, 53.339857 34.546329, 53.758595 31.997501, 54.044068 31.601993, 55.065706 31.382266, 55.517091 32.436954))'),GeomFromText(CONCAT('POINT(',lat,' ', lng,')'))), 'yes', 'no') as in_poly FROM coordinates

В таблице координат у меня есть точки которые должны попасть в плоскость. Но мне кажется что у меня не создается плоскость.

Answer 1

Решение заключается в следующем: в конец полученных с карты координат необходимо ставить первую пару координат. По моим соображениям это "замыкает" плоскость.

Вот верный запрос:

SELECT CONCAT('POINT(',lat,' ',lng,')') as pnt, if(Contains(GeomFromText('POLYGON((55.342165 31.733829, 58.118611 42.808047, 58.141857 43.643008, 57.721089 45.005313, 57.247739 46.016055, 56.574652 46.587344, 55.367202 46.543399, 54.327584 44.653751, 53.810645 42.676212, 53.575909 39.951602, 53.339857 34.546329, 53.758595 31.997501, 54.044068 31.601993, 55.065706 31.382266, 55.517091 32.436954, 55.342165 31.733829))'),GeomFromText(CONCAT('POINT(',lat,' ', lng,')'))), 'yes', 'no') as in_poly FROM coordinates

READ ALSO
Выбор типа данных для числа MySQL

Выбор типа данных для числа MySQL

Какой тип данных DECIMAIL выбрать для формата:

198
Как отловить нажатие клавиш в WPF-приложении, когда оно свёрнуто?

Как отловить нажатие клавиш в WPF-приложении, когда оно свёрнуто?

Имеется WPF-приложение (аудио-проигрыватель)Необходимо добавить возможность отлавливать нажатие определённых клавиш, даже когда приложение...

250
Разбор регулярного выражения

Разбор регулярного выражения

Есть необходимость достраивать строку до "полного вида"Думал сделать это через регулярное выражение

258