BANCO DE DADOS GEOGRÁFICOS E WEBMAPPING

Propaganda
BANCO DE DADOS GEOGRÁFICOS E
WEBMAPPING
1
Prof. Angelo Augusto Frozza, M.Sc.
http://about.me/TilFrozza
INTRODUÇÃO AO POSTGIS

PostGIS é uma extensão do sistema de banco de dados
objeto-relacional PostgreSQL, que permite armazenar
objetos geográficos em banco de dados

PostGIS inclui suporte para índices GiST -índices
espacias baseados em R-Tree - e funções para análise
básica e processamento de objetos GIS
http://postgis.refractions.net/
2
INTRODUÇÃO AO POSTGIS

O PostGIS segue o padrão OpenGIS


http://www.opengeospatial.org/
Provê suporte para todos objetos e funções da especificação SFS
(Simple Features for SQL) (OGC)
GEOMETRY
POINT
GEOMETRYCOLLECTION
LINESTRING
MULTIPOINT
POLYGON
MULTILINESTRING
MULTIPOLYGON
3
INTRODUÇÃO AO POSTGIS

O PostGIS segue o padrão OpenGIS

Point, LineString e Polygon
4
INTRODUÇÃO AO POSTGIS

O PostGIS segue o padrão OpenGIS

LineString
5
INTRODUÇÃO AO POSTGIS

O PostGIS segue o padrão OpenGIS

Polygon
6
INTRODUÇÃO AO POSTGIS

O PostGIS segue o padrão OpenGIS

MultiLineString
7
INTRODUÇÃO AO POSTGIS

O PostGIS segue o padrão OpenGIS

MultiPolygon
8
INTRODUÇÃO AO POSTGIS

O PostGIS segue o padrão OpenGIS

MultiPoint
9
INTRODUÇÃO AO POSTGIS

Formatos WKB e WKT do OpenGIS

Duas formas padrões para manipular objetos geográficos
Well-Known Text (WKT) e Well-Known Binary (WKB)
 Guardam informações sobre tipo e coordenadas do Geo-Objeto


Exemplos 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))
10
INTRODUÇÃO AO POSTGIS

SRID (Spatial Referencing System Identifier)

Todo objeto geográfico deve ter um SRID para ser inserido no
BDG


O SRID corresponde a um sistema de referência espacial baseado no
elipsóide específico usado para mapeamento de terra plana ou de terra
redonda
Uma coluna espacial pode conter objetos com SRIDs diferentes

No entanto apenas instâncias espaciais com o mesmo SRID podem ser
usadas ao executar operações sobre dados espaciais
http://en.wikipedia.org/wiki/SRID
http://seiti.eti.br/blog/2010/sistema-de-referenciamento-espacial
11
INTRODUÇÃO AO POSTGIS

SRID (Spatial Referencing System Identifier)

O resultado de qualquer método espacial derivado de duas instâncias de
dados espaciais será válido apenas se essas instâncias tiverem o
mesmo SRID que é baseado na mesma unidade de medida, datum e
projeção usada para determinar as coordenadas das instâncias

As unidades mais comuns de medida de um SRID são metros e metros
quadrados

O sistema de identificação de referência espacial é definido pelo padrão
do EPSG (European Petroleum Survey Group), que é um conjunto de
padrões desenvolvido para armazenamento de dados geodésicos, de
cartografia e de pesquisa

Esse padrão é de propriedade do Comitê de Pesquisa e Posicionamento da OGP
(Oil and Gas Producers)
12
INTRODUÇÃO AO POSTGIS

SRID (Spatial Referencing System Identifier)

Exemplo:

Considerando a interface GeomFromText :


GeomFromText (text WKT, SRID);
Pode-se inserir o seguinte objeto geográfico:

INSERT INTO SpatialTable (THE_GEOM, THE_NAME)
VALUES (GeomFromText('POINT(-126.4 45.32)', 2000),
'Um Lugar');
13
INSTALANDO O POSTGIS NO WINDOWS
14
DEFINIÇÕES DO POSTGIS

A especificação SFS/OpenGIS define tipos, funções e
metadados para manipular GeoObjetos

As principais tabelas de metadados são:

SPATIAL_REF_SYS → guarda os IDs e as descrições textuais
do sistema de coordenadas usados no BDG

GEOMETRY_COLUMNS → guarda informações do esquema
geográfico e das propriedades dos GeoObjetos
15
DEFINIÇÕES DO POSTGIS
 geometry_columns
F_TABLE_CATALOG
 F_TABLE_SCHEMA
 F_TABLE_NAME

F_GEOMETRY_COLUMN
 COORD_DIMENSION

SRID
(SPATIAL_REF_SYS)
 TYPE

- nome do BD
- nome da tabela contendo a coluna
de geometria
- nome da coluna de geometria
- dimensão espacial da coluna (2D,
3D)
- ID do sistema de referência
espacial (chave estrangeira para a tabela
- tipo de objeto espacial (POINT,
LINESTRING, POLYGON, MULTIPOINT,
MULTILINESTRING, MULTIPOLYGON,
GEOMETRYCOLLECTION )
16
DEFINIÇÕES DO POSTGIS

spatial_ref_sys

SRID

AUTH_NAME

AUTH_SRID

SRTEXT

PROJ4TEXT
- identificador único do Sistema de
Referência Espacial no banco de dados
- nome dos padrões usados no sistema de
referência (autoridade que especificou)
- ID do Sistema de Referência Espacial como
definido pela autoridade citada em
AUTH_NAME
- representação do Sistema de Referência
Espacial no formato Well-Known Text
- string de definição de coordenadas na
biblioteca Proj4 para um SRID particular (usado
para transformações de SRS)
17
CRIANDO UM BD POSTGIS

Requisitos
Banco de Dados PostgreSQL
 Extensão PostGIS


Duas formas:
Usando um wizard (pgAdmin)
 Por meio de scripts
 Por conversão de shapefiles (*.shp)

18
CRIANDO UM BD POSTGIS COM WIZARD
CRIANDO UM BD POSTGIS VIA SCRIPTS

1a etapa (opção 1 – detalhada):

Crie um novo banco PostGIS
createdb –U username[dbname]

O comando createlang adiciona a habilidade para usar funções
escritas em pl/pgsql (opcional)
createlang –U username plpgsql [dbname]

O comando psql roda o interpretador SQL para os arquivos
postgis.sql e spatial_ref_sys.sql
psql –U username -f postgis.sql [dbname]
psql –U username -f spatial_ref_sys.sql [dbname]
20
CRIANDO UM BD POSTGIS VIA SCRIPTS

1a etapa (opção 2):

Crie um novo banco PostGIS
createdb –U username –T template_postgis_20[dbname]

O comando psql roda o interpretador SQL para os arquivos
postgis.sql e spatial_ref_sys.sql
psql –U username -f spatial_ref_sys.sql [dbname]
21
CRIANDO UM BD POSTGIS VIA SCRIPTS

1a etapa:

O arquivo postgis.sql contém comandos que adicionam os
tipos de dados geométricos, as funções e os operadores
necessários para manipulá-los e duas tabelas de metadados:

geometry_columns


para controlar as colunas geométricas e suas restrições
spatial_ref_sys

Mantem os IDs numéricos e descrições textuais do sistema de
coordenadas usado no banco espacial
22
CRIANDO UM BD POSTGIS VIA SCRIPTS

2a etapa:

Conecte-se ao banco de dados usando o interpretador de
comandos SQL psql:
psql –U username [dbname]

Crie uma tabela digitando:
CREATE TABLE test ( id INTEGER PRIMARY KEY, name
VARCHAR(20) NOT NULL );
SELECT AddGeometryColumn ( '[dbname]', 'test',
'geom', -1, 'GEOMETRY', 2 );
23
CRIANDO UM BD POSTGIS VIA SCRIPTS

2a etapa:

A função AddGeometryColumn cria uma coluna na tabela
especificada e uma linha na tabela geometry_columns.

Os parâmetros usados são:
Nome do banco de dados
 Nome da tabela
 Nome da coluna a ser criada
 Identificador de Referência Espacial (SRID) da nova coluna



Tipo de geometria para a coluna:








O SRID referência uma linha na tabela spatial_ref_sys
POINT
LINESTRING
POLYGON
MULTIPOINT
MULTILINESTRING
MULTIPOLYGON
GEOMETRY (todos os tipos permitidos)
Número de dimensões na coluna (2D ou 3D)
24
CRIANDO UM BD POSTGIS VIA SCRIPTS

3a etapa:

Criar um índice espacial para acelerar consultas baseadas em
janelas (bounding-box), por exemplo:

"selecione todas as geometrias que estão dentro desta bounding box“

Este tipo de consulta é usada para selecionar geometrias dentro
de uma área de interesse ou dentro de uma área de visão do
mapa

Para criar um índice espacial GiST (R-Tree):
CREATE INDEX test_geom_idx ON test USING GIST (geom
GIST_GEOMETRY_OPS);
25
CRIANDO UM BD POSTGIS VIA SCRIPTS

3a etapa:

Este comando pode levar um grande tempo se houver uma
quantidade significativa de dados na tabela

Após carregar os dados, é bom rodar o comando:
VACUUM ANALYZE;

Este comando atualiza o cache do banco de dados de
estatísticas e reorganiza a estrutura de alguns índices para
aumentar a velocidade de consultas usando este índice
26
CRIANDO UM BD POSTGIS VIA SCRIPTS

4a etapa:

Inserindo dados por linha de comando;

O PostGIS usa o formato Well-Known Text (WKT) para descrever geometrias:
INSERT INTO test ( id, name, geom )
VALUES ( 1, 'geom 1', ST_GeometryFromText(
'POINT(1 1)', -1 ) );
INSERT INTO test ( id, name, geom )
VALUES ( 2, 'geom 2',
ST_GeometryFromText( 'LINESTRING(1 2, 2 3)', 1 ) );
INSERT INTO test ( id, name, geom )
VALUES ( 3, 'geom 3',
ST_GeometryFromText( 'POLYGON((2 1, 3 1, 3 3,
2 1))', -1 ) );
27
CRIANDO UM BD POSTGIS VIA SCRIPTS

4a etapa:

A função GeometryFromText pega uma string WKT e um SRID
e retorna uma geometria;

Mais exemplos de WKT para diferentes tipos de geometria:







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 4), LINESTRING(2 3, 3 4))
28
IMPORTANDO SHAPEFILES PARA O POSTGIS

Arquivos shapefile




<file>.shp
<file>.shx
<file>.dbf
<file>.prj
 <file>.sbn
 <file>.sbx
- arquivo principal
- arquivo de índice (liga o dbf ao shp)
- tabela de atributos
- arquivo de projeção cartográfica
- arquivo auxiliar
- arquivo auxiliar
29
IMPORTANDO SHAPEFILES PARA O POSTGIS

Usa-se o programa shp2pgsql:
shp2pgsql [<options>] <shapefile> <tablename> <dbname>
| psql –U username [dbname]

Este programa pega um arquivo shapefile, gera os scripts SQL
apropriados para criar uma tabela com os mesmos atributos
(colunas) do shapefile e insere todos os registros do shapefile no
PostGIS

[<options>] : opções de configuração






Principais: (-a || -c || -d || -p → mutuamente exclusivas), -D
-a → anexa dados a uma tabela existente
-c → cria uma tabela e insere os dados (modo padrão)
-d → apaga a tabela antes de criar outra
-p → lê o esquema do shapefile para criar uma tabela
-D → permite fazer dump de grandes volumes de dados
Usa COPY no lugar de INSERT INTO
30
IMPORTANDO SHAPEFILES PARA O POSTGIS

O shp2pgsl pode também inserir as linhas em uma
tabela existente com as colunas corretas (em vez de
criar uma nova tabela), para agregar múltiplos
shapefiles com o mesmo esquema em uma única tabela

Note que a coluna contendo a geometria do shapefile é
chamada the_geom na tabela do banco de dados
criada pelo shp2pgsql
31
IMPORTANDO SHAPEFILES PARA O POSTGIS
 Este
exemplo cria quatro tabelas no banco de
dados: elections, ocean, roads e hospitals:
shp2pgsql -D victoria_elections.shp elections
[dbname] | psql –U username [dbname]
shp2pgsql -D victoria_ocean.shp ocean [dbname]
| psql –U username [dbname]
shp2pgsql -D victoria_roads.shp roads [dbname]
| psql –U username [dbname]
shp2pgsql -D victoria_hospitals.shp hospitals
[dbname] | psql –U username [dbname]
32
IMPORTANDO SHAPEFILES PARA O POSTGIS

Após importar os dados do shapefile, criam-se os índices
espacias:
CREATE INDEX elections_geom_idx ON
elections USING GIST (the_geom
GIST_GEOMETRY_OPS);
CREATE INDEX ocean_geom_idx ON ocean
USING GIST (the_geom GIST_GEOMETRY_OPS);
CREATE INDEX roads_geom_idx ON roads
USING GIST (the_geom GIST_GEOMETRY_OPS);
CREATE INDEX hospitals_geom_idx ON
hospitals USING GIST (the_geom
GIST_GEOMETRY_OPS);
33
IMPORTANDO SHAPEFILES PARA O POSTGIS

O processo de importação com o shp2pgsql
automaticamente define uma única coluna chamada gid
e faz ela a chave-primária da tabela:



\d elections
\d ocean
O PostgreSQL também provê o OID no lugar da chaveprimária
34
FUNÇÕES

ST_Centroid(geometry)


Retorno o tamanho dos limites de um polígono
PointOnSurface(geometry)


Retorna o tamanho de geometrias do tipo linha
ST_Perimeter(geometry)


Retorna a área de um polígono
ST_Length(geometry)


Retorna o ponto central da geometria
ST_Area(geometry)


DE PROCESSAMENTO GEOMÉTRICO
Retorna um ponto que intersecta uma superfície
ST_Boundary(geometry)

Retorna os pontos limites da geometria
35
FUNÇÕES

ST_Buffer(geometry, distance double, [integer])


Retorna uma geometria que representa os pontos compartilhados pelas
duas geometrias indicadas
ST_Difference(geometryA, geometryB)


Retorna uma geometria (buffer) que representa todos os pontos que
estão xxx (distance) distantes de geometry
ST_Intersection(geometryA, geometryB)


DE PROCESSAMENTO GEOMÉTRICO
Retorna uma geometria que representa que parte de A não intersecta
com B
ST_GeomUnion(geometryA, geometryB)

(ST_Union) Retorna uma geometria que representa a união de A e B
36
FUNÇÕES DE RELACIONAMENTO ESPACIAL

ST_Distance(geometryA, geometryB)


ST_Equals(geometryA, geometryB)


Retorna verdadeiro se as duas geometrias não compartilham qualquer
espaço
ST_Intersects(geometryA, geometryB)


Retorna verdadeiro se as duas geometrias são equivalentes
ST_Disjoint(geometryA, geometryB)


Retorna a distância cartesiana entre duas geometrias
Retorna verdadeiro se duas geometrias compartilham algum espaço
ST_Touches(geometryA, geometryB)

Retorna verdadeiro se as duas geometrias tem pelo menos um ponto em
comum
37
FUNÇÕES DE RELACIONAMENTO ESPACIAL

ST_Crosses(geometryA, geometryB)


ST_Within(geometryA, geometryB)


Retorna verdadeiro se a geometria A está completamente dentro da
geometria B
ST_Overlaps(geometryA, geometryB)


Retorna verdadeiro se as geometrias tem algum, mas nem todos, os
pontos internos em comum
Retorna verdadeiro se a geometria A sobrepõe a geometria B mas não
está completamente contida dentro dessa
ST_Contains(geometryA, geometryB)

Retorna verdadeiro se nenhum ponto de B está fora da geometria A e
pelo menos um ponto no interior de B encontra-se no interior de A
38
POSTGIS PARA SHAPEFILE

Sintaxe:
pgsql2shp [<opções>] <nome do banco>
<nome da tabela>
do banco> nome do banco de origem
 <nome da tabela> nome da tabela geográfica
 <nome
39
POSTGIS PARA SHAPEFILE
 <opções>







-d: define o arquivo dump para 3D (padrão = 2D)
-f <filename>: nome do shapefile (padrão = nome da
tabela)
-h <host>: host em que está o banco de dados
(padrão =localhost)
-p <port>: porta de conexão (padrão = 5432)
-u <user>: especifica o usuário
-P <password>: especifica a senha
-g <geometry_column>: especifica a coluna
geométrica a ser exportada
40
POSTGIS PARA SHAPEFILE
pgsql2shp -u postgres -P postgres
fatec3 sedes_sc
 sedes_sc –
view criada para selecionar parte dos
dados da tabela sedes
41
POSTGIS PARA SHAPEFILE

Criação da view
create view sedes_rs as
select * from sedes where
coduf='43';
42
POSTGIS PARA SHAPEFILE
 Registrar
a view na tabela geometry_columns
INSERT INTO geometry_columns (f_table_catalog,
f_table_schema, f_table_name, f_geometry_column,
coord_dimension, srid, type)
VALUES ('', 'public', 'sedes_rs', 'the_geom', 2, -1,
'POINT');
43
DICAS

Onde obter shapefiles?

ftp://geoftp.ibge.gov.br/mapas/Carta_Internacional_ao_
Milionesimo/shape/

Arquivos: SG-21, SG-22, SH-21, SH-22 e SI-22

http://www.metadados.inde.gov.br/geonetwork

EPAGRI
http://ciram.epagri.sc.gov.br/mapoteca/

Digitar no Google:

siscom ibama
44
REFERÊNCIAS

PostGIS
http://www.postgis.org

Spatial Data (SQL Server)
http://msdn.microsoft.com/en-us/library/bb933790.aspx
Download