PostgreSQL геометрические типы - PullRequest
0 голосов
/ 03 декабря 2011

У меня проблема с геометрическими функциями Постгреса. По сути, у меня есть тип многоугольника, хранящийся в базе данных postgres, и я хочу проверить, находится ли моя точка в этом многоугольнике. В Postgres есть встроенная функция для этого, но у меня возникли некоторые проблемы с синтаксисом. На самом деле это не должно быть так сложно понять, но я надеюсь, что кто-то здесь или работал с этими функциями раньше, или просто случайно знает. Я немного новичок в SQL в целом, так что это может быть просто общая проблема.

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

ST_Contains можно использовать вместе с st_geomfromtext, чтобы определить, находится ли ваша точка в этом многоугольнике.У меня есть таблица со столбцом 'poly', содержащая многоугольник, а другая таблица со списком значений широты / долготы, которые нужно проверить, находятся внутри этого многоугольника.Вы присоединяете таблицу, содержащую многоугольник, к таблице, содержащей список со значением 1 = 1 (в каждой возвращаемой строке вы получаете широту / долготу / многоугольник), а затем строите операторы st_.

st_contains(poly, point)

Это занимает точкуопределяется и проверяет, находится ли он в многоугольнике (я назвал мой 'poly').Он возвращает 't', если точка находится внутри этого многоугольника.

st_geomfromtext('POINT' st_geomfromtext('POINT('||lon||' ' ||lat ||')')

Это принимает значение широты и долготы и переводит его в точку.

Соедините их вместе в предложении where:

where st_contains(poly, st_geomfromtext('POINT('||lon||' ' ||lat ||')')) = 't'

Тогда это просто вопрос построения предложения select ... Я мог бы помочь с этим, но вы пренебрегаете схемой в своем вопросе.

1 голос
/ 04 декабря 2011

Пример этого есть в документации, см. http://www.postgresql.org/docs/9.1/static/functions-geometry.html, Таблица 9-30.

Что касается синтаксиса, вы, вероятно, ищете что-то вроде

SELECT * FROM yourtable WHERE yourcolumn @> point('1,1');
...