Como obter o tipo de geometria de uma tabela PostGIS vazia?


9

Eu tenho um aplicativo da web que precisa saber o tipo de geometria do campo geom de uma tabela PostGIS antes de inserir linhas nele. Eu uso a seguinte consulta para determinar o tipo de geometria da coluna geom:

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1

Isso retorna o tipo de geometria de uma linha real, para que não funcione quando minha tabela estiver vazia. Como determino o tipo de geometria da própria coluna de geometria?

Respostas:


16

A consulta pode ser executada na geometry_columnstabela dessa maneira

SELECT type 
FROM geometry_columns 
WHERE f_table_schema = 'my_schema' 
AND f_table_name = 'building' 
and f_geometry_column = 'geom';

(ou, se você estiver usando uma geografia tipo, subsititute geometry_columnscom geography_columnse f_geometry_columncom f_geography_column)


O sql na resposta retornará geometrypara o tipo, enquanto ainda não podemos saber se a geometria é ponto ou linha.
giser

11
Isso significa que sua coluna de geometria está configurada para o tipo de geometria "geometria" (isto é, aceita todos os tipos de geometrias). Nesse caso, você terá que verificar cada geometria induvidamente usando ST_GeometryType
atlefren

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1assim como o post OP? Não funciona se a tabela estiver vazia.
Giser # 15/18

E mais uma coisa, se toda a coluna de geometria estiver definida para geometrydigitar para toda a tabela, posso criar uma exibição que contenha todas as tabelas que podem conter points lines polyogn?
Giser # 15/18

11
Direita. Uma analogia: declarar que uma coluna geom é do tipo "geometry" é como designar uma gaveta para meias de qualquer cor. Verificar a cor das meias nesta gaveta é impossível quando está vazio.
atlefren

3

Procure uma tabela geometry_columns. Todas as colunas geográficas com srid e tipo de geometria são registradas aqui. Se houver uma coluna com o tipo GEOMETRIA, todos os tipos de geometria podem ser armazenados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.