terça-feira, 23 de abril de 2013

TRANSFORMANDO GEOMETRIAS MÚLTIPLAS EM GEOMETRIAS SIMPLES NO POSTGIS


Como a ferramenta de importação de shapes no PostGIS (PostGIS Shapefile Import/Export Manager) tem como padrão a importação de geometrias múltiplas (multiline e multipolygon), mesmo que elas sejam geometrias simples, é comum se desejar a alteração dessas feições para geometrias simples (line e polygon). Isso pode ser feito de várias formas (habilitando a opção Generate simple geometries instead of MULTI geometries na importação, por exemplo), mas uma alternativa bem simples para essa alteração, que é feita diretamente no banco de dados, quando as geometrias deveriam ser simples (ou seja, são únicas, embora tenham sido importadas e/ou estejam definidas como múltiplas) é o uso da função ST_GeometryN:

ALTER TABLE nome_da_tabela ALTER COLUMN geom TYPE geometry(LineString,31982) USING ST_geometryN(geom,1);

No caso desse exemplo uma tabela que estivesse definida como MultiLineString passa a ser LineString (em polígonos basta substituir o LineString por Polygon). O exemplo usa como sistema de coordenadas o SIRGAS2000 na zona UTM 22 Sul (31982), para utilização de outro sistema basta trocar o número de identificação.

O exemplo acima serve apenas quando não há vários polígonos em um mesmo elemento. Para criar uma tabela (com geometrias simples) a partir de uma geometria múltipla (que cada elemento possua vários polígonos) use:

CREATE TABLE nome_da_tabela AS WITH dump AS (SELECT campo1, campo2, campo3,(ST_DUMP(geom)).geom AS geom FROM nome_da_tabela_de_origem) SELECT campo1, campo2, campo3, geom::geometry(LineString,31982) FROM dump;

Nenhum comentário:

Postar um comentário