У меня есть следующая простая таблица:SQL запрос для точки в многоугольнике с использованием PostgreSQL
CREATE TABLE tbl_test
(
id serial NOT NULL,
poly polygon NOT NULL
)
WITH (OIDS=FALSE);
тогда, когда я пытаюсь вставить строку с многоугольником:
insert into tbl_test values(1, PolyFromText('POLYGON((0 0, 10 10, 10 0, 0 0))'))
И запустить в эту ошибку :
column "poly" is of type polygon but expression is of type geometry
Какая хрома. Поэтому мои первые вопросы:
- Нужно ли мне бросать?
В любом случае, после литья он работает. И теперь я пытаюсь сделать простой ST_Contains запрос:
select id, poly from tbl_test where ST_Contains(poly, Point(GeomFromText('POINT(9 2)')))
который дает ошибку:
ERROR: function st_contains(polygon, point) does not exist
LINE 1: select id, poly from tbl_test where ST_Contains(poly, Point(...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Что я должен делать?
следующие работы:
select st_contains(st_geomfromtext('POLYGON((0 0, 10 10, 10 0, 0 0))'), st_geomfromtext('POINT(0 0)'))
Но это, вероятно, потому, что оба аргумента типа геометрии. Фактический запрос к данным таблицы не работает.
Ответ:
Doi! Проблема заключалась в том, что созданная мной БД не была основана на DB шаблона postgis (и для этого не было соответствующих функций и таблиц столбцов геометрии и т. Д.). Могу ли я в заключение заметить, что PostGIS требует, чтобы вы добавляли сотни функций, строк и несколько таблиц в свою базу данных, чтобы у вас была поддержка ГИС полностью хромой. Это делает резервную копию схемы более сложной и очень подверженной ошибкам (не дай бог, если вы пренебрегаете вызовом AddGeometryColumn и просто добавляете столбец геометрии).
Если поли в полигонах, почему бы не сделать многоугольник «1-гон» с точкой, которую вы пытаетесь найти? –
Я не уверен, что в postgres поддерживаются полигоны с 1 точкой. Кроме того, это обходной путь для проблемы, я не уверен, существует. –