quinta-feira, 30 de julho de 2015

HABILITANDO O TIPO GEOMETRY NO POSTGRESQL/POSTGIS

Caso você esteja tentando executar uma instrução SQL para criação de tabela com elementos espaciais no PostgreSQL/PostGIS e tenha obtido o erro de que o tipo "geometria" - ou qualquer outro do PostGIS - não exista (ERROR: type "geometry" does not exist), isso se refere ao fato de elementos do PostGIS "não terem sido carregados" (o que pode ocorrer por diversos motivos).

A solução do problema é simples:

  • Entre no PGAdmin;
  • Conecte-se ao banco desejado;
  • Abra a janela de SQL e digite o comando "CREATE EXTENSION postgis;" e execute (F5).
Pronto, o seu banco de dados já está aceitando os tipos de dados do PostGIS.


quinta-feira, 16 de julho de 2015

ALTERANDO OU RECUPERANDO A SENHA DO USUÁRIO POSTGRES (POSTGRESQL/POSTGIS) NO WINDOWS

Em algumas situações (restore por SQL, dependendo da maneira como ele foi gerado, por exemplo) a senha do usuário postgres do PostgreSQL pode ser alterada. Se ocorreu essa situação, ou se por algum outro motivo você esqueceu ou perdeu a senha, pode seguir os passos abaixo para recuperá-la:
  1. Abra o arquivo pg_hba.conf (o arquivo que contém, entre outras, as configurações de acesso do PostgreSQL e pode ser aberto no bloco de notas ou no próprio PGAdmin. Ele se encontra na pasta data);
  2. No final do arquivo, substitua a palavra md5 por trust (em METHOD, nas linhas que não estão comentadas. Isso permitirá o acesso sem o uso de senha);
  3. No Windows, vá em "Serviços", encontre o postgresql, selecione e clique em Reiniciar o serviço.
  4. No prompt de comando do Windows, vá até a pasta bin, dentro da instalação do PostgreSQL (por exemplo: C:\Program Files\PostgreSQL\9.4\bin) e execute o comando: psql -h localhost -U postgres -W -d postgres (esse último pode ser o nome de qualquer banco de dados existente) e tecle enter. Se pedir a senha tecle enter.
  5. Conectado no psql execute o comando ALTER USER postgres ENCRYPTED PASSWORD 'senha'; (substituindo 'senha' pela senha que você deseja).
  6. Saia do prompt, retorne aos serviços e reinicie novamente o serviço do postgresql. Lembre-se de alterar novamente o arquivo pg_hba.conf para que o usuário postgres não possa ser acessado sem senha.
Observação: em substituição às etapas 3, 4 e 5, você também pode se logar pelo pgAdmin e executar a instrução ALTER USER postgres ENCRYPTED PASSWORD 'senha'; (substituindo 'senha' pela senha que você deseja) na janela de SQL e executá-la.

Pronto, você já pode acessar o PostgreSQL pelo usuário postgres usando a nova senha.

terça-feira, 21 de maio de 2013

INTERSECÇÃO COM TOLERÂNCIA NO POSTGIS

A função ST_Intersects do PostGIS retorna verdadeiro se duas geometrias compartilham qualquer porção do espaço (é a "função contrária" à ST_Disjoint). Essa função recebe as duas geometrias envolvidas:

                ST_Intersects (a.geom, b.geom)

A função ST_Intersects tem elevada precisão (tolerância muito baixa). Mesmo quando a vetorização é feita com o “SNAP” (atração) habilitado, isso eventualmente pode ser um problema quando precisa ser usado em porções intermediárias de linhas ou polígonos (em pontos, vértices ou nós dificilmente ocorre), ou em algum outro caso específico. Uma solução para essa questão, que permite verificar intersecções com tolerância maior, é o uso da função ST_DWithin, que recebe por parâmetro, além das geometrias envolvidas, o valor tolerância (ou seja, funciona como se fosse um ST_Intersects com “buffer” definido pela tolerância).

                ST_DWithin (a.geom, b.geom, tolerância)

Obs.: A tolerância depende do sistema de coordenadas utilizado. Utilizei tolerância 0.00001 em sistema de coordenadas UTM e isso se mostrou bem adequado para trabalhar com elementos em cidades de médio porte.

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.

terça-feira, 12 de março de 2013

MATERIAIS SOBRE GEOPROCESSAMENTO

   Em contato com a área acadêmica e prática do geoprocessamento tenho encontrado algumas fontes de material online (que podem ser visualizados e baixados) muito ricas:
http://www.dpi.inpe.br/livros.php - Livros on-line da Divisão de Processamento de Imagens do Instituto Nacional de Pesquisas Espaciais, o INPE;
http://www.arq.ufmg.br/SiteLabGeo/Laboratorio_Geo/publicacoes.htm - Publicações do laboratório de geoprocessamento da Universidade Federal de Minas Gerais;
http://www.dsr.inpe.br/sbsr2007/biblioteca/ - Conteúdo completo (artigos) dos Simpósios Brasileiros de Sensoriamento Remoto.
   Além disso, usando as palavras-chave corretas é possível encontrar muito material em:
http://scholar.google.com.br/ (Google acadêmico – pesquisa específica em trabalhos acadêmicos);
http://www.dominiopublico.gov.br (Domínio público – disponibiliza diversos materiais que se encontram sob domínio público);
http://www.teses.usp.br/ (Biblioteca digital da Universidade de São Paulo – disponibiliza o material produzido pela USP; possui inclusive uma área específica sobre cartografia histórica).
   Outras universidades (UNICAMP, UNESP, etc.) também possuem bibliotecas digitais (e cursos relacionados à área) onde pode ser encontrado material. Caro leitor, participe enviando também outros lugares onde é possível encontrar material sobre geoprocessamento.

terça-feira, 5 de fevereiro de 2013

DEFININDO/ALTERANDO O SISTEMA DE COORDENADAS EM TABELAS DO POSTGIS

   Apesar de ser algo relativamente simples (mas ao mesmo tempo muito importante), tive bastante dificuldade de encontrar informações quando procurei sobre como definir e/ou alterar o sistema de coordenadas de geometrias dentro do PostGIS nas versões mais recentes do PostgreSQL/PostGIS, que definem os SRIDs na view geometry_columns (no meu caso, uso PostgreSQL 9.1 com PostGIS 2.0), portanto aqui está, de uma maneira simples, como fazer isso.

Para definer o SRID use:
ALTER TABLE nome_da_tabela ALTER COLUMN coluna_espacial TYPE Geometry(tipo_da_geometria, numero_do_SRID_desejado) USING ST_SetSRID(coluna_espacial, numero_do_SRID_desejado);
Exemplo:
ALTER TABLE ponto_onibus ALTER COLUMN geom TYPE Geometry(Point, 31982) USING ST_SetSRID(geom,31982);
(define o SRID 31982 – SIRGAS 2000 UTM 22 Sul – para a tabela ponto_onibus, representada por pontos) .

Para alterar (transformar, ou seja, fazer a conversão de um SRID já definido para outro) o SRID use:
ALTER TABLE nome_da_tabela COLUMN coluna_espacial TYPE Geometry(tipo_da_geometria, numero_do_SRID_desejado) USING ST_Transform(coluna_espacial, numero_do_SRID_desejado);
Exemplo:
ALTER TABLE dutos ALTER COLUMN geom TYPE Geometry(LineString,29192) USING ST_Transform(geom,29192);
(altera a tabela dutos, representada por linhas, para o SRID 29192 – SAD69 UTM 22 Sul) .

Observações:
- As informações sobre todos os sistemas de coordenadas disponíveis encontram-se na tabela spatial_ref_sys, no schema public.
- As informações sobre os SRIDs das tabelas encontram-se na view geometry_columns, no schema public.