Você está na página 1de 74

Parte II – GeoServer e PostGIS

Hugo Feitosa de Figueirêdo


POSTGIS
PostGIS-PostgreSQL
• Extensão espacial para o PostgreSQL
– Download: http://
postgis.refractions.net/download/
– Manual: http://postgis.refractions.net/docs/
PostGIS

• PostGIS segue o padrão OpenGIS


– Provê suporte para todos objetos e funções da
especificação SFS (Simple Features for SQL)
GEOMETRY

POINT GEOMETRYCOLLECTION

LINESTRING MULTIPOINT

POLYGON MULTILINESTRING

MULTIPOLYGON

4
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
ObjetoGeo

5
Representação Textual das Geometrias
• Point: (0 0 0)
• LineString: (0 0, 1 1, 2 2)
• Polygon: ((0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0), ( 1 0
0, ...), ...)
• MultiPoint: (0 0 0, 4 4 0)
• MultiLineString: ((0 0 0, 1 1 0, 2 2 0), (4 4 0, 5 5 0, 6 6
0))
• MultiPolygon: (((0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0),
(...), ...), ...)
• GeometryCollection: (POINT(2 2 0), LINESTRING((4 4
0, 9 9 0))
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) );

– 2) Adicionar uma coluna espacial ("AddGeometryColumn“)


• Sintaxe:
– AddGeometryColumn([<schema_name>],<table_name>,<column_name>,
<srid>, <type>,<dimension>);
• Exemplo:
– SELECT AddGeometryColumn('public', 'roads_geom', 'geom', 2000,
'LINESTRING', 2);
– SELECT AddGeometryColumn( 'roads_geom', 'geom', 2000,
'LINESTRING', 2); 7
Sistema de Referência
• SRID (Spatial Referencing System Identifier)
– Todo Objeto Geográfico 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 Geográfico


• INSERT INTO SpatialTable (THE_GEOM, THE_NAME) VALUES
(GeomFromText('POINT(-126.4 45.32)', 2000), ‘Um Lugar');
8
Introdução ao PostGIS
• A especificação SFS/OpenGIS define tipos, funções
e metadados para manipular ObjetosGeo

• As principais tabelas de metadados são:


– SPATIAL_REF_SYS  guarda os IDs e as descrições
textuais do sistema de coordenadas usados no BDGeo

– GEOMETRY_COLUMNS  guarda informações do


esquema Geográfico e das propriedades dos ObjetosGeo
9
Tabela de Sistemas de Referência
Exemplo de spatial_ref_sys
PROJCS["NAD83 / UTM Zone 10N",
GEOGCS["NAD83",
DATUM["North_American_Datum_1983",
SPHEROID["GRS 1980",6378137,298.257222101]
],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]
],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-123],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1]
]
Tabela de Metadados
Inserção de Dados
INSERT INTO bairrossp (bairro, spatial_data)
VALUES('JARDIM DOS EUCALIPTOS',
GeometryFromText('POINT(321588.628426 7351166.969244)',
-1));

INSERT INTO drenagemsp (classe, spatial_data)VALUES('RIOS',


GeometryFromText('LINESTRING(344467.895137 7401824.476217,
344481.584686 7401824.518728, 344492.194756 7401825.716359,
…)’, -1));

INSERT INTO distritossp (denominacao, sigla, spatial_data)


VALUES('MARSILAC', ‘MAR’,
GeometryFromText('POLYGON((335589.530575 7356020.721956,
335773.784959 7355873.470174, …))', -1));
Inserção de Dados

Carregando dados de um Shapefile:

# shp2pgsql shaperoads myschema.roadstable |


psql -d roadsdb
Indíces
• Sintaxe: CREATE INDEX sp_idx_name ON nome_tabela
USING GIST (coluna_geometrica GIST_GEOMETRY_OPS);
• Depois de criar os índices é boa prática executar:
VACUUM ANALYZE [table_name] [column_name]
para liberar tuplas obsoletas/excluídas
• Exemplos:
CREATE INDEX sp_idx_bairros ON bairrossp USING GIST
(SPATIAL_DATA GIST_GEOMETRY_OPS)
CREATE INDEX sp_idx_bairros ON distritossp USING GIST
(SPATIAL_DATA GIST_GEOMETRY_OPS)
Indíces
• Forçando o uso do index numa consulta
através do operador &&::
SELECT * FROM grande_sp
WHERE 'BOX3D(438164.882699
7435582.150681,
275421.967006 7337341.000355)'::box3d
&& spatial_data);
Consultas
• Operadores topológicos
– equals(geometry, geometry)
– disjoint(geometry, geometry)
– intersects(geometry, geometry)
– touches(geometry, geometry)
– crosses(geometry, geometry)
– within(geometry, geometry)
– overlaps(geometry, geometry)
– contains(geometry, geometry)
– relate(geometry, geometry):
Consultas

• Operador de construção de mapas de distância:


buffer(geometry, double, [integer])
• Operador para construção do Fecho Convexo:
convexhull(geometry)
• Operadores de conjunto:
– intersection(geometry, geometry)
– geomUnion(geometry, geometry)
– difference(geometry, geometry)
Consultas

• Operadores Métricos:
– distance(geometry,geometry)
– area(geometry)
• Centróide de geometrias:
– Centroid(geometry)
• •Validação (verifica se a geometria possui
auto-interseções):
– isSimple(geometry)
Consultas

• Consulta 1:
SELECT d2.nomemunicp
FROM grande_sp d1, grande_sp d2
WHERE touches(d1.spatial_data,
d2.spatial_data)
AND (d2.nomemunicp <> 'SAO PAULO')
AND (d1.nomemunicp = 'SAO PAULO');
Consulta Usando Índice Espacial

SELECT d2.nomemunicp
FROM distritossp d1, distritossp d2
WHERE touches(d1.spatial_data,
d2.spatial_data)
AND (d2.nomemunicp <> 'SAO PAULO')
AND (d1.spatial_data && d2.spatial_data)
AND (d1.nomemunicp = 'SAO PAULO');
Consulta Usando Índice Espacial

SELECT grande_sp.nomemunicp
FROM distritossp, grande_sp
WHERE touches(distritossp.spatial_data,
grande_sp.spatial_data)
AND (distritossp.spatial_data &&
grande_sp.spatial_data)
AND (distritossp.denominacao =
'ANHANGUERA');
Consulta Usando Índice Espacial

SELECT COUNT(*)
FROM bairrossp pt, distritossp pol
WHERE contains(pol.spatial_data,
pt.spatial_data)
AND (pol.spatial_data && pt.spatial_data)
AND pol.denominacao = 'GRAJAU';
Exemplo de Consulta

SELECT grande_sp.nomemunicp
FROM grande_sp, drenagemsp
WHERE
intersects(buffer(drenagemsp.spatial_da
ta, 3000), grande_sp.spatial_data)
AND drenagemsp.cod = 59;
Exemplo de Consulta

SELECT b1.bairro
FROM bairrossp b1, bairrossp b2
WHERE (distance(b1.spatial_data,
b2.spatial_data)
< 3000)
AND b1.bairro <> 'BOACAVA'
AND b2.bairro = 'BOACAVA' order by b1.bairro;
GeoServer
• Programa de código aberto escrito em Java
– Desenvolvido, testado e mantido por um diverso grupo
de indivíduos e organizações
– Software livre (licença GNU - General Public License)
• Permite que usuários compartilhem e editem dados
geoespaciais
• Projetado para ser interoperável
– Publica dados da várias fontes de dados espaciais
(PostGIS, Oracle, SQL Server, Shapefile, etc)
– Utiliza padrões abertos (WMS, WFS, WCS, GML)
História
• GeoServer começou em 2001 pelo TOOP (The
Open Planning Project)
• TOOP tinha como objetivo a criação de um
conjunto de ferramentas para tornar o governo
mais transparente
• O GeoServer foi criado para compartilhamento
de dados espaciais
• O GeoServer foi criado utilizando a ferramenta
de SIG GeoTools
Instalação e Configuração
• Binário independente de Sistema Operacional
– Instalação rápida e não necessita de programas
adicionais
– Aplicação GeoServer embutido no Jetty (um leve
servidor de aplicações Web)
– Baixar o arquivo apropriado na página de
downloads
– Descompacte o arquivo baixado para a pasta onde
será instalado (c:\Arquivos de Programa\GeoServer)
Instalação e Configuração
• Binário independente de Sistema Operacional (cont.)
– Atribuir variáveis de ambiente
• Painel de Controle -> Sistema -> Avançado -> Variáveis de Ambiente
• Abaixo de “Variáveis de Sistema” Clique em “Nova”
• Para nome da variável digite “GEOSERVER_HOME”. Para valor da
variável digite o caminho para seu GeoServer (c:\Arquivos de
Programa\GeoServer)
– Execute o arquivo %GEOSERVER_HOME%\bin\startup.bat
– Acesse em um navegador Web http://localhost:8080/geoserver
– Para parar o serviço execute %GEOSERVER_HOME
%\bin\shutdown.bat
Instalação e Configuração
• Web archive (WAR)
– Necessita de um servidor de aplicações Web (Apache
Tomcat)
– Maior escalabilidade e desempenho
– Baixe o arquivo geoserver.war na página de downloads
do GeoServer
– Copie o arquivo para o diretório de aplicações Web do
seu servidor de aplicações Web (c:\tomcat\webapps\)
– Uma reinicialização do seu servidor de aplicações Web
pode ser necessário
Administração
• Ferramenta de administração Web do
GeoServer
• http://localhost:8080/geoserver/web
Administração
• Para acessar as configurações é necessário
autenticar-se
• O nome de usuário padrão é “admin” e a
senha é “geoserver”
Administração
• Menu lateral com todas as
funcionalidade da ferramenta de
administração
• Server: situação do servidor e
configurações gerais
• Services: configurações dos serviços
Web
• Data: Cadastro de informações dos
dados espaciais
• Security: Configurações de segurança
Server – Server Status
Server – Contact Information
Server – Global Settings
Server – JAI Settings
Server – About GeoServer
Services
• A seção de serviço é para usuários avançados que
precisam configurar os protocolos de requisição
• A página de WCS gerencia informações de
metadados, comuns para requisições WCS, WMS
e WFS
• A página de WFS permite a configuração de
feições, níveis de serviço e saída de GML
• A página de WMS configura as opções de raster e
SVG
Data
• Cada subseção de data permite adicionar,
editar e remover o tipo de data
correspondente a subseção
• Todos os tipos de dados possuem fluxo de
trabalho similares
Style
Layers
Stores
Demos
• Possui exemplos de requisições WMS, WCS e WFS
• Possui uma lista de informações sobre os sistemas de
referência espacial
• Não é necessário estar autenticado para acessar essa
página
Layers Preview
• Permite a visualização das camadas em vários
formatos de saída (OpenLayers, KML, GML)
GEOSERVER VECTOR
Adicionando Shapefile
• Adicionando Shapefile
– Baixe o arquivo nyc_roads.zip
– Descompacte nyc_roads.zip no diretório
%GEOSERVER_HOME%\data_dir\data\
Criar Workspace
• Criar workspace com um nome e uma URI
qualquer
Criar Store

Fonte de Dados do
tipo ShapeFile
Criar Fonte de Dados ShapeFile

Caminho do
arquivo ShapeFile
Configuração de Camada
• Após criar a fonte de dados, você será
direcionado para a seleção de camada
• Selecione a única camada existente
Publicar Camadas
Visualizar a Camada
• Acesse a função “Layer Preview” e clique em
OpenLayers na camada publicada
Visualizando a Camada
• Visualização da camada
publicada no
OpenLayers
Adicionando uma Tabela PostGIS
• Crie uma tabela PostGIS
• No GeoServer, crie uma fonte de dados do
tipo “PostGIS NG”
Configurando a Fonte de Dados PostGIS

• Adicione um nome para a fonte de dados e


selecione um Workspace
Configurando a Fonte de Dados PostGIS

• Configure a conexão
com o banco de dados
PostGIS
Configuração de Camada
1. Acesse Data -> Layers
2. Selecione a fonte de dados criada
3. Selecione a tabela criada no banco PostGIS
4. Configure a camada e publique (similar a
camada ShapeFile)
5. Visualize no “Layer Preview”
GEOSERVER RASTER
GeoServer Raster
• GeoServer dá suporte aos seguintes formatos
Raster
– ArcGrid
– GeoTIFF
– Gtopo30
– ImageMosaic
– WorldImage
GeoTiFF
• GeoTIFF é uma imagem TIFF georreferenciada
Configurando uma Fonte de Dados GeoTIFF

• Especificar o caminho
da imagem no diretório
do GeoServer
WorldImage
• Imagem com um arquivo de dados espaciais
anexado (jpg + jgw, tiff + tfw)
Configurando uma Fonte de Dados
WorldImage
• Especificar o caminho
da imagem no diretório
do GeoServer
ImagePyramid
• GeoServer trabalha com imagens TIFF com até 2GB
eficientemente
• Acima de 2GB é recomendado utilizar o algoritmo do
pirâmide
• Uma pirâmide de imagem constrói múltiplos
mosaicos de imagens
• Cada mosaico serve para um nível de zoom diferente
• É necessário instalar uma extensão no GeoServer
para adicionar pirâmides de imagens
Instalando ImagePyramid
1. Baixe a extensão ImagePyramid na página de
downloads no GeoServer
2. Descompacte o conteúdo do arquivo para
%GEOSERVER_HOME%/WEB-INF/lib
3. Reinicie o servidor de aplicações Web
4. Após instalado, aparecerá a opção
ImagePyramid na lista de fonte de dados
Raster
ImagePyramid
• Especificar o
caminho do
diretório que
possui a pirâmide
de imagens
Visualizando a Camada
PROJETO DE SIG WEB
Pilha de Camadas de um SIG
• Dados
– Banco de Dados Espaciais, Shapefile
• Servidor de SIG
– Serviços Web, Mediador
• Cliente SIG
– Análise, Web, Desktop, Mapping
Pilha de um SIG Proprietário

• ArcView
Cliente SIG

• ArcIMS
Servidor SIG

• ArcSDE
Dados Espaciais
Pilha de um SIG Aberto

• OpenLayers
Cliente SIG
• MapServer
Servidor SIG • GeoServer

• MySQL
Dados Espaciais • PostGIS
Vamos construir um SIG Aberto!!!

Você também pode gostar