Análise Espacial com PostGIS

Propaganda
Análise Espacial com PostGIS
PGCON Brasil 2009
Campinas - SP
Outubro de 2009
Luis Fernando Bueno
Universidade Federal de Rondônia – UNIR
[email protected]
Roteiro
●
Apresentação do PostGIS;
●
Conceitos de análise espacial;
PGCON Brasil 2009
Campinas - SP
Exemplos de consultas espaciais;
Luis Fernando Bueno
●
●
Indicação de softwares para visualização;
Universidade Federal de Rondônia – UNIR
Fontes de informação.
●
[email protected]
Outubro de 2009
PostGIS
PostGIS é um módulo que agrega ao PostgreSQL a
capacidade de manipulação de dados espaciais:
Tipos de dados espaciais e funções em conformidade
com especificações do Open GeoSpatial Consortium
(OGC);
Estratégia de indexação baseada em índice GIST
(variação de R-Tree);
Possibilita reprojeção de dados (transformação de um
sistema de referência espacial para outro);
Funções para construção de geometrias (modelo
vetorial);
Suporta a realização de consultas espaciais.
Desenvolvido pela empresa canadense Refractions
Research Inc.
http://postgis.refractions.net/
3
PostGIS
Solução livre e de código aberto para gerenciamento
de dados espaciais;
Alternativa em relação à produtos como Oracle Spatial/
Locator, IBM DB2 Spatial, Informix Spatial Data Blade,
Microsoft SQL Server 2008 e MySQL Spatial;
Comparações? Tire suas próprias conclusões...
http://www.bostongis.com/?
content_name=sqlserver2008_postgis_mysql_compare#178
http://www.postgresonline.com/journal/index.php?/archives/51Cross-Compare-of-SQL-Server,-MySQL,-and-PostgreSQL.html
http://docs.opengeo.org/geospiel/2009/06/16/postgis-versusmysql-spatial/
4
Análise Espacial
“Todas as coisas são parecidas, mas
coisas mais próximas se parecem mais
que coisas mais distantes.”
Primeira Lei da Geografia, Waldo Tobler (1970).
Abordagem que considera a localização espacial do
fenômeno em estudo (CARVALHO & SANTOS, 2005).
Processo de busca por padrões e associações entre
objetos considerando o espaço e o tempo.
5
Análise Espacial
Relacionamentos espaciais entre objetos
IOCHPE, 2001):
(BOGORNY &
Topológicos: Os topológicos determinam se dois
objetos interceptam-se ou não e qual o tipo de
interseção existente entre eles.
Métricos: Os métricos são relações que tratam da
distância existente entre feições geográficas;
De ordem: descrevem como os objetos estão
posicionados uns em relação aos outros (ao norte, ao
sul, à direita, etc).
6
Análise Espacial
Exemplos de relacionamentos: Cruza entre duas linhas (a), linha e área (b, c); Sobrepõe entre duas
áreas (d), duas linhas (e, f); Disjunto entre duas áreas (g), linha e área (h), dois pontos (i).
Fonte: INPE, 2008.
7
Análise Espacial
Diagrama de Venn mostrando os resultados da aplicação de operadores de lógica booleana
para dois ou mais conjuntos.
Fonte: CÂMARA, 2008.
8
Análise Espacial com PostGIS
Quais as rodovias que tocam a BR-116?
SELECT DISTINCT b.nm_sigla FROM rodovia_pavimentada a, rodovia_pavimentada b
WHERE a.nm_sigla='BR­116' AND
ST_intersects(a.the_geom, b.the_geom);
nm_sigla ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
BR­393
SP­022
BR­116/BR­477
RS­265
BR­120
… {omitimos por falta de espaço}
BR­116
SP­065
BR­285
PR­419
CE­205
(86 linhas)
9
Análise Espacial com PostGIS
Quais são os trechos de rodovias ligadas pela ponte
Presidente Costa e Silva?
SELECT b.gid, b.nm_sigla
FROM ponte a, rodovia_pavimentada b
WHERE a.nm_nome = 'Ponte Presidente Costa e Silva' AND ST_Touches(a.the_geom, b.the_geom);
gid | nm_sigla ­­­­­­+­­­­­­­­­­
4304 | BR­101
4310 | BR­101
(2 linhas)
10
Análise Espacial com PostGIS
Quais Estados fazem divisa com o Estado do
Amazonas?
SELECT b.nm_nome
FROM limite_politico_administrativo a, limite_politico_administrativo b WHERE a.nm_nome = 'AMAZONAS' AND ST_intersects(a.the_geom, b.the_geom);
nm_nome ­­­­­­­­­­­­­
RONDÔNIA
MATO GROSSO
AMAZONAS
RORAIMA
PARÁ
ACRE
(6 linhas) 11
Análise Espacial com PostGIS
Qual a quantidade de vias públicas totalmente contidas
no Bairro Areal?
SELECT a.nome,
sum(ST_Length(st_transform(b.the_geom,29101))) as vias
FROM bairro a, logradouro b
WHERE ST_Contains(a.the_geom,b.the_geom) AND
a.name = 'Areal'
GROUP BY a.name
ORDER BY vias;
nome | vias ­­­­­­­+­­­­­­­­­­­­­­­­­­
Areal | 11348.7240476304
(1 linha)
12
Análise Espacial com PostGIS
Qual o total de rodovias em pavimentação no Estado
do Mato Grosso?
SELECT count(a.*) quantidade
FROM rodovia_em_pavimentacao a, limite_politico_administrativo b
WHERE b.nm_nome='MATO GROSSO' AND st_intersects(a.the_geom, b.the_geom);
quantidade ­­­­­­­­­­­
37
(1 linha)
13
Análise Espacial com PostGIS
Quais são as rodovias não pavimentadas do Estado
do Pará?
SELECT b.nm_sigla
FROM limite_politico_administrativo a, rodovia_nao_pavimentada b
WHERE a.nm_nome = 'PARÁ' AND a.the_geom && b.the_geom;
nm_sigla ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
PA­254
BR­158/PA­150
PA­125
PA­437
MT­417
TO­010
… {omitimos por falta de espaço}
PA­253
TO­080
(72 linhas)
14
Análise Espacial com PostGIS
Qual a distância entre as cidades de Porto Velho e
Campinas?
SELECT ST_Distance(ST_Transform(a.the_geom,29101), ST_Transform(b.the_geom,29101))/1000 distancia
FROM capital_estadual a, cidade b
WHERE a.nm_nome = 'PORTO VELHO' AND b.nm_nome = 'CAMPINAS';
distancia ­­­­­­­­­­­­­­­­­­
2387.19117545366
(1 linha)
15
Análise Espacial com PostGIS
Qual a área do bairro Roque, em hectares?
SELECT nome,
st_area(st_transform(the_geom,29190))/10000 hectares
FROM bairro
WHERE nome = 'Roque';
nome | hectares ­­­­­­­+­­­­­­­­­­­­­­­­­­
Roque | 78.4163371532679
(1 linha)
16
Análise Espacial com PostGIS
Quais são os portos mais próximo da cidade de
Cuiabá?
SELECT a.nm_nome, ST_Distance(ST_Transform(a.the_geom, 29101), ST_Transform(b.the_geom, 29101))/1000 AS distancia
FROM porto a, capital_estadual b
WHERE b.nm_nome = 'CUIABÁ'
ORDER BY distancia ASC
LIMIT 5;
nm_nome | distancia ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­
Sem Toponímia Carta Impressa | 540.589936340333
Porto Braga | 610.750079726185
Treze | 873.712147583611
Sete de Maio | 879.23320290317
Bicentenário | 885.157260861676
(5 linhas)
17
Análise Espacial com PostGIS
Quais são os povoados localizados num raio de até
50 quilometros do Município de Cacoal??
SELECT b.gid, b.nm_nome
FROM cidade a, povoado b
WHERE a.nm_nome = 'Cacoal' AND
ST_Distance(ST_Transform(b.the_geom, 29101), ST_Transform(a.the_geom,29101))/1000 <= 50;
gid | nm_nome ­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­
621 | Jardinópolis
627 | Novo Paraíso
628 | Nova Estrela
630 | Estrela de Rondônia
631 | Novo Riachuelo
633 | Nova Esperança ou Romiporã
(6 linhas)
18
Análise Espacial com PostGIS
Quais são os Estados que estão na faixa de fronteira
(parcial)?
SELECT a.gid, a.nm_nome
FROM limite_politico_administrativo a, fronteira_buffer50km b
WHERE cd_tipo_li = 'estadual' AND ST_Intersects(a.the_geom,
ST_Transform(b.the_geom,4618));
gid | nm_nome ­­­­­+­­­­­­­­­­­­­­­­­­­­
7 | RONDÔNIA
13 | MATO GROSSO
14 | MATO GROSSO DO SUL
18 | AMAZONAS
20 | RORAIMA
32 | PARÁ
33 | AMAPÁ
39 | ACRE
(8 linhas)
19
Análise Espacial com PostGIS
Criar um buffer de 200 metros a partir da rodovia BR364:
SELECT ST_Buffer(ST_Transform(a.the_geom,29101), 200)
FROM rodovia_pavimentada a
WHERE a.nm_sigla = 'BR­364';
→ Opcionalmente podemos:
a)criar uma nova tabela com o resultado da consulta(SELECT INTO);
b)converter o resultado da consulta para um arquivo no formato ESRI Shapefile (pgsql2shp).
20
Análise Espacial com PostGIS
Identificar as unidades de saúde que existem em uma
determinada área:
SELECT name, the_geom FROM unid_saude
WHERE the_geom && setsrid('BOX3D(­63.91072 ­8.73671, ­63.88971 ­8.75325)'::box3d, 4291); Nome
­­­­­­­­­­­­­­­­­­
Ana Adelaide
Mauricio Bustani
Cosme Damião
São Sebastião
(4 linhas)
21
Análise Espacial com PostGIS
Identificar qual o telecentro por meio da coordenada
fornecida:
SELECT nome
FROM telecentro
WHERE the_geom && GeomfromText('POINT(­63.88186513101888 ­8.74772579141916)', 4291);
nome ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
Inclusao Digital Bairro Nacional
(1 linha)
22
Análise Espacial com PostGIS
Quais os bairros cruzados pela Rua Amazonas e qual a extensão total dos trechos contidos em cada um destes bairros?
SELECT nome,
sum (st_length(st_transform(a.the_geom,29101)))/1000 km
FROM logradouro a, bairro b
WHERE denominacao = 'ROGÉRIO WEBER' AND a.the_geom && b.the_geom
GROUP BY nome ORDER BY nome asc
nome | km ­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­
Baixa União | 1.32042643358575
Caiari | 0.44957193145054
Centro | 1.32676374520697
Militar | 0.921948992082775
Olaria | 0.243913901035543
Pedrinhas | 0.275751196827009
Triangulo | 1.5701136845606
(7 linhas)
23
Análise Espacial com PostGIS
Selecionar o ponto inicial, final e a entensão dos trechos
que formam a Rodovia BR-364, nos limites do Estado
de Rondônia?
SELECT ST_AsText(ST_StartPoint(a.the_geom)) inicial, ST_AsText(ST_EndPoint(a.the_geom)) final, ST_Length(a.the_geom) metros
FROM rodovia_pavimentada a,
limite_politico_administrativo b
WHERE nm_sigla = 'BR­364' AND b.the_geom && (SELECT ST_Envelope(c.the_geom)
FROM limite_politico_administrativo c
WHERE nm_nome = 'RONDÔNIA');
… {omitimos por falta de espaço}
24
Visualização de Dados
SIG's Desktop podem ler bancos PostGIS, diretamente ou
por meio de protocolos Web Map Service (WMS) ou Web
Feature Service (WFS). Algumas opções:
QuantumGIS: http://www.qgis.org/
uDIG: http://udig.refractions.net/
Kosmo: http://www.opengis.es/
gvSIG: http://www.gvsig.org/web/
TerraView: http://www.dpi.inpe.br/terraview/index.php
Open Jump: http://www.openjump.org/wiki/show/HomePage
Jump: http://www.jump-project.org/
Thuban: http://thuban.intevation.org/
GRASS GIS: http://grass.itc.it/
Servidores de mapas como Mapserver e Geoserver
suportam PostGIS.
25
Lembretes
Se necessário, use funções PostGIS em instruções
escritas com PL/pgSQL.
A utilização criteriosa dos índices espaciais pode
contribuir no desempenho durante a execução das
consultas.
O ajuste do banco de dados certamente faz diferença
(performance tuning).
As cópias de segurança devem ser mantidas sempre
atualizadas (estratégia de backup).
Permissões de acessos aos objetos também deve ser
revista periodicamente (política de segurança).
26
Referências
BOGORNY, V. ; IOCHPE, C. . Estendendo o Modelo de Relacionamentos do OpenGIS para
Garantir Restrições Espaciais Topológicas. In: Simpósio Brasileiro de Banco de Dados (SBBD),
2001, Rio de Janeiro. Simpósio Brasileiro de Banco de Dados. Rio de Janeiro : COPPE/UFRJ,
2001. v. XVI. p. 25-39.
BOHANCARTER, G.F. Geographic Information Systems for Geoscientists Modeling with GIS.
Kidlington, Pergamo, 1994.
CÂMARA, Gilberto. et al. Técnicas de Inferência Geográfica. In: CÂMARA, Gilberto; DAVI, Clodoveu
Davis; MONTEIRO, Antônio Miguel. Introdução à Ciência da Geoinformação. Disponível em
<http://www.dpi.inpe.br/gilberto/livro/introd/> Acesso em: 17 set. 2008.
CARVALHO, Marilia Sá; SANTOS, Reinaldo Souza. Análise de dados espaciais em saúde pública:
métodos, problemas, perspectivas. In: Cad. Saúde Pública, Rio de Janeiro, 21(2):361-378, marabr, 2005. Disponível em <http://www.scielo.br/pdf/csp/v21n2/03.pdf> Acesso em: 15 set. 2008.
INSTITUTO NACIONAL DE PESQUISAS ESPACIAIS - INPE. Livros On-Line. Disponível em <http://
www.dpi.inpe.br/livros.php> Acesso em: 11 set. 2008.
INSTITUTO NACIONAL DE PESQUISAS ESPACIAIS - INPE. Operações de Análise Espacial.
Disponível em <http://www.epamig.br/geosolos/Apostila_PDF/Geo_cap4.pdf> Acesso em: 08
set. 2008.
27
Agradecimentos
À Comissão Organizadora do PGCon Brasil 2009
que oportunizou nossa participação no evento.
Aos colegas da comunidade brasileira do PostgreSQL
pela confiança e incentivo.
Aos colegas Fábio Telles, Euler Taveira e Tatiane Checcia, que cederam as imagens
de diversos cenários rondonienses, as quais foram utilizadas como plano de fundo dos
slides desta apresentação.
Muito obrigado!
28
PostgreSQL em Rondônia!
–
PGDay Porto Velho - 29/04/09
85 participantes
PGDay Ji-Paraná - 30/04/09
103 participantes
29
Obrigado pela atenção!
Análise Espacial com PostGIS
PGCON Brasil 2009
Campinas - SP
Outubro de 2009
Luis Fernando Bueno
Universidade Federal de Rondônia – UNIR
[email protected]
Download