PGDAY - Palestra PostGIS + PgRouting

2.342 visualizações

Publicada em

Palestra ministrada no evento PGDay sobre PostGIS + PgRounting

Publicada em: Tecnologia
1 comentário
0 gostaram
Estatísticas
Notas
  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
2.342
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1.038
Ações
Compartilhamentos
0
Downloads
49
Comentários
1
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

PGDAY - Palestra PostGIS + PgRouting

  1. 1. Conceitos SIG Sistema de informação geográfica
  2. 2. Sistema de informação geográfica Permitem aos usuários criar consultas interativas, analisar informações espaciais e editar dados cartográficos. Apresentar os resultados visualmente(mapas) em todas essas operações.
  3. 3. Camadas ● Hidrografia (Meio ambiente) ● Rodovias, Ruas (Transporte) ● Zona, Setor, Talhões (Agricultura) ● Setor, Quadra, Lotes (Gestão municipal) ● Gasodutos, Válvulas (Redes Gás) ● Fibra óptica (Telecomunicações) ● Redes de água e esgoto (Saneamento Básico)
  4. 4. Feições ● Feição pode ser considerada a forma de representação de objetos em uma mundo real. ● Para um ambiente computacional, um de feições do mesmo tipo pode ser considerada uma camada. ● Ponto, Linha, Polígono
  5. 5. Representações geométricas ● Point. (Pontual) ● LineString. (Linear) ● LinearRing. (Linear Composta) ● Polygon (with holes). (Polígonos) ● MultiPoint.(Pontual Composta) ● MultiLineString.(Linear Composta) ● MultiPolygon. (Poligonal Composta) ● GeometryCollection. (Feições Mistas)
  6. 6. Representação em WKT ● POINT (100 300) ● LINESTRING (20 380, 60 340, 120 340, 160 280) ● POLYGON( ( 40 320, 60 380, 120 380, 160 300, 100 260, 40 320) ) ● MULTIPOINT(40 300, 80 340, 120 280) ● MULTILINESTRING (( 20 360, 60 380, 100 340, 160 360),(40 280, 80 300, 100 280, 160 300)) ● MULTIPOLYGON (((80 320, 60 260, 100 280,80 320), (100 340, 140 360, 140 300, 100 340)))
  7. 7. Representação do mundo real
  8. 8. Como organizar camadas em um padrão para Sistema de Informação Geográfica
  9. 9. Organização das camadas (Tabelas)
  10. 10. Organização das camadas (Tabelas) clientes.shp clientes.shx clientes.dbf ruas.shp ruas.shx ruas.dbf lotes.shp, lotes.shx lotes.dbf elevacao.shp elevacao.shx elevacao.dbf uso_territorial.shp uso_territorial.shp uso_territorial.dbf
  11. 11. Arquivos de exportação Extensão Descrição *.shp,*.shp,*.dbf) Arquivos de exportação ArcGIS *.dxf,*.dwg Arquivos de exportação do AutoCAD *.tab, *.map,*.dat,*.id Arquivos de exportação do MapInfo Mais informações sobre formatos http://en.wikipedia.org/wiki/GIS_file_formats
  12. 12. Entendendo o formato Shapefile
  13. 13. Entendendo o formato Shapefile
  14. 14. Importação dos arquivos
  15. 15. Importação dos arquivos
  16. 16. Comando de importação ● shp2pgsql.exe -s 4326 clientes.shp clientes > clientes.sql shp2pgsql.exe – Aplicação instalada junto com a extensão PostGIS; -s – Parâmetro usado para setar o sistema de coordenadas geográfico; 4326 – Numero equivalente ao sistema de coordenada clientes.shp – E o nome ‘do arquivo’ shape que iremos importar. clientes – Nome da Tabela que sera criada no banco de dados PostgreSQL/PostGIS. clientes.sql – Arquivo que sera gravado na pasta do “.exe” com a expressão sql referente a criação da tabela espacial e seus atributos
  17. 17. Interface de importação Instalado junto com o complemento shp2pgsql-gui ● Importação de Shapefiles ● Uso via interface gráfica ● Instalação PostgreSQL PostgreSQLversãobinpostgisguishp2pgs ql-gui.exe
  18. 18. PostGIS - Entendendo as funcionalidades disponíveis
  19. 19. Introdução PostGIS ● PostGIS e uma extensão ao banco de dados objeto-relacional PostgreSQL , ● Permite armazenamento de objetos SIG no banco de dados . ● PostGIS inclui suporte para índices espaciais e funções para analise e processamento de objetos SIG.
  20. 20. Criando tabelas especiais ● Criando tabela com tipo de dados espacial CREATE TABLE teste (gid serial primary key, name varchar(20), geom geometry(LINESTRING) ); ● Inserindo objeto GIS INSERT INTO teste (ID, NAME, GEOM) VALUES (1, 'Primeira Geometria', ST_GeomFromText('LINESTRING(2 3,4 5,6 5,78)'));
  21. 21. Objetos SIG ● Os objetos GIS suportados pelo PostGIS são um superconjunto dos "Simple Features" ● Definições OpenGIS Consortium (OGC). ● A partir da versão 0.9, PostGIS suporta todos os objetos e funções especificado pelo padrão OGC "Simple Features for SQL".
  22. 22. Padrões OpenGIS WKB e WKT ● A especificação OpenGIS define duas formas padrão de expressar objetos espaciais: ● ( WKT ) Well-Known-Text ● (WKB) Well-Known-Binary. ● Ambos WKT e WKB incluir informações sobre o tipo do objeto e as coordenadas que formam o objeto.
  23. 23. Exemplos de WKT ● POINT(0 0) ● LINESTRING(0 0,1 1,1 2) ● POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) ● MULTIPOINT(0 0,1 2) ● MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) ● MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) ● GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))
  24. 24. SRID (Spatial Reference System Identifier ) ● A especificação OpenGIS identificador de sistema de referencia espacial ( SRID ) . ● O SRID e necessária quando a criação de objetos espaciais para a inserção no banco de dados.
  25. 25. SRID (Spatial Reference System Identifier ) ● Cada tipo de sistema de projeção, SRID serve para um aglomerado territorial específico. ● http://spatialreference.org/
  26. 26. Funções de conversão ● bytea WKB = ST_AsBinary(geometry); ● text WKT = ST_AsText(geometry); ● geometry = ST_GeomFromWKB(bytea WKB, SRID); ● geometry = ST_GeometryFromText(text WKT, SRID);
  27. 27. Exemplo ● Por exemplo, uma declaração válida de inserção para criar e inserir um objeto espacial OGC seria: INSERT INTO tabela_geografica ( the_geom, the_name ) VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'Um lugar');
  28. 28. 2D e 3D ● POINT: Criando uma tabela com a geometria de pontos 2d CREATE TABLE tabela_2d(gid serial PRIMARY KEY, the_geog geography(POINT,4326) ); ● Criando uma tabela com a coordenada z para o ponto. CREATE TABLE tabela_3d(gid serial PRIMARY KEY, the_geog geography(POINTZ,4326) );
  29. 29. Metadados ● Para as informações das tabelas espaciais SELECT * FROM geography_columns; ● Lista de sistemas de coordenadas disponíveis SELECT * FROM spatial_ref_sys
  30. 30. Metadados Visão GEOMETRY_COLUMNS ● F_TABLE_SCHEMA - Esquema que a tabela foi criada ● F_TABLE_NAME - Nome da tabela espacial criada ● F_GEOMETRY_COLUMN - Nome da coluna espacial da tabela ● COORD_DIMENSION – Dimensões da geometria 2D, 3D ... ● SRID – Sistema de projeção de coordenadas ● TYPE – Ponto, Linha, Polígono ...
  31. 31. Metadados ● Tabela SPATIAL_REF_SYS Onde são gravadas as informações sobre sistemas de coordenadas utilizados no banco ● SRID – ID para sistema de projeção de coordenadas geográficas ● AUTH_NAME – Nome referência ● AUTH_SRID - Nome referência SRID ● SRTEXT – Datum que representa o conjunto de parâmetros que define o sistema de coordenadas. ● PROJ4TEXT – Datum usado para a biblioteca de conversão postgis PROJ4
  32. 32. Quando usar o tipo geográfico ou o tipo geométrico ● Geográfico longitude / latitude ha menos funções definidas ● Geométrico Conjunto maior de funções disponíveis Projetado ou linear
  33. 33. Justificativas para uso de tabelas Geográficas ● Dados globais, disponibilidade continental ● Um conhecimento restrito sobre sistemas de coordenadas georreferenciados ● Uso de funcionalidades simples
  34. 34. Exemplo de um sistema Geográfico ● WGS 84 : ● Sistema onde é possível representar os atributos espaciais de forma global. ● Fonte :http://spatialreference.org/
  35. 35. Justificativas para uso de tabelas Geométricas ● Dados restritos a um estado ou município por exemplo ● Número bem maior de funcionalidades para cálculos geográficos ● Maior precisão na área mais restrita
  36. 36. Exemplo de um sistema Geométrico Sad69 / utm zone 23s : Sistema que possibilita uma representação mais específica. Fonte http://spatialreference.org/ Geográficas
  37. 37. Relacionamentos ● Topológicos: Determinam se dois objetos interceptam-se ou não e qual o tipo de topologia existente entre eles. ● Métricos: Relações que tratam da distancia existente entre feições geográficas; ● De ordem: Diz como os objetos estão posicionados ou relacionados entre si (a norte, ao sul, a direita, etc).
  38. 38. Índices espaciais
  39. 39. Índices espaciais ● Permite que o banco de dados tenha eficiência ● Grande volume de informações ● O PostgreSQL + PostGIS utiliza 3 tipos de índices. ● B-Tree (não espacial) ● R-Tree (espacial) ● GIST (espacial)
  40. 40. Índices espaciais (B-Trees) ● Usados para dados que podem ser ordenados ao longo de um eixo. ● Dados não GIS (numero, letra inicial, datas) ● Não e utilizado como índice espacial
  41. 41. Índices espaciais (R-Trees) ● Dividem os dados em retângulos, subretângulos e sub-sub-retângulos e etc. ● R-Trees são usadas pelos bancos de dados espaciais para indexar dados cartográficos.
  42. 42. Índices espaciais (GIST) ● GIST (Generalized Search Trees) ● Dividem dados em: ● “things to one side” (feições para um lado) ● “things which overlap” (feições que se sobrepõem) ● “things which are inside” (feições que estão dentro)
  43. 43. Índices espaciais (GIST) ● Usado para acelerar consultas em estruturas geométricas irregulares CREATE INDEX NOME_INDICE ON NOME_TABELA USING GIST (COLUNA_ESPACIAL) ● Forçando a atualização índice espacial com o comando. VACUUM ANALYZE NOME_TABELA COLUNA_ESPACIAL
  44. 44. Índices (Vantagens) ● Na construção de uma "query" com operadores ● Exemplo &&, pode tirar proveito do índice espacial de GiST. ● Funções como distance() não pode usar o índice para otimizar suas operações.
  45. 45. Operadores && → Este operador diz se caixa delimitada de uma geometria sobrepõe caixa delimitada de outra. ~= → Estes operadores testam se duas geometrias são geometricamente idênticas. Por exemplo,se ' POLYGON((0 0,1 1,1 0,0 0)) ' esta igual a ' POLYGON((0 0,1 1,1 0,0 0)) '. = → Este operador e mais ingenuo, só testa se as caixas delimitadas para geometrias são as mesmas.
  46. 46. Estrutura de dados
  47. 47. Funções PostGIS ● Link completo com as funções disponibilizada pela extensão espacial PostGIS http://www.postgis.us/downloads/postgis20_c heatsheet.html
  48. 48. Junções Espaciais ● Junções normais usam uma chave comum SELECT a.var1, b.var2 FROM a,b WHERE a.id = b.id ● Junções espaciais utilizam a chave universal de localização SELECT a.var1, b.var2 FROM a,b WHERE ST_Intersects(a.geom = b.geom)
  49. 49. Junções Espaciais ● Relacione os bares que estão a 250 metros de um hospital SELECT h.nome,b.nome, b.geometria FROM hospitais h, bares b WHERE h.nome = 'Santa casa de São Paulo' AND DWITHIN( h.geometria,b.geometria, 250);
  50. 50. Junções Espaciais CREATE VIEW areas_voto AS SELECT ST_Intersection( a.geometria, m.geometria ) AS intersection, ST_Area(a.geometria) AS va_area, m.name FROM areas a, municipio m WHERE ST_Intersects( a.geometria, m.geometria ) AND m.name='São Paulo';
  51. 51. Projeção de Coordenadas Veja o SRID utilizando a função ST_SRID SELECT ST_SRID(geometria) FROM tabela_especial LIMIT 1; SRID do sistema WGS 84 SELECT srtext FROM spatial_ref_sys WHERE srid = 4326;
  52. 52. Projeção de Coordenadas ● "GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY[ "EPSG","7030"]],AUTHORITY["EPSG","63 26"]],PRIMEM["Greenwich",0,AUTHORITY ["EPSG","8901"]],UNIT["degree",0.017453 2925199433,AUTHORITY["EPSG","9122"]] ,AUTHORITY["EPSG","4326"]]"
  53. 53. Projeção de Coordenadas ● PROJ4 – Biblioteca de reprojeção usada pelo PostGIS SELECT proj4text FROM spatial_ref_sys WHERE srid = 4326; ● "+proj=longlat +datum=WGS84 +no_defs "
  54. 54. Projeção de Coordenadas ● Para usar a reprojeção de coordenadas utiliza-se a função ST_Transform SELECT ST_AsText(geometria) FROM rodovias LIMIT 1; SELECT ST_AsText(ST_Transform(geometria,4326)) FROM rodovias LIMIT 1;
  55. 55. Image Rasters
  56. 56. Matriz
  57. 57. Ortofoto
  58. 58. Raster gradiente
  59. 59. Temático
  60. 60. O que são bandas?
  61. 61. Composição RGB
  62. 62. Carregando e Criando Rasters ● Para a maioria dos casos, carregar arquivos raster existentes ● Usando o gerenciador raster2pgsql. ● Que é nativo no conjunto de aplicativos postgis. ● Antes eram executados scripts python GDAL para isso.
  63. 63. Usando raster2pgsql para carregamento de arquivos raster ● O raster2pgsql é um carregador de arquivos raster , Carrega arquivos suportados pelos formatos raster GDAL em SQL. ● Adequado para o carregamento em uma tabela espacial no PostGIS raster. ● Ele é capaz de carregar pastas com vários arquivos raster. ● Criação de visões globais(overviews) de rasters
  64. 64. Exemplos raster2pgsql -s 4236 -I -C -M *.tif -F -t 100x100 public.tabela_raster > raster.sql psql -d nome_do_banco -f raster.sql -s - <SRID> Atribuir saída raster com SRID especificado. -l - OVERVIEW_FACTOR Criar visão geral(overview) do raster. -C - Aplicando restrição raster -- srid, tamanho de pixel etc. para garantir que o raster está devidamente registrado na visão(view) raster_columns. -M - Vacuum analyze a tabela de raster. -F - Adicionar coluna com o name do arquivo -t TILE_SIZE - Cortar raster em partes(tiles) para ser inserido em um registro da tabela (table row). TILE_SIZE é expressa como WIDTHxHEIGHT.
  65. 65. Rasters Overviews ● raster_overviews catálogos informações sobre as colunas da tabela raster utilizados para overviews ● Overviews são catalogados em ambos raster_columns e raster_overviews porque são rasters em seu próprio direito, mas também servem a um propósito especial. ● Ser uma definição menos de uma tabela de resolução mais alta(raster). ● Ele só é gerado quando parametrizamos -l no carregamento do raster.
  66. 66. Página do INPE (catalogo de imagens) ●Para acesso ao catalogo de imagens do ● INPE ( Instituto Nacional de Pesquisas ● Espaciais) ●  http://www.dgi.inpe.br/CDSR/
  67. 67. PGRouting (Rotas e caminhos)
  68. 68. PgRouting ● PgRouting amplia à extensão espacial PostGIS do banco PostgreSQL ● Funcionalidades de roteamento geoespacial ● PgRouting está disponível sob a licença GPLv2 e é apoiado por uma comunidade crescente de indivíduos, empresas e organizações.
  69. 69. Vantagens ● Dados podem ser visualizados por muitos SIGS Opensource como QGIS, UDIG … ● Alterações podem ser aplicadas instantaneamente, sem a necessidade de realizar cálculos adicionais (prévios). ● O parâmetro "custo" pode ser calculado de forma dinâmica através de SQL.
  70. 70. PgRouting fornece funções para: ● All Pairs Shortest Path, Johnson’s Algorithm ● All Pairs Shortest Path, Floyd-Warshall Algorithm ● Shortest Path A* ● Bi-directional Dijkstra Shortest Path ● Bi-directional A* Shortest Path ● Shortest Path Dijkstra ● Driving Distance ● K-Shortest Path, Multiple Alternative Paths ● K-Dijkstra, One to Many Shortest Path ● Traveling Sales Person ● Turn Restriction Shortest Path (TRSP) ● Shortest Path Shooting Star
  71. 71. OpenStreetMap e PgRouting ● OpenStreetMap é uma fonte de dados perfeito para usar para pgRouting , porque é livremente disponível e não tem restrições técnicas em termos de processamento de dados.
  72. 72. OpenStreetMap estrutura de dados topológica : ● Nodes - são pontos com uma posição geográfica. ● Ways - são listas de nós , o que representa uma polilinha ou polígono. ● Relations - são grupos de nós , caminhos e outras relações que podem ser atribuídos determinadas propriedades. ● Tags - podem ser aplicadas a nós , formas ou relações e consistem de pares name = value.
  73. 73. osm2pgrouting ● osm2pgrouting é uma ferramenta de linha de comando que facilita a importação de dados do OpenStreetMap em um banco de dados pgRouting . ● Baseia-se a topologia da rede de roteamento automaticamente e cria as tabelas para os tipos de recursos e classes de estradas. osm2pgrouting foi escrito principalmente por Daniel Wendt e agora está hospedado no site do projeto pgRouting
  74. 74. Windows OSM2PO - Routing On OpenStreetMap ● C:osm2po-4.2.30>java -jar osm2po-core- 4.2.30-signed.jar prefix=at "C:tempmap.osm.pbf" ● psql -U [username] -d [dbname] -q -f "C:osm2po-4.2.30atat_2po_4pgr.sql"
  75. 75. Exemplo Vamos testar agora! Rota da source(origem) # 1 para target(destino) # 3000 usando pgr_dijkstra: SELECT seq, id1 AS node, id2 AS edge, cost, geom FROM pgr_dijkstra( 'SELECT id, source, target, st_length(geom) as cost FROM network.logradouro', 1, 3000, false, false) as di JOIN network.logradouro log ON di.id2 = log.id ;
  76. 76. Midware Geoserver Acesso aos serviços WMS e WFS
  77. 77. WMS – Web Map Service ● Interface HTTP simples ● Interface usada para solicitar imagens para o cliente ● Imagens estas que são geradas a partir de uma fonte de dados espacial ● Essas imagens são geradas pelo midware (Geoserver)
  78. 78. WMS – Web Map Service ● http://<endereco>:<posta>/geoserver/workspace/wms ● ?service=WMS ● &version=1.1.0 ● &request=GetMap ● &layers=sao_paulo_ws:cidades_principais ● &styles=default ● &bbox=xmin,ymin,xmax,ymax ● &width=531&height=330 ● &srs=EPSG:4326 ● &format=image%2Fpng
  79. 79. WMS – Web Map Service Executando camada WMS via navegador
  80. 80. Servico pelo WMS via OpenLayers
  81. 81. WFS – Web Feature Service ● Padrão OGC WFS permite que um cliente recupere dados geoespaciais codificados ● Estes dados podem atuar em vários formatos também OGC ● Exemplo GML (Geography Markup Language) ou GeoJson ... ● Em vários serviços Web Feature "
  82. 82. WFS – Web Feature Service ● http://endereco:porta/geoserver/workspace/ows ● ?service=WFS //tipo ● &version=1.0.0 //versao ● &request=GetFeature //metodo ● &typeName=sao_paulo_ws:cidades_principais ● &maxFeatures=50 //qtde feições ● &outputFormat=json // formato de resposta // geojson ou gml
  83. 83. GeoJSON ● {"type":"FeatureCollection","features": [{"type":"Feature","id":"tasmania_cities.1","geometry": {"type":"MultiPoint","coordinates":[[147.2910004483,- 42.851001816890005]]},"geometry_name":"the_geom","proper ties": {"CITY_NAME":"Hobart","ADMIN_NAME":"Tasmania","CNTRY _NAME":"Australia","STATUS":"Provincial capital","POP_CLASS":"100,000 to 250,000"}}],"crs": {"type":"EPSG","properties":{"code":"4326"}}}
  84. 84. GML
  85. 85. Outros formatos
  86. 86. Dicas ● 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 copias de segurança devem ser mantidas sempre atualizadas (estrategia de backup). ● Permissões de acessos aos objetos também deve ser revista periodicamente (politica de segurança).
  87. 87. Exemplo de aplicação
  88. 88. Referências http://postgis.net. http://pgbr.postgresql.org.br/2009/palestras/aud1/ http://www.slideshare.net/aitproeg/postgis http://docs.geoserver.org/ http://www.opengeospatial.org/standards
  89. 89. Sorteio ● Sorteio de 5 cursos da GeoCursos ● http://goo.gl/oSOZgy
  90. 90. Obrigado! Jairo de Almeida jairodealmeida@gmail.com

×