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]