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;

terça-feira, 2 de abril de 2013

GEOMETRIAS SIMPLES E MÚLTIPLAS


   Um conceito muito presente em bancos de dados geográficos é o de geometrias simples e múltiplas. Mas o ideal é usar Polygon ou MultiPolygon? LineString ou MultiLineString? A resposta depende do uso que se quer dar a essas feições.
   O conceito: primeiramente é importante entender o conceito, ou seja, o que diferencia geometrias simples de múltiplas. O melhor modo de entender isso é utilizando exemplos: em uma tabela de países, a área do Brasil poderia ser representada por um único polígono, mas e a do Japão? Seriam necessários pelo menos 4 polígonos para representar suas principais ilhas. Outro exemplo é que algumas rodovias no Brasil são descontinuadas, ou seja, uma linha apenas não poderia representá-las totalmente. Essa é a essência do conceito de múltiplas geometrias - em uma única feição pode ser armazenada mais de uma representação espacial, diferente das geometrias simples, onde cada feição associa-se a uma única representação espacial.
Obs.: Alguns bancos de dados espaciais também usam conceitos de coleções geométricas, onde podem coexistir linhas, pontos e/ou polígonos em uma mesma tabela.
   Quando usar: deve-se analisar cada caso, mas de modo geral pode-se dizer que o ideal é utilizar geometrias múltiplas apenas quando necessário (quando feições precisarem de mais de uma representação espacial) e para as demais situações utilizar geometrias simples, especialmente porque diversas funções espaciais somente funcionam sobre geometrias simples.