Académique Documents
Professionnel Documents
Culture Documents
BD Geogrficos
PostGIS
Valria Times
vct@cin.ufpe.br
CIn/UFPE PostGis
Valria Times
Introduo ao PostGIS
PostGIS: Uma extenso Geo para o PostgreSQL
Download
http://postgis.refractions.net/download/
Diretrios
Windows Program Files\PostgreSQL\8.1\share\contrib
UNIX src/contrib/
Manual
http://postgis.refractions.net/docs/
CIn/UFPE PostGis
Valria Times
Introduo ao PostGIS
Abrindo uma conexo com PostGIS:
Servidor: postgres.cin.ufpe.br
Porta: 5432
Usurio: g082if695_vct
Senha: fS4pDd0B
CIn/UFPE PostGis
Valria Times
Introduo ao PostGIS
PostGIS segue o padro OpenGIS
Prov
suporte
para
todos
objetos
funes
da
POINT
GEOMETRYCOLLECTION
LINESTRING
MULTIPOINT
POLYGON
MULTILINESTRING
Fonte: INPE
CIn/UFPE PostGis
MULTIPOLYGON
Valria Times
Introduo ao PostGIS
Formatos WKB e WKT do OpenGIS
Duas formas padres para manipular Objetos Geogrficos
Well-Known Text (WKT) e Well-Known Binary (WKB)
Guardam informaes sobre tipo e coordenadas do ObjetoGeo
Exemplos:
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)))
CIn/UFPE PostGis
Valria Times
Introduo ao PostGIS
SRID (Spatial Referencing System Identifier)
Todo Objeto Geogrfico deve ter um SRID para ser
inserido no BDGeo
Por exemplo:
Considerando a interface GeomFromText
GeomFromText (text WKT, SRID);
Pode-se inserir o seguinte Objeto Geogrfico
INSERT INTO SpatialTable (THE_GEOM, THE_NAME) VALUES
(GeomFromText('POINT(-126.4 45.32)', 2000), Um Lugar');
CIn/UFPE PostGis
Valria Times
Introduo ao PostGIS
A especificao SFS/OpenGIS define tipos, funes
e metadados para manipular ObjetosGeo
As principais tabelas de metadados so:
SPATIAL_REF_SYS guarda os IDs e as descries
textuais do sistema de coordenadas usados no BDGeo
GEOMETRY_COLUMNS
guarda
informaes
do
CIn/UFPE PostGis
Valria Times
Introduo ao PostGIS
TABLE SPATIAL_REF_SYS (
SRID INTEGER NOT NULL PRIMARY KEY, // identificador do SRS
AUTH_NAME VARCHAR(256), // nome da autoridade que especificou o SRS
AUTH_SRID INTEGER, // identificador do SRS definido pela autoridade
SRTEXT VARCHAR(2048), // representao WKT do SRS
PROJ4TEXT VARCHAR(2048) // especificaes para transformao de SRS
)
CIn/UFPE PostGis
Valria Times
Introduo
CIn/UFPE PostGis
Valria Times
Introduo ao PostGIS
GEOMETRY_COLUMNS (
F_TABLE_CATALOG VARCHAR(256) NOT NULL,
F_TABLE_SCHEMA VARCHAR(256) NOT NULL,
Valria Times
10
Introduo ao PostGIS
Note:
"catalog" pode ficar em branco e apenas
usar o nome do BD do PostgreSQL
para "schema" .
CIn/UFPE PostGis
Valria Times
11
Usando o PostGIS
Criando uma tabela espacial (2 passos)
1) Criar uma tabela normal (sem campo espacial)
Exemplo:
CREATE TABLE ROADS_GEOM ( ID int4, NAME varchar(25) );
'roads_geom',
'geom',
Valria Times
12
Usando o PostGIS
Outros exemplos para criar tabelas espaciais
Assumindo que o SRID 2001 j existe
CREATE TABLE parks ( PARK_ID int4, PARK_NAME varchar(128),
PARK_DATE date, PARK_TYPE varchar(2) );
SELECT
AddGeometryColumn('parks','park_geom',2001,
'MULTIPOLYGON', 2 );
AddGeometryColumn(
'roads',
'roads_geom',
-1,
'GEOMETRY', 3 );
CIn/UFPE PostGis
Valria Times
13
Usando o PostGIS
Validando geometrias antes de inseri-las no BDGeo
Funo ISVALID()
Valida as coordenadas de uma geometria
Exemplo:
SELECT ISVALID('LINESTRING(0 0, 1 1)'),
ISVALID('LINESTRING(0 0,0 0)');
t
f
Valria Times
14
Usando o PostGIS
Inserindo ObjetosGeo nas tabelas (2 formas)
1) Usando SQL
BEGIN;
INSERT INTO ROADS_GEOM VALUES
(1,'Jeff Rd',GeomFromText('LINESTRING(191232 243118,191108 243242)',2000));
INSERT INTO ROADS_GEOM VALUES
(2,'Geordie Rd',GeomFromText('LINESTRING(189141 244158,189265 244817)',2000));
INSERT INTO ROADS_GEOM VALUES
(3,'Paul St',GeomFromText('LINESTRING(192783 228138,192612 229814)',2000));
INSERT INTO ROADS_GEOM VALUES (4,'Graeme
Ave',GeomFromText('LINESTRING(189412 252431,189631 259122)',2000));
INSERT INTO ROADS_GEOM VALUES
(5,'Phil Tce',GeomFromText('LINESTRING(190131 224148,190871 228134)',2000));
INSERT INTO ROADS_GEOM VALUES
(6,'Dave Cres',GeomFromText('LINESTRING(198231 263418,198213 268322)',2000));
COMMIT;
CIn/UFPE PostGis
Valria Times
15
Usando o PostGIS
2) Usando o Loader shp2pgsql
Converte um shape file para pgsql.sql
Shp2pgsql [<options>] <shapefile> <tablename> <database name>
<shapefile> : nome do shape file s/ extenso (inclui shp, shx, dbf)
<tablename> : nome da tabela destino. Por default, a geometria
fica na coluna 'geo_value'
<database name> : nome do BDGeo destino
[<options>] : opes de configurao
Principais:
Principais (-a || -c || -d || -p mutuamente exclusivas), -D.
-a : anexa dados a uma tabela existente
-c : cria uma tabela e insere os dados (modo padro)
-d : apaga a tabela antes de criar outra
-p : l o esquema do shape file para criar uma tabela
-D : permite fazer dump de grandes volumes de dados. Usa COPY
no lugar de INSERT INTO).
CIn/UFPE PostGis
Valria Times
16
Usando o PostGIS
2) Usando o Loader shp2pgsql Cont.
Exemplo com arquivo intermedirio:
Abrir um terminal (cmd) e executar:
set PATH=%PATH%;p:\postgresql\pgsql\bin
Shp2pgsql -c C:\ESRI\AV_GIS30\AVTUTOR\ARCVIEW\qstart\world94
world94 g082if695_vct > world94.sql
dir
psql
world94.sql -W
-d: nome do BD
-f: nome do arquivo
-U: nome do usurio
-h: nome do host
CIn/UFPE PostGis
Valria Times
17
Usando o PostGIS
2) Usando o Loader shp2pgsql Cont.
Exemplo sem arquivo intermedirio:
shp2pgsql -c C:\ESRI\AV_GIS30\AVTUTOR\ARCVIEW\qstart\mexico
mexico teste | psql -d teste -U postgres -h g1c10
shp2pgsql -c C:\ESRI\AV_GIS30\AVTUTOR\ARCVIEW\qstart\canada
canada teste | psql -d teste -U postgres -h g1c10
CIn/UFPE PostGis
Valria Times
18
Usando o PostGIS
Consultas simples a ObjetosGeo
Forma bsica
SELECT id, AsText(geom) AS geom, name FROM ROADS_GEOM;
Operadores teis
&&: Informa se o MBR de uma geometria intersecta o MBR de outra
~= : Testa se duas geometrias so geometricamente idnticas
= : Testa se os MBR de duas geometrias so idnticos
Exemplo:
SELECT ID, NAME
FROM ROADS_GEOM
WHERE
GEOM = GeomFromText('LINESTRING(191232
243118,191108 243242)',2000);
CIn/UFPE PostGis
Valria Times
19
Usando o PostGIS
Consultas simples a ObjetosGeo
Exemplo (cont):
SELECT ID, NAME
FROM ROADS_GEOM
WHERE
GEOM ~= GeomFromText('LINESTRING(191232
243118,191108 243242)',2000);
SELECT ID, NAME
FROM ROADS_GEOM
WHERE
GEOM && GeomFromText('POLYGON((191232
243117,191232 243119,191234 243117,191232 243117))',-1);
CIn/UFPE PostGis
Valria Times
20
Usando o PostGIS
Exportando dados para Shape File
pgsql2shp
Converte uma tabelaGeo do PostgreSQL para shape file ESRI
pgsql2shp [<options>] <database name> <table name>
<database name> nome do BDGeo origem
<tablename> nome da tabela origem
[<options>] opes de configurao
-d: define o arquivo dump para 3D (padro = 2D)
-f <filename>:
<filename>: nome do shape file (padro = nome da tabela).
tabela).
-h <host>:
<host>: host onde est o banco de dados (padro =localhost).
=localhost).
-p <port>:
<port>: porta de conexo (padro = 5432)
5432).
-P <password>:
<password>: especifica a senha.
senha.
-u <user>:
<user>: especifica o usurio.
usurio.
-g <geometry_column> especifica a colunaGeo a ser exportada.
exportada.
CIn/UFPE PostGis
Valria Times
21
Usando o PostGIS
Exportando dados para Shape File (Cont.)
pgsql2shp
Exemplos:
pgsql2shp -u postgres -P postgres teste world94
pgsql2shp -f World94Exp -u postgres -P postgres teste world94
pgsql2shp -f World94Exp -h localhost -p 5432 -u postgres -P
postgres teste world94
CIn/UFPE PostGis
Valria Times
22
Usando o PostGIS
Usando ndices Geogrficos
Melhor opo: usar uma R-Tree implementada no topo do
mecanismo GiST (Generalized Search Tree).
A implementao nativa da R-Tree do PostgreSQL no to robusta
quanto a implementao feita pelo mecanismo GiST
Desde a verso 0.6 do PostgreSQL no recomenda-se a sua R-Tree
Valria Times
23
Usando o PostGIS
Usando ndices Geogrficos (esquema R-Tree)
CIn/UFPE PostGis
Valria Times
24
Usando o PostGIS
Usando ndices Geogrficos
Sintaxe:
CREATE INDEX [indexname] ON [tablename]
USING GIST ( [geometryfield] GIST_GEOMETRY_OPS );
Exemplo:
CREATE INDEX world94_idx ON world94
USING GIST (the_geom GIST_GEOMETRY_OPS);
Valria Times
25
Usando o PostGIS
possvel usufruir do GiST na consulta abaixo?
Selecione as casas que estejam a menos de 1000 metros do
ponto (100000, 200000):
SELECT geometria
FROM casas
WHERE distance(geometria,
GeometryFromText(POINT(100000, 200000), -1)) < 1000;
CIn/UFPE PostGis
Valria Times
26
Usando o PostGIS
possvel usufruir do GiST na consulta abaixo?
Selecione as padarias que estejam a menos de 1000 metros
do ponto (100000, 200000):
SELECT geometria
FROM padarias
WHERE distance(geometria,
GeometryFromText( POINT(100000, 200000), -1)) < 1000;
Valria Times
27
Usando o PostGIS
Pode-se usufruir do ndice usando uma janela
de consulta (query box)
SELECT geometria
FROM padarias
WHERE geometria &&
BOX3D(99000 199000, 101000 201000)::box3d
AND distance(geometria,
GeometryFromText(POINT(100000, 200000), -1)) < 1000;
Valria Times
28
Usando o PostGIS
Principais funes de relacionamento espacial
Distance(geometry, geometry)
Equals(geometry, geometry)
Disjoint(geometry, geometry)
Intersects(geometry, geometry)
Touches(geometry, geometry)
Crosses(geometry, geometry)
Within(geometry, geometry)
Overlaps(geometry, geometry)
Contains(geometry, geometry)
CIn/UFPE PostGis
Valria Times
29
Usando o PostGIS
Principais funes de processamento geomtrico
Centroid(geometry)
Area(geometry)
Length(geometry)
PointOnSurface(geometry)
Boundary(geometry)
Buffer(geometry, double, [integer])
Intersection(geometry, geometry)
Difference(geometry, geometry)
GeomUnion(geometry, geometry)
CIn/UFPE PostGis
Valria Times
30
Usando o PostGIS
Valria Times
31
Usando o PostGIS
Exemplos de consultas espaciais
Qual o comprimento total de todas as estradas? (em km)
SELECT sum ( length ( the_geom ) ) / 1000 AS km_roads
FROM
bc_roads;
bc_municipality
CIn/UFPE PostGis
Valria Times
32
Usando o PostGIS
Exemplos de consultas espaciais
Qual o maior municpio por rea? (em hectares)
SELECT name, area (the_geom ) / 10000 AS hectares
FROM
bc_municipality
Valria Times
33
Usando o PostGIS
Exemplos de consultas espaciais
Crie uma tabela com todas as estradas de Recife?
CREATE TABLE pg_roads as
SELECT
intersection
(r.the_geom,
m.the_geom)
intersection_geom, length ( r.the_geom ) AS rd_orig_length , r.*
AS
CIn/UFPE PostGis
Valria Times
34
Usando o PostGIS
Exemplos de consultas espaciais
Qual o tamanho (em km), da Av. Caxang em Recife?
SELECT sum ( length ( r.the_geom ) ) / 1000 AS kilometers
FROM bc_roads r, bc_municipality m
WHERE r.the_geom && m.the_geom
AND r.name = Caxang '
AND m.name = RECIFE ;
CIn/UFPE PostGis
Valria Times
35
Usando o PostGIS
Exemplos de consultas espaciais com otimizao
Listar o ID das regies vizinhas regio 1234.
SELECT r2.geo_id
FROM regiao r1, regiao r2
WHERE touches (r1.the_geom, r2.the_geom)
AND ( r2.geo_id <> '1234 )
AND ( r1.geo_id = '1234 )
SELECT r2.geo_id
FROM regiao r1, regiao r2
WHERE touches ( r1.the_geom, r2.the_geom )
AND (r1
(r1.the_geom && r2.the_geom) otimizando
AND ( r2.geo_id <> '1234 )
AND ( r1.geo_id = '1234 )
CIn/UFPE PostGis
Valria Times
36
Usando o PostGIS
Exemplos de consultas espaciais com otimizao
Listar o nmero de homicdios ocorridos em Pernambuco.
SELECT COUNT(*)
FROM homicidios h, estados e
WHERE contains (e.the_geom, h.the_geom)
AND e.nome = 'PERNAMBUCO';
SELECT COUNT(*)
FROM homicidios h, estados e
WHERE contains (e.the_geom, h.the_geom)
AND ( e.the_geom && h.the_geom ) otimizando
AND e.nome = PERNAMBUCO ;
CIn/UFPE PostGis
Valria Times
37
Aula Prtica
CIn/UFPE PostGis
Valria Times
38/80
PostGIS Exerccio
Criar uma tabela chamada exemplo_lotes para
armazenar informaes a respeito dos lotes abaixo:
y
13
11
9
L4
7
L3
L5
L1
5
3
L2
x
1
CIn/UFPE PostGis
11
13
Valria Times
15
17
19
21
39
PostGIS Exerccio
Criar uma tabela chamada exemplo_quadras para
armazenar informaes a respeito das quadras abaixo:
13
11
9
Q2
Q1
5
3
1
x
1
CIn/UFPE PostGis
11
13
Valria Times
15
17
19
21
40
PostGIS Exerccio
Responda:
Quais os lotes vizinhos ao lote L4?
Quantos lotes esto dentro da quadra Q1?
Uma pessoa resolveu comprar todos os lotes da quadra
Q1. Criar uma nova geometria L6 que represente toda a
rea dos lotes originais.
Criar uma nica tabela para armazenar os lotes e as
quadras (exemplo_quadras_lotes). Esta tabela, alm do
identificador, possui o tipo do objeto e as geometrias.
Mas, estas ltimas no podem ter sobreposio (a
rea da quadra no deve sobrepor a do lote ?!!).
CIn/UFPE PostGis
Valria Times
41
Projeto de Disciplina
CIn/UFPE PostGis
Valria Times
42/80
Valria Times
43
Descrio de Minimundo
corretos
Modelagem Conceitual
Esquema Relacional
Implementar as seguintes consultas de
verificao de relacionamentos espaciais:
CIn/UFPE PostGis
Valria Times
44
Centroid (geometry)
Area (geometry)
Length (geometry)
PointOnSurface (geometry)
Boundary (geometry)
Buffer (geometry, double, [integer])
Intersection (geometry, geometry)
Difference (geometry, geometry)
GeomUnion (geometry, geometry)
CIn/UFPE PostGis
Valria Times
45
CIn/UFPE PostGis
Valria Times
46