SlideShare uma empresa Scribd logo
Introdução ao
AGENDA
•   Introdução
•   Geometrias Suportadas
•   Estrutura dos Dados
•   Manipulação
•   Indexação
•   Funções Espaciais
•   Exercícios
Introdução
• Desenvolvido pela Research Refractions, em
  2001;

• Adiciona suporte espacial ao banco
  PostgreSQL;

• Segue os padrões de interoperabilidade da
  OGC.
Introdução
• Por padrão o PostgreSQL roda na porta 5432;

• Uma instância pode contêr diversos bancos,
  com diversos schemas e tabelas.
Introdução
Introdução
Instalação

• PostgreSQL

• PostGIS
Instalação do PostgreSQL
Instalação do PostGIS
Instalação

• Diretórios criados durante a instalação:
  – bin - Executáveis
  – include – Arquivos para compilação
  – lib - Bibliotecas
  – share - Extensões
Geometrias Suportadas

• O PostGIS suporta os seguintes tipos de
  Geometrias especificados pela OGC:
  –   Point;
  –   Linestring;
  –   Polygon;
  –   Multipoint;
  –   Multilinestring;
  –   Multipolygon;
  –   GeometryCollection.
Geometrias Suportadas
Estrutura dos Dados

• A estrutura dos dados no PostGIS é definida
  pela padrão OGC SFS (Simple Feature
  Specification).
                        GEOMETRY




             POINT         GEOMETRYCOLLECTION


           LINESTRING          MULTIPOINT

            POLYGON          MULTILINESTRING

                              MULTIPOLYGON
Estrutura dos Dados

• 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 Objeto
      Geográfico
Estrutura dos Dados

• 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)))
Estrutura dos Dados

• SRID (Spatial Referencing System Identifier)
  – Todo Objeto Geográfico deve ter um SRID para ser inserido no banco

• 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)', 4326), ‘Um Lugar');
Estrutura dos Dados

• Para assegurar a consistência dos dados, foram
  criadas as seguintes tabelas:
  – GEOMETRY_COLUMNS
  – SPATIAL_REF_SYS
Estrutura dos Dados

• Na tabela Geometry_Columns consistem as
  informações das tabelas espaciais, da seguinte
  forma:
  –   F_TABLE_CATALOG;
  –   F_TABLE_SCHEMA;
  –   F_TABLE_NAME;
  –   F_GEOMETRY_COLUMN;
  –   COORD_DIMENSION;
  –   SRID;
  –   TYPE;
Estrutura dos Dados

• Na tabela Spatial_Ref_Sys é onde são
  carregadas as informações dos sistemas de
  coordenadas utilizados pelo banco:
  –   SRID;
  –   AUTH_NAME;
  –   AUTH_SRID;
  –   SRTEXT;
  –   PROJ4TEXT;
Manipulação dos Dados

• Conecte no banco:
  – Usuário: postgres
  – Senha: postgres


• Crie uma nova base de dados:
  – Selecione “template_postgis” como template


• Verifique se as tabelas espaciais foram criadas
2.3 – Spatially Enable
     PostgreSQL
Manipulação dos Dados

• Caso o pgsql não esteja instalado, é necessário
  instalá-lo:

createlang plpgsql –d postgis –U postgres
psql -f lwpostgis.sql –d postgis –U postgres
psql -f spatial_ref_sys.sql –d postgis –U postgres
Manipulação dos Dados

• Criando tabelas com dados espaciais:
  CREATE TABLE distritos
  ( cod             SERIAL,
    sigla           VARCHAR(10),
    denominacao     VARCHAR(50),
    PRIMARY KEY (cod)
  );

  SELECT AddGeometryColumn('public',
    'distritos', 'spatial_data', 4326, 'POLYGON',
    2);
Manipulação dos Dados

• Inserindo dados espaciais:

   INSERT INTO distritos
     (sigla, denominacao, spatial_data)
     VALUES('CTR', 'Centro',
     GeometryFromText('Polygon((0 0, 10 0, 10 10, 0
     10, 0 0), (5 5, 5 6, 6 6, 6 5, 5 5))', 4326));
Manipulação dos Dados

• Recuperando dados espaciais:

  SELECT sigla, denominacao, spatial_data
    FROM distritos;



  SELECT sigla, denominacao, ASTEXT(spatial_data)
    FROM distritos;
Manipulação dos Dados

• Importando shapefiles para o PostGIS
  – Shapefile – 3 arquivos:
     • .dbf: Atributos
     • .shp: Geometria
     • .shx: Índice


  – Um shapefile = Uma tabela no banco
Manipulação dos Dados

• shp2pgsql [opts]
  –   -D = Use formato Dump
  –   -i = NÃo use bigint para númericos
  –   -s <#> = Use o SRID especificado
  –   -W = Use o charset especificado
  –   -a = Use em modo append
  –   -I = Criar indíce espacial
Manipulação dos Dados

• shp2pgsql [opts] shapefile tablename
  – shp2pgsql –i –s 3005 bc_pubs.shp bc_pubs >
    bc_pubs.sql
Manipulação dos Dados

• shp2pgsql –i -I -s 3005 bc_hospitals.shp
  bc_hospitals > bc_hospitals.sql
• shp2pgsql -i -I -s 3005 bc_municipality.shp
  bc_municipality > bc_municipality.sql
• shp2pgsql -i -I -s 3005 bc_voting_areas.shp
  bc_voting_areas > bc_voting.sql
• shp2pgsql –i -I -s 3005 bc_pubs.shp bc_pubs >
  bc_pubs.sql
• shp2pgsql –i -I -s 3005 bc_roads.shp bc_roads
  > bc_roads.sql
Manipulação dos Dados

• psql
  –d postgis
  –U postgres
  –f bc_data.sql
Manipulação dos Dados

• Visualizando os dados no uDig
Manipulação dos Dados

• Visualizando os dados no uDig
Manipulação dos Dados

• Visualizando os dados no uDig
Manipulação dos Dados

• Exportando tabelas do PostGIS para Shapefile
  – pgsql2shp [<opções>] <nome do banco> <nome da
    tabela>
  – <nome do banco> nome do banco de origem
  – <nome da tabela> nome da tabela geográfica
Manipulação dos Dados

• Exportando tabelas do PostGIS para Shapefile
  – [<opções>] opções de configuração
      • -d: define o arquivo dump para 3D (padrão = 2D)
      • -f <filename>: nome do shape file (padrão = nome da tabela).
      • -h <host>: host onde está o banco de dados (padrão =localhost).
      • -p <port>: porta de conexão (padrão = 5432).
      • -P <password>: especifica a senha.
      • -u <user>: especifica o usuário.
      • -g <geometry_column> especifica a colunaGeo a ser exportada.
Manipulação dos Dados

• Exportando tabelas do PostGIS para Shapefile
  – Exemplos:
     • pgsql2shp -u postgres -P postgres postgis bc_hospitals

     • pgsql2shp -f Hospitals -u postgres -P postgres postgis
       bc_hospitals

     • pgsql2shp -f Hospitals -h localhost -p 5432 -u postgres -P
       postgres postgis bc_hospitals
Manipulação dos Dados

• No PostGIS a função ST_IsValid() é utilizada
  para verificar se a geometria está de acordo
  com a especificação SFS




              Válido            Inválido
Manipulação dos Dados



• Como resolver o problema? Usando um
  truque… veja:
Indexação

• É a ferramenta que possibilita que o banco de
  dados trabalhe com grandes volumes de
  informação de uma forma mais eficiente;

• O PostgreSQL utiliza 3 tipos de índices:
  – B-Tree
  – R-Tree
  – GiST
Indexação

• O GiST é utilizado para acelerar buscas em
  estruturas irregulares;



• É uma boa prática, sempre após a criação de
  um indíce executar o seguinte comando:
Funções Espaciais

• ST_Area: Retorna a área de um polígono
Funções Espaciais

• ST_Contains: Retorna verdadeiro se A estiver
  contido em B




                (v)                    (f)
Funções Espaciais

• ST_Touches: Retorna verdadeiro se A apenas
  tocar B.




                                       (v)
                (v)
Funções Espaciais

• ST_Intersects: Retorna verdadeiro se houver
  algum tipo de intersecção
Funções Espaciais

• ST_Intersection: Retorna uma geometria que
  representa o conjunto de pontos de intersecção
  das geometrias.
Funções Espaciais

• ST_Transform: Retorna uma nova geometria
  com suas coordenadas transformadas para o
  sistema de referência espacial referenciado pelo
  parâmetro.
Funções Espaciais

• ST_Within: Retorna verdadeiro se a geometria A
  estiver completamente dentro da geometria B.
Funções Espaciais

• ST_DWithin: Retorna verdadeiro se as
  geometrias estão dentro da distância
  especificada.
Funções Espaciais

• ST_Centroid: Retorna o ponto central da
  geometria;
Funções Espaciais

• ST_Buffer: Cria um buffer, os cálculos são
  baseados no Sistema de Coordenadas.
Funções Espaciais

• ST_Union: Retorna uma geometria com a união
  das geometrias;
Funções Espaciais

• ST_Difference: Retorna geometria de A que não
  intersecta com B.
Operadores Espaciais

• && : Retorna TRUE se houver sobreposição;
Operadores Espaciais

• ~ : Retorna TRUE se as geometrias estiver
  completamente contida na outra;
Operadores Espaciais

• ~= : Retorna TRUE se as geometrias
  foram idênticas;
Exercícios

• 1) Qual é o comprimento total das estradas na
  província do BC em km?
• 2) Qual o tamanho da cidade de Prince George,
  em hectares?
• 3) Qual o maior município da Cidade?
• 4) Qual o perímetro da cidade de ‘Vancouver’?
• 5) Qual é a área total das áreas de votação?
Exercícios

• 1) Qual é o comprimento total das estradas na
  província do BC em km?
• SELECT
   Sum( ST_Length( the_geom ) ) / 1000
    AS km_roads
  FROM bc_roads;
Exercícios

• 2) Qual o tamanho da cidade de Prince George,
  em hectares?
• SELECT
   ST_Area(the_geom)/10000
    AS hectares
  FROM bc_municipality
  WHERE
   name = ‘PRINCE GEORGE’;
Exercícios

• 3) Qual o maior município da Cidade?
• SELECT
   name,
   ST_Area(the_geom)/10000
    AS hectares
  FROM bc_municipality
  ORDER BY hectares DESC
  LIMIT 1;
Exercícios

• 4) Qual o perímetro da cidade de ‘Vancouver’?
• SELECT ST_Perimeter(the_geom)
  FROM bc_municipality
  WHERE name = 'VANCOUVER';
Exercícios

• 5) Qual é a área total das áreas de votação?
• SELECT Sum(ST_Area(the_geom))/10000
   AS hectares
  FROM bc_voting_areas;
Exercícios
• 1) Criar views para as tabelas importadas via shapefile, setando o
  SRID para 4326

• CREATE OR REPLACE VIEW vbc_hospitals as
  (
   select gid,
   id,
   authority,
   name,
   st_transform(the_geom,4326) as the_geom
   from bc_hospitals
   );
Exercícios

• 2) Inserir as informações em Geometry_columns
• INSERT INTO geometry_columns (
     f_table_catalog,
     f_table_schema,
     f_table_name,
     f_geometry_column,
     coord_dimension,
     srid,
     type)
     VALUES
('','public','vbc_hospitals','the_geom',2,4326,'POINT');
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)
Junções Espaciais

• Relacione os bares que estão a 250 metros de um
  hospital
• SELECT bc_hospitals.name, bc_pubs.name
  FROM
   bc_hospitals,
   bc_pubs
  WHERE
   ST_DWithin(
     bc_hospitals.the_geom,
     bc_pubs.the_geom,
     250
   );
Junções Espaciais

• Crie uma nova tabela com todas as área de
  votação de Prince George
Junções Espaciais
• CREATE TABLE pg_voting_areas AS
  SELECT
   ST_Intersection(v.the_geom, m.the_geom)
    AS intersection_geom,
   ST_Area(v.the_geom) AS va_area,
   v.*,
   m.name
  FROM
   bc_voting_areas v,
   bc_municipality m
  WHERE
   ST_Intersects(v.the_geom, m.the_geom) AND
   m.name = ‘PRINCE GEORGE’;
Projeção de Coordenadas

• Veja o SRID utilizando a função ST_SRID
• SELECT ST_SRID(the_geom)
  FROM bc_roads
  LIMIT 1;
• O que é “3005”?
• SELECT srtext
  FROM spatial_ref_sys
  WHERE srid = 3005;
• Ah, é “BC Albers”
Projeção de Coordenadas
• PROJCS[“NAD83 / BC Albers",
   GEOGCS["NAD83",
    DATUM["North_American_Datum_1983",
     SPHEROID["GRS 1980",6378137,298.257222101]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.01745329251994328],
    AUTHORITY["EPSG","4269"]],
   PROJECTION["Albers_Conic_Equal_Area"],
   PARAMETER["latitude_of_center",45],
   PARAMETER["longitude_of_center",-126],
   PARAMETER["standard_parallel_1",50],
   PARAMETER["standard_parallel_2",58.5],
   PARAMETER["false_easting",1000000],
   PARAMETER["false_northing",0],
   UNIT["metre",1],
   AUTHORITY["EPSG","3005"]]
Projeção de Coordenadas

• SELECT proj4text
  FROM spatial_ref_sys
  WHERE srid = 3005;
• +proj=aea +ellps=GRS80 +datum=NAD83
  +lat_0=45.0 +lon_0=-126.0
  +lat_1=50.0 +lat_2=58.5
  +x_0=1000000 +y_0=0
• PROJ4 é a biblioteca de reprojeção usada pelo
  PostGIS
Projeção de Coordenadas

• Para usar a reprojeção de coordenadas utiliza-
  se a função ST_Transform()
• SELECT ST_AsText(the_geom)
  FROM bc_roads
  LIMIT 1;
• SELECT
   ST_AsText(
    ST_Transform(the_geom, 4326) )
  FROM bc_roads
  LIMIT 1;
Projeção de Coordenadas

         MULTILINESTRING((
1004687.04355194 594291.053764096,
1004729.74799931 594258.821943696))

                    ST_Transform(the_geom)

         MULTILINESTRING((
    -125.9341 50.3640700000001,
        -125.9335 50.36378))
Exercícios

• 1) Qual o tamanho em km de ‘Douglas St’ em Victoria?
• 2) Quais os dois bares com mais adeptos do Partido
  Verde (campo green) no prazo de 500 metros deles?
• 3) Qual é a latitude do hospital mais a sul, usando o
  SRID 4326?
• 4) Quantos eleitores NDP vivem a 50 metros de 'Simcoe
  St' em Vitória?
• 5) Listar todas as ruas dentro de Victoria
Exercícios

• 1) Qual o tamanho em km de ‘Douglas St’ em Victoria?
• SELECT
   Sum(ST_Length(r.the_geom))/1000
     AS kilometers
  FROM
   bc_roads r,
   bc_municipality m
  WHERE
   ST_Contains(m.the_geom, r.the_geom) AND
   r.name = 'Douglas St' AND
   m.name = 'VICTORIA';
Exercícios

• 2) Quais os dois bares com mais adeptos do Partido
  Verde no prazo de 500 metros deles?
• SELECT
   p.name, p.city,
   Sum(v.green) AS greens
  FROM
   bc_pubs p,
   bc_voting_areas v
  WHERE
   ST_DWithin(v.the_geom, p.the_geom, 500)
  GROUP BY p.name, p.city
  ORDER BY greens DESC LIMIT 2;
Exercícios

• 3) Qual é a latitude do hospital mais a sul,
  usando o SRID 4326?
• SELECT ST_Y(ST_Transform(the_geom,4326))
  AS latitude
  FROM bc_hospitals
  ORDER BY latitude ASC
  LIMIT 1;
Exercícios

• 4) Quantos eleitores NDP vivem a 50 metros de 'Simcoe
  St' em Vitória?
• SELECT
   Sum(v.ndp) AS ndp
  FROM
   bc_voting_areas v, bc_municipality m,
   bc_roads r
  WHERE
   ST_DWithin(r.the_geom, v.the_geom, 50) AND
   ST_Contains(m.the_geom, r.the_geom) AND
   r.name = 'Simcoe St' AND
   m.name = 'VICTORIA';
Exercícios

• 5) Listar todas as ruas dentro de Victoria

• SELECT r.gid, r.the_geom
  FROM
   bc_roads r,
   bc_municipality m
  WHERE
   ST_Contains(m.the_geom, r.the_geom)
  AND m.name = ‘VICTORIA’
Obrigado!


       Fernando Quadro
contato@fernandoquadro.com.br

Mais conteúdo relacionado

PDF
What is Appium? Edureka
PDF
Ford Maverick - Hot Wheels
PDF
Getting started with appium
PPT
1. Sentimentos e características pessoais
PDF
Introdução ao GeoServer 2.0
ODP
Geo server pt_br
PPT
O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito
PDF
PGDAY - Palestra PostGIS + PgRouting
What is Appium? Edureka
Ford Maverick - Hot Wheels
Getting started with appium
1. Sentimentos e características pessoais
Introdução ao GeoServer 2.0
Geo server pt_br
O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito
PGDAY - Palestra PostGIS + PgRouting

Destaque (20)

PPTX
Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...
PPT
Geoprocessamento aula unip
PPTX
SLIDE GEOMETRIA - 7° ANO
PDF
Apostila de geometria plana exercícios resolvidos - crbrasil
ODP
Oficina postgresql basico_consegi2010
ODP
PostGIS - Conhecendo o Elefante Geoespacial
PDF
OL4JSF - Latinoware 2010
PDF
Demoiselle Spatial Latinoware 2011
PDF
PPT
Desenvolvendo aplicações geográficas com Software Livre
PPT
Introdução ao OpenLayers
PDF
Por dentro do GeoServer
PDF
Portal de Mapas Itaipu – Democratizando a informação geográfica espacial com ...
PDF
Segurança cibernética e software livre - Lourival Araujo - TchêLinux Uruguaiana
PDF
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
PDF
Rafael Garcia - Yii Framework, principais características e em ação
ODP
Yii framework 2 exemplo de uma aplicação-parte2
ODP
Yii framework 2 exemplo de uma aplicação-parte1
PDF
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...
Geoprocessamento aula unip
SLIDE GEOMETRIA - 7° ANO
Apostila de geometria plana exercícios resolvidos - crbrasil
Oficina postgresql basico_consegi2010
PostGIS - Conhecendo o Elefante Geoespacial
OL4JSF - Latinoware 2010
Demoiselle Spatial Latinoware 2011
Desenvolvendo aplicações geográficas com Software Livre
Introdução ao OpenLayers
Por dentro do GeoServer
Portal de Mapas Itaipu – Democratizando a informação geográfica espacial com ...
Segurança cibernética e software livre - Lourival Araujo - TchêLinux Uruguaiana
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
Rafael Garcia - Yii Framework, principais características e em ação
Yii framework 2 exemplo de uma aplicação-parte2
Yii framework 2 exemplo de uma aplicação-parte1
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Anúncio

Semelhante a Introdução ao PostGIS (20)

PPTX
PDF
Banco de Dados Espaciais
PPTX
Banco de dados geográfico - Aula de Encerramento
PPTX
Bancos de Dados Geográficos
PDF
Tutorial_PostGis
PDF
Tecnicas avancadas de_bases_de_dados_bas (2)
PDF
Sql4 devs geodatabases
PDF
Introdução Postgis
KEY
Geo on Rails - Um guia para manter o seu cabelo.
PDF
Disponibilização de Informações Geográficas em um Ambiente Computacional Util...
PDF
Apresentação SGDBs Espaciais
PPT
GIS em 3 horas
PPTX
Geometrias
PDF
Banco de dados geográficos
PDF
Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...
PDF
Dados espaciais em R (2020)
PDF
Tutorial bdgeo geobrasil2006
PPT
Geoprocessamento
PDF
Programação em Phyton no Qgis - Geoproscessamento
PDF
Instalando e conectando banco de dados PostgreSQL + extensão espacial PostGIS...
Banco de Dados Espaciais
Banco de dados geográfico - Aula de Encerramento
Bancos de Dados Geográficos
Tutorial_PostGis
Tecnicas avancadas de_bases_de_dados_bas (2)
Sql4 devs geodatabases
Introdução Postgis
Geo on Rails - Um guia para manter o seu cabelo.
Disponibilização de Informações Geográficas em um Ambiente Computacional Util...
Apresentação SGDBs Espaciais
GIS em 3 horas
Geometrias
Banco de dados geográficos
Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...
Dados espaciais em R (2020)
Tutorial bdgeo geobrasil2006
Geoprocessamento
Programação em Phyton no Qgis - Geoproscessamento
Instalando e conectando banco de dados PostgreSQL + extensão espacial PostGIS...
Anúncio

Último (8)

PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Mecânico de Manutenção de Equipamentos.pptx
PPTX
Arquitetura de computadores - Memórias Secundárias
Viasol Energia Solar -Soluções para geração e economia de energia
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Manejo integrado de pragas na cultura do algodão
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Mecânico de Manutenção de Equipamentos.pptx
Arquitetura de computadores - Memórias Secundárias

Introdução ao PostGIS

  • 2. AGENDA • Introdução • Geometrias Suportadas • Estrutura dos Dados • Manipulação • Indexação • Funções Espaciais • Exercícios
  • 3. Introdução • Desenvolvido pela Research Refractions, em 2001; • Adiciona suporte espacial ao banco PostgreSQL; • Segue os padrões de interoperabilidade da OGC.
  • 4. Introdução • Por padrão o PostgreSQL roda na porta 5432; • Uma instância pode contêr diversos bancos, com diversos schemas e tabelas.
  • 10. Instalação • Diretórios criados durante a instalação: – bin - Executáveis – include – Arquivos para compilação – lib - Bibliotecas – share - Extensões
  • 11. Geometrias Suportadas • O PostGIS suporta os seguintes tipos de Geometrias especificados pela OGC: – Point; – Linestring; – Polygon; – Multipoint; – Multilinestring; – Multipolygon; – GeometryCollection.
  • 13. Estrutura dos Dados • A estrutura dos dados no PostGIS é definida pela padrão OGC SFS (Simple Feature Specification). GEOMETRY POINT GEOMETRYCOLLECTION LINESTRING MULTIPOINT POLYGON MULTILINESTRING MULTIPOLYGON
  • 14. Estrutura dos Dados • 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 Objeto Geográfico
  • 15. Estrutura dos Dados • 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)))
  • 16. Estrutura dos Dados • SRID (Spatial Referencing System Identifier) – Todo Objeto Geográfico deve ter um SRID para ser inserido no banco • 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)', 4326), ‘Um Lugar');
  • 17. Estrutura dos Dados • Para assegurar a consistência dos dados, foram criadas as seguintes tabelas: – GEOMETRY_COLUMNS – SPATIAL_REF_SYS
  • 18. Estrutura dos Dados • Na tabela Geometry_Columns consistem as informações das tabelas espaciais, da seguinte forma: – F_TABLE_CATALOG; – F_TABLE_SCHEMA; – F_TABLE_NAME; – F_GEOMETRY_COLUMN; – COORD_DIMENSION; – SRID; – TYPE;
  • 19. Estrutura dos Dados • Na tabela Spatial_Ref_Sys é onde são carregadas as informações dos sistemas de coordenadas utilizados pelo banco: – SRID; – AUTH_NAME; – AUTH_SRID; – SRTEXT; – PROJ4TEXT;
  • 20. Manipulação dos Dados • Conecte no banco: – Usuário: postgres – Senha: postgres • Crie uma nova base de dados: – Selecione “template_postgis” como template • Verifique se as tabelas espaciais foram criadas
  • 21. 2.3 – Spatially Enable PostgreSQL
  • 22. Manipulação dos Dados • Caso o pgsql não esteja instalado, é necessário instalá-lo: createlang plpgsql –d postgis –U postgres psql -f lwpostgis.sql –d postgis –U postgres psql -f spatial_ref_sys.sql –d postgis –U postgres
  • 23. Manipulação dos Dados • Criando tabelas com dados espaciais: CREATE TABLE distritos ( cod SERIAL, sigla VARCHAR(10), denominacao VARCHAR(50), PRIMARY KEY (cod) ); SELECT AddGeometryColumn('public', 'distritos', 'spatial_data', 4326, 'POLYGON', 2);
  • 24. Manipulação dos Dados • Inserindo dados espaciais: INSERT INTO distritos (sigla, denominacao, spatial_data) VALUES('CTR', 'Centro', GeometryFromText('Polygon((0 0, 10 0, 10 10, 0 10, 0 0), (5 5, 5 6, 6 6, 6 5, 5 5))', 4326));
  • 25. Manipulação dos Dados • Recuperando dados espaciais: SELECT sigla, denominacao, spatial_data FROM distritos; SELECT sigla, denominacao, ASTEXT(spatial_data) FROM distritos;
  • 26. Manipulação dos Dados • Importando shapefiles para o PostGIS – Shapefile – 3 arquivos: • .dbf: Atributos • .shp: Geometria • .shx: Índice – Um shapefile = Uma tabela no banco
  • 27. Manipulação dos Dados • shp2pgsql [opts] – -D = Use formato Dump – -i = NÃo use bigint para númericos – -s <#> = Use o SRID especificado – -W = Use o charset especificado – -a = Use em modo append – -I = Criar indíce espacial
  • 28. Manipulação dos Dados • shp2pgsql [opts] shapefile tablename – shp2pgsql –i –s 3005 bc_pubs.shp bc_pubs > bc_pubs.sql
  • 29. Manipulação dos Dados • shp2pgsql –i -I -s 3005 bc_hospitals.shp bc_hospitals > bc_hospitals.sql • shp2pgsql -i -I -s 3005 bc_municipality.shp bc_municipality > bc_municipality.sql • shp2pgsql -i -I -s 3005 bc_voting_areas.shp bc_voting_areas > bc_voting.sql • shp2pgsql –i -I -s 3005 bc_pubs.shp bc_pubs > bc_pubs.sql • shp2pgsql –i -I -s 3005 bc_roads.shp bc_roads > bc_roads.sql
  • 30. Manipulação dos Dados • psql –d postgis –U postgres –f bc_data.sql
  • 31. Manipulação dos Dados • Visualizando os dados no uDig
  • 32. Manipulação dos Dados • Visualizando os dados no uDig
  • 33. Manipulação dos Dados • Visualizando os dados no uDig
  • 34. Manipulação dos Dados • Exportando tabelas do PostGIS para Shapefile – pgsql2shp [<opções>] <nome do banco> <nome da tabela> – <nome do banco> nome do banco de origem – <nome da tabela> nome da tabela geográfica
  • 35. Manipulação dos Dados • Exportando tabelas do PostGIS para Shapefile – [<opções>] opções de configuração • -d: define o arquivo dump para 3D (padrão = 2D) • -f <filename>: nome do shape file (padrão = nome da tabela). • -h <host>: host onde está o banco de dados (padrão =localhost). • -p <port>: porta de conexão (padrão = 5432). • -P <password>: especifica a senha. • -u <user>: especifica o usuário. • -g <geometry_column> especifica a colunaGeo a ser exportada.
  • 36. Manipulação dos Dados • Exportando tabelas do PostGIS para Shapefile – Exemplos: • pgsql2shp -u postgres -P postgres postgis bc_hospitals • pgsql2shp -f Hospitals -u postgres -P postgres postgis bc_hospitals • pgsql2shp -f Hospitals -h localhost -p 5432 -u postgres -P postgres postgis bc_hospitals
  • 37. Manipulação dos Dados • No PostGIS a função ST_IsValid() é utilizada para verificar se a geometria está de acordo com a especificação SFS Válido Inválido
  • 38. Manipulação dos Dados • Como resolver o problema? Usando um truque… veja:
  • 39. Indexação • É a ferramenta que possibilita que o banco de dados trabalhe com grandes volumes de informação de uma forma mais eficiente; • O PostgreSQL utiliza 3 tipos de índices: – B-Tree – R-Tree – GiST
  • 40. Indexação • O GiST é utilizado para acelerar buscas em estruturas irregulares; • É uma boa prática, sempre após a criação de um indíce executar o seguinte comando:
  • 41. Funções Espaciais • ST_Area: Retorna a área de um polígono
  • 42. Funções Espaciais • ST_Contains: Retorna verdadeiro se A estiver contido em B (v) (f)
  • 43. Funções Espaciais • ST_Touches: Retorna verdadeiro se A apenas tocar B. (v) (v)
  • 44. Funções Espaciais • ST_Intersects: Retorna verdadeiro se houver algum tipo de intersecção
  • 45. Funções Espaciais • ST_Intersection: Retorna uma geometria que representa o conjunto de pontos de intersecção das geometrias.
  • 46. Funções Espaciais • ST_Transform: Retorna uma nova geometria com suas coordenadas transformadas para o sistema de referência espacial referenciado pelo parâmetro.
  • 47. Funções Espaciais • ST_Within: Retorna verdadeiro se a geometria A estiver completamente dentro da geometria B.
  • 48. Funções Espaciais • ST_DWithin: Retorna verdadeiro se as geometrias estão dentro da distância especificada.
  • 49. Funções Espaciais • ST_Centroid: Retorna o ponto central da geometria;
  • 50. Funções Espaciais • ST_Buffer: Cria um buffer, os cálculos são baseados no Sistema de Coordenadas.
  • 51. Funções Espaciais • ST_Union: Retorna uma geometria com a união das geometrias;
  • 52. Funções Espaciais • ST_Difference: Retorna geometria de A que não intersecta com B.
  • 53. Operadores Espaciais • && : Retorna TRUE se houver sobreposição;
  • 54. Operadores Espaciais • ~ : Retorna TRUE se as geometrias estiver completamente contida na outra;
  • 55. Operadores Espaciais • ~= : Retorna TRUE se as geometrias foram idênticas;
  • 56. Exercícios • 1) Qual é o comprimento total das estradas na província do BC em km? • 2) Qual o tamanho da cidade de Prince George, em hectares? • 3) Qual o maior município da Cidade? • 4) Qual o perímetro da cidade de ‘Vancouver’? • 5) Qual é a área total das áreas de votação?
  • 57. Exercícios • 1) Qual é o comprimento total das estradas na província do BC em km? • SELECT Sum( ST_Length( the_geom ) ) / 1000 AS km_roads FROM bc_roads;
  • 58. Exercícios • 2) Qual o tamanho da cidade de Prince George, em hectares? • SELECT ST_Area(the_geom)/10000 AS hectares FROM bc_municipality WHERE name = ‘PRINCE GEORGE’;
  • 59. Exercícios • 3) Qual o maior município da Cidade? • SELECT name, ST_Area(the_geom)/10000 AS hectares FROM bc_municipality ORDER BY hectares DESC LIMIT 1;
  • 60. Exercícios • 4) Qual o perímetro da cidade de ‘Vancouver’? • SELECT ST_Perimeter(the_geom) FROM bc_municipality WHERE name = 'VANCOUVER';
  • 61. Exercícios • 5) Qual é a área total das áreas de votação? • SELECT Sum(ST_Area(the_geom))/10000 AS hectares FROM bc_voting_areas;
  • 62. Exercícios • 1) Criar views para as tabelas importadas via shapefile, setando o SRID para 4326 • CREATE OR REPLACE VIEW vbc_hospitals as ( select gid, id, authority, name, st_transform(the_geom,4326) as the_geom from bc_hospitals );
  • 63. Exercícios • 2) Inserir as informações em Geometry_columns • INSERT INTO geometry_columns ( f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES ('','public','vbc_hospitals','the_geom',2,4326,'POINT');
  • 64. 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)
  • 65. Junções Espaciais • Relacione os bares que estão a 250 metros de um hospital • SELECT bc_hospitals.name, bc_pubs.name FROM bc_hospitals, bc_pubs WHERE ST_DWithin( bc_hospitals.the_geom, bc_pubs.the_geom, 250 );
  • 66. Junções Espaciais • Crie uma nova tabela com todas as área de votação de Prince George
  • 67. Junções Espaciais • CREATE TABLE pg_voting_areas AS SELECT ST_Intersection(v.the_geom, m.the_geom) AS intersection_geom, ST_Area(v.the_geom) AS va_area, v.*, m.name FROM bc_voting_areas v, bc_municipality m WHERE ST_Intersects(v.the_geom, m.the_geom) AND m.name = ‘PRINCE GEORGE’;
  • 68. Projeção de Coordenadas • Veja o SRID utilizando a função ST_SRID • SELECT ST_SRID(the_geom) FROM bc_roads LIMIT 1; • O que é “3005”? • SELECT srtext FROM spatial_ref_sys WHERE srid = 3005; • Ah, é “BC Albers”
  • 69. Projeção de Coordenadas • PROJCS[“NAD83 / BC Albers", GEOGCS["NAD83", DATUM["North_American_Datum_1983", SPHEROID["GRS 1980",6378137,298.257222101]], PRIMEM["Greenwich",0], UNIT["degree",0.01745329251994328], AUTHORITY["EPSG","4269"]], PROJECTION["Albers_Conic_Equal_Area"], PARAMETER["latitude_of_center",45], PARAMETER["longitude_of_center",-126], PARAMETER["standard_parallel_1",50], PARAMETER["standard_parallel_2",58.5], PARAMETER["false_easting",1000000], PARAMETER["false_northing",0], UNIT["metre",1], AUTHORITY["EPSG","3005"]]
  • 70. Projeção de Coordenadas • SELECT proj4text FROM spatial_ref_sys WHERE srid = 3005; • +proj=aea +ellps=GRS80 +datum=NAD83 +lat_0=45.0 +lon_0=-126.0 +lat_1=50.0 +lat_2=58.5 +x_0=1000000 +y_0=0 • PROJ4 é a biblioteca de reprojeção usada pelo PostGIS
  • 71. Projeção de Coordenadas • Para usar a reprojeção de coordenadas utiliza- se a função ST_Transform() • SELECT ST_AsText(the_geom) FROM bc_roads LIMIT 1; • SELECT ST_AsText( ST_Transform(the_geom, 4326) ) FROM bc_roads LIMIT 1;
  • 72. Projeção de Coordenadas MULTILINESTRING(( 1004687.04355194 594291.053764096, 1004729.74799931 594258.821943696)) ST_Transform(the_geom) MULTILINESTRING(( -125.9341 50.3640700000001, -125.9335 50.36378))
  • 73. Exercícios • 1) Qual o tamanho em km de ‘Douglas St’ em Victoria? • 2) Quais os dois bares com mais adeptos do Partido Verde (campo green) no prazo de 500 metros deles? • 3) Qual é a latitude do hospital mais a sul, usando o SRID 4326? • 4) Quantos eleitores NDP vivem a 50 metros de 'Simcoe St' em Vitória? • 5) Listar todas as ruas dentro de Victoria
  • 74. Exercícios • 1) Qual o tamanho em km de ‘Douglas St’ em Victoria? • SELECT Sum(ST_Length(r.the_geom))/1000 AS kilometers FROM bc_roads r, bc_municipality m WHERE ST_Contains(m.the_geom, r.the_geom) AND r.name = 'Douglas St' AND m.name = 'VICTORIA';
  • 75. Exercícios • 2) Quais os dois bares com mais adeptos do Partido Verde no prazo de 500 metros deles? • SELECT p.name, p.city, Sum(v.green) AS greens FROM bc_pubs p, bc_voting_areas v WHERE ST_DWithin(v.the_geom, p.the_geom, 500) GROUP BY p.name, p.city ORDER BY greens DESC LIMIT 2;
  • 76. Exercícios • 3) Qual é a latitude do hospital mais a sul, usando o SRID 4326? • SELECT ST_Y(ST_Transform(the_geom,4326)) AS latitude FROM bc_hospitals ORDER BY latitude ASC LIMIT 1;
  • 77. Exercícios • 4) Quantos eleitores NDP vivem a 50 metros de 'Simcoe St' em Vitória? • SELECT Sum(v.ndp) AS ndp FROM bc_voting_areas v, bc_municipality m, bc_roads r WHERE ST_DWithin(r.the_geom, v.the_geom, 50) AND ST_Contains(m.the_geom, r.the_geom) AND r.name = 'Simcoe St' AND m.name = 'VICTORIA';
  • 78. Exercícios • 5) Listar todas as ruas dentro de Victoria • SELECT r.gid, r.the_geom FROM bc_roads r, bc_municipality m WHERE ST_Contains(m.the_geom, r.the_geom) AND m.name = ‘VICTORIA’
  • 79. Obrigado! Fernando Quadro contato@fernandoquadro.com.br