Mostrando postagens com marcador Sistemas de coordenadas. Mostrar todas as postagens
Mostrando postagens com marcador Sistemas de coordenadas. Mostrar todas as postagens

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, 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.