Consulta SQL para ponto-em-polígono usando PostgreSQL

Eu tenho a seguinte tabela simples:

<code>CREATE TABLE tbl_test
(
  id serial NOT NULL,
  poly polygon NOT NULL
)
WITH (OIDS=FALSE);
</code>

Eu então tento inserir uma linha com um polígono:

<code>insert into tbl_test values(1, PolyFromText('POLYGON((0 0, 10 10, 10 0, 0 0))'))
</code>

E corra para este erro:

coluna "poli" é do tipo polígono mas a expressão é do tipo geometria

Que é coxo Então minhas primeiras perguntas são:

Eu realmente tenho que lançar?

De qualquer forma, depois de lançá-lo funciona. E agora estou tentando fazer uma consulta ST_Contains simples:

<code>select id, poly from tbl_test where ST_Contains(poly, Point(GeomFromText('POINT(9 2)')))
</code>

Qual dá o erro:

<code>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.
</code>

O que eu deveria fazer?

Os seguintes trabalhos:

<code>select st_contains(st_geomfromtext('POLYGON((0 0, 10 10, 10 0, 0 0))'), st_geomfromtext('POINT(0 0)'))
</code>

Mas isso é provavelmente porque ambos os argumentos são do tipo Geometry. A consulta real nos dados da tabela não funciona.

Responda:

Doi! O problema era que o banco de dados que eu criei não se baseava no template DB postgis (e por isso não tinha as funções relevantes e tabelas de colunas de geometria, etc.). Posso apenas observar, em conclusão, que a forma como o PostGIS requer que você adicione centenas de funções, linhas e algumas tabelas ao seu banco de dados apenas para que você tenha suporte ao GIS é completamente idiota. Isso torna o backup do esquema muito mais complexo e é muito propenso a erros (que o céu proíba se você deixar de chamar AddGeometryColumn e apenas adicione uma coluna de geometria).

questionAnswers(2)

yourAnswerToTheQuestion