PGDAY - Palestra PostGIS + PgRouting

Post on 14-Jun-2015

896 views 5 download

description

Palestra ministrada no evento PGDay sobre PostGIS + PgRounting

Transcript of PGDAY - Palestra PostGIS + PgRouting

Conceitos SIG

Sistema de informação geográfica

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.

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)

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

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)

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)))

Representação do mundo real

Como organizar camadas em um padrão para Sistema de Informação

Geográfica

Organização das camadas (Tabelas)

Organização das camadas (Tabelas)

clientes.shpclientes.shxclientes.dbf

ruas.shpruas.shxruas.dbf

lotes.shp,lotes.shxlotes.dbf

elevacao.shpelevacao.shxelevacao.dbf

uso_territorial.shpuso_territorial.shpuso_territorial.dbf

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

Entendendo o formatoShapefile

Entendendo o formatoShapefile

Importação dos arquivos

Importação dos arquivos

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

Interface de importação

Instalado junto com o complemento shp2pgsql-gui● Importação de Shapefiles● Uso via interface gráfica● Instalação PostgreSQLPostgreSQL\versão\bin\postgisgui\shp2pgsql-gui.exe

PostGIS - Entendendo as funcionalidades disponíveis

Introdução PostGIS

● PostGIS e uma extensão ao banco de dadosobjeto-relacional PostgreSQL ,● Permite armazenamento de objetos SIG nobanco de dados .● PostGIS inclui suporte para índices espaciais e funções para analise e processamento de objetos SIG.

Criando tabelas especiais

● Criando tabela com tipo de dados espacialCREATE TABLE teste (gid serial primary key, namevarchar(20), geom geometry(LINESTRING) );● Inserindo objeto GISINSERT INTO teste (ID, NAME, GEOM)VALUES (1, 'Primeira Geometria',ST_GeomFromText('LINESTRING(2 3,4 5,6 5,78)'));

Objetos SIG

● Os objetos GIS suportados pelo PostGISsão um superconjunto dos "Simple Features"● Definições OpenGIS Consortium (OGC).● A partir da versão 0.9, PostGIS suportatodos os objetos e funções especificado pelopadrão OGC "Simple Features for SQL".

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.

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))

SRID (Spatial Reference SystemIdentifier )

● A especificação OpenGIS identificador desistema de referencia espacial ( SRID ) .● O SRID e necessária quando a criação deobjetos espaciais para a inserção nobanco de dados.

SRID (Spatial Reference SystemIdentifier )

● Cada tipo de sistema de projeção, SRID serve para um aglomerado territorial específico.

● http://spatialreference.org/

Funções de conversão

● bytea WKB = ST_AsBinary(geometry);● text WKT = ST_AsText(geometry);● geometry = ST_GeomFromWKB(byteaWKB, SRID);● geometry = ST_GeometryFromText(textWKT, SRID);

Exemplo

● Por exemplo, uma declaração válida deinserção para criar e inserir um objetoespacial OGC seria:INSERT INTO tabela_geografica ( the_geom, the_name )VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'Um lugar');

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) );

Metadados

● Para as informações das tabelas espaciaisSELECT * FROM geography_columns;● Lista de sistemas de coordenadasdisponíveisSELECT * FROM spatial_ref_sys

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

Metadados

● Tabela SPATIAL_REF_SYSOnde 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

Quando usar o tipo geográficoou o tipo geométrico

● Geográficolongitude / latitudeha menos funções definidas● GeométricoConjunto maior de funções disponíveisProjetado ou linear

Justificativas para uso detabelas Geográficas

● Dados globais, disponibilidade continental● Um conhecimento restrito sobre sistemasde coordenadas georreferenciados● Uso de funcionalidades simples

Exemplo de um sistema Geográfico

● WGS 84 : ● Sistema onde é possível representar os atributos espaciais de forma global.

● Fonte :http://spatialreference.org/

Justificativas para uso detabelas Geométricas

● Dados restritos a um estado ou municípiopor exemplo● Número bem maior de funcionalidades para cálculos geográficos● Maior precisão na área mais restrita

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

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

Índices espaciais

Í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)

Índices espaciais (B-Trees)

● Usados para dados que podem serordenados ao longo de um eixo.● Dados não GIS (numero, letra inicial, datas)● Não e utilizado como índice espacial

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

Í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)

Í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

Índices (Vantagens)

● Na construção de uma "query" comoperadores● Exemplo &&, pode tirar proveito do índiceespacial de GiST.● Funções como distance() não pode usar oíndice para otimizar suas operações.

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.

Estrutura de dados

Funções PostGIS

● Link completo com as funçõesdisponibilizada pela extensão espacialPostGIShttp://www.postgis.us/downloads/postgis20_cheatsheet.html

Junções Espaciais

● Junções normais usam uma chave comumSELECT a.var1, b.var2 FROM a,b WHERE a.id =b.id● Junções espaciais utilizam a chave universal delocalizaçãoSELECT a.var1, b.var2 FROM a,b WHEREST_Intersects(a.geom = b.geom)

Junções Espaciais

● Relacione os bares que estão a 250metros de um hospitalSELECT 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);

Junções Espaciais

CREATE VIEW areas_voto AS SELECTST_Intersection( a.geometria, m.geometria) AS intersection, ST_Area(a.geometria) AS va_area,m.name FROM areas a, municipio mWHERE ST_Intersects( a.geometria, m.geometria) AND m.name='São Paulo';

Projeção de Coordenadas

Veja o SRID utilizando a função ST_SRIDSELECT ST_SRID(geometria) FROMtabela_especial LIMIT 1;SRID do sistema WGS 84SELECT srtext FROM spatial_ref_sysWHERE srid = 4326;

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"]]"

Projeção de Coordenadas

● PROJ4 – Biblioteca de reprojeção usadapelo PostGISSELECT proj4text FROM spatial_ref_sysWHERE srid = 4326;● "+proj=longlat +datum=WGS84 +no_defs "

Projeção de Coordenadas

● Para usar a reprojeção de coordenadas utiliza-se a função ST_TransformSELECT ST_AsText(geometria) FROMrodovias LIMIT 1;SELECT ST_AsText(ST_Transform(geometria,4326))FROM rodovias LIMIT 1;

Image Rasters

Matriz

Ortofoto

Raster gradiente

Temático

O que são bandas?

Composição RGB

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.

Usando raster2pgsql paracarregamento 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

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

Rasters Overviews

● raster_overviews catálogos informações sobre ascolunas 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.

Página do INPE (catalogo deimagens)

● Para acesso ao catalogo de imagens do�

● INPE ( Instituto Nacional de Pesquisas● Espaciais)● � http://www.dgi.inpe.br/CDSR/

PGRouting (Rotas e caminhos)

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.

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.

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

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.

OpenStreetMap estruturade dados topológica :

● Nodes - são pontos com uma posiçãogeográfica.● Ways - são listas de nós , o que representauma polilinha ou polígono.● Relations - são grupos de nós , caminhos eoutras relações que podem ser atribuídosdeterminadas propriedades.● Tags - podem ser aplicadas a nós , formas ourelações e consistem de pares name = value.

osm2pgrouting

● osm2pgrouting é uma ferramenta de linha decomando que facilita a importação de dados doOpenStreetMap em um banco de dadospgRouting .● Baseia-se a topologia da rede de roteamentoautomaticamente e cria as tabelas para os tiposde recursos e classes de estradas.osm2pgrouting foi escrito principalmente porDaniel Wendt e agora está hospedado no sitedo projeto pgRouting

Windows OSM2PO - Routing OnOpenStreetMap

● C:\osm2po-4.2.30>java -jar osm2po-core-4.2.30-signed.jar prefix=at "C:\temp\map.osm.pbf"

● psql -U [username] -d [dbname] -q -f "C:\osm2po-4.2.30\at\at_2po_4pgr.sql"

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 ;

Midware GeoserverAcesso aos serviços WMS e WFS

WMS – Web Map Service

● Interface HTTP simples● Interface usada para solicitar imagens parao cliente● Imagens estas que são geradas a partir deuma fonte de dados espacial● Essas imagens são geradas pelo midware(Geoserver)

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

WMS – Web Map Service

Executando camada WMS via navegador

Servico pelo WMS viaOpenLayers

WFS – Web Feature Service

● Padrão OGC WFS permite que um clienterecupere dados geoespaciais codificados● Estes dados podem atuar em váriosformatos também OGC● Exemplo GML (Geography MarkupLanguage) ou GeoJson ...● Em vários serviços Web Feature "

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

GeoJSON

● {"type":"FeatureCollection","features":[{"type":"Feature","id":"tasmania_cities.1","geometry":{"type":"MultiPoint","coordinates":[[147.2910004483,-42.851001816890005]]},"geometry_name":"the_geom","properties":{"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"}}}

GML

Outros formatos

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

Exemplo de aplicação

Referências

http://postgis.net.http://pgbr.postgresql.org.br/2009/palestras/aud1/http://www.slideshare.net/aitproeg/postgishttp://docs.geoserver.org/http://www.opengeospatial.org/standards

Sorteio

● Sorteio de 5 cursos da GeoCursos● http://goo.gl/oSOZgy

Obrigado!Jairo de Almeidajairodealmeida@gmail.com