postgis - anderson medeiros · o material contido nesta apostila é isento de garantias e o seu uso...

57
PostGIS Versão 1.0.0

Upload: buique

Post on 17-Dec-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

PostGISVersão 1.0.0

Sumário

I Sobre essa Apostila 2

II Informações Básicas 4

III GNU Free Documentation License 9

IV PostGIS 18

1 O que é o PostGIS 19

2 Plano de ensino 202.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 Introdução 233.1 Lição 1 - Introdução ao PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.1.1 PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.2 Padrões OpenGIS (do Open Geospatial Consortium) e sua relação com o

PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4 Instalação 254.1 Lição 2 - Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.1.1 Instalação a partir dos pacotes binários . . . . . . . . . . . . . . . . . . . . . 254.1.2 Compilando o PostGIS a partir do código fonte . . . . . . . . . . . . . . . . . 26

5 Configuração 295.1 Lição 3 - Configurando o PostgreSQL e o PostGIS . . . . . . . . . . . . . . . . . . . 29

5.1.1 Configurando e testando o PostgreSQL . . . . . . . . . . . . . . . . . . . . . 295.1.2 Configurando e testando o PostGIS . . . . . . . . . . . . . . . . . . . . . . . 30

1

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

6 Importando e exportando dados no PostGIS 346.1 Lição 4 - Importando e exportando dados . . . . . . . . . . . . . . . . . . . . . . . . 34

6.1.1 Importando dados no PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . 346.1.2 Usando SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.1.3 Convertendo dados com o shp2pgsql e importando com o psql . . . . . . . . 356.1.4 Exportando dados do PostGIS usando SQL . . . . . . . . . . . . . . . . . . . 376.1.5 Convertendo dados com o pgsql2shp e exportando com o psql . . . . . . . . 38

7 Fazendo consultas espaciais 407.1 Lição 5 - Fazendo consultas espaciais . . . . . . . . . . . . . . . . . . . . . . . . . . 40

7.1.1 Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407.1.2 Exemplos de SQL espacial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407.1.3 Exemplos 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417.1.4 Exemplos 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427.1.5 Exemplos 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

8 Construindo índices 458.1 Lição 6 - Construindo índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

8.1.1 Construindo índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458.1.2 Índices GiST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458.1.3 Usando Índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488.1.4 Vantagens dos Índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

9 Acessando os dados do PostGIS em outros softwares 519.1 Lição 7 - Acessando os dados do PostGIS em outros softwares . . . . . . . . . . . . 51

9.1.1 Acessando os dados do PostGIS em outros softwares . . . . . . . . . . . . . 519.1.2 Visualizando dados exportados do PostGIS . . . . . . . . . . . . . . . . . . . 519.1.3 Usando o QGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529.1.4 Usando Mapserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

2

Parte I

Sobre essa Apostila

3

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Conteúdo

O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.)

O formato original deste material bem como sua atualização está disponível dentro da licençaGNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção demesmo nome, tendo inclusive uma versão traduzida (não oficial).

A revisão e alteração vem sendo realizada pelo CDTC ([email protected]) desde outubrode 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora.

Autores

A autoria deste é de responsabilidade de Christian do Santos Ferreira ([email protected]).

O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento quevêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto comoutros parceiros institucionais, e com as universidades federais brasileiras que tem produzido eutilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidadesno país.

Informações adicionais podem ser obtidas através do email [email protected], ou dahome page da entidade, através da URL http://www.cdtc.org.br.

Garantias

O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizamdireta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.

Licença

Copyright ©2006, Instituto Nacional de Tecnologia da Informação ([email protected]) .

Permission is granted to copy, distribute and/or modify this document under the termsof the GNU Free Documentation License, Version 1.1 or any later version published bythe Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-TILA. A copy of the license is included in the section entitled GNU Free DocumentationLicense.

4

Parte II

Informações Básicas

5

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Sobre o CDTC

Objetivo Geral

O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito dodesenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.

Objetivo Específico

Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário ede código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre osservidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercadonacional a adotar novos modelos de negócio da tecnologia da informação e de novos negóciosde comunicação com base em software não-proprietário e de código fonte aberto, oferecendotreinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar comoincentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe-recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento deprodutos de software não proprietários e do seu código fonte livre, articulando redes de terceiros(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-dutos de software livre.

Guia do aluno

Neste guia, você terá reunidas uma série de informações importantes para que você comeceseu curso. São elas:

• Licenças para cópia de material disponível;

• Os 10 mandamentos do aluno de Educação a Distância;

• Como participar dos foruns e da wikipédia;

• Primeiros passos.

É muito importante que você entre em contato com TODAS estas informações, seguindo oroteiro acima.

Licença

Copyright ©2006, Instituto Nacional de Tecnologia da Informação ([email protected]).

6

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

É dada permissão para copiar, distribuir e/ou modificar este documento sob os termosda Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posteriorpúblicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSAAPOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-mentação Livre GNU".

Os 10 mandamentos do aluno de educação online

• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado épré-requisito para a participação nos cursos a distância;

• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-tica é necessário para poder executar as tarefas;

• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,dos colegas e dos professores;

• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seuscolegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;

• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisãoe a sua recuperação de materiais;

• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações erealizá-las em tempo real;

• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;

• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagense descobertas;

• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente éponto - chave na comunicação pela Internet;

• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual nãocontrola a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.

Como participar dos fóruns e Wikipédia

Você tem um problema e precisa de ajuda?

Podemos te ajudar de 2 formas:

A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:

. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informaçõesque sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a

7

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação queinteresse ao grupo, favor postá-la aqui.Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico docurso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos maisefetivos para esta prática.

. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativopara solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadasa todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podemajudar.Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com aformalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópicoé recomendável ver se a sua pergunta já foi feita por outro participante.

A segunda forma se dá pelas Wikis:

. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podemser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece umótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, porpessoas de todas as partes do mundo. Acesse-a em português pelos links:

• Página principal da Wiki - http://pt.wikipedia.org/wiki/

Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!

Primeiros Passos

Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:

• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;

• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar dasferramentas básicas do mesmo;

• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;

• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.

Perfil do Tutor

Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.

O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivosvalores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita asidéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.

8

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutorou instrutor:

• fornece explicações claras acerca do que ele espera e do estilo de classificação que iráutilizar;

• gosta que lhe façam perguntas adicionais;

• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-que motivo a classificação foi ou não foi atribuída’;

• tece comentários completos e construtivos, mas de forma agradável (em contraste com umreparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, deameaça e de nervossismo’)

• dá uma ajuda complementar para encorajar um estudante em dificuldade;

• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;

• ajuda o estudante a alcançar os seus objetivos;

• é flexível quando necessário;

• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,talvez numa fase menos interessante para o tutor);

• escreve todas as correções de forma legível e com um nível de pormenorização adequado;

• acima de tudo, devolve os trabalhos rapidamente;

9

Parte III

GNU Free Documentation License

10

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-

leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuiçãode textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.

This is an unofficial translation of the GNU General Documentation License into Brazilian Por-tuguese. It was not published by the Free Software Foundation, and does not legally state thedistribution terms for software that uses the GFDL–only the original English text of the GFDL doesthat. However, we hope that this translation will help Portuguese speakers understand the GFDLbetter.

Licença de Documentação Livre GNU Versão 1.1, Março de 2000

Copyright (C) 2000 Free Software Foundation, Inc.59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, masnão é permitido alterá-lo.

INTRODUÇÃO

O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"nosentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantémpara o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsávelpelas modificações feitas por terceiros.

Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações dodocumento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-ral (GNU GPL), que é um copyleft para software livre.

Nós fizemos esta Licença para que seja usada em manuais de software livre, por que softwarelivre precisa de documentação livre: um programa livre deve ser acompanhado de manuais queprovenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita amanuais de software; ela pode ser usada para qualquer trabalho em texto, independentementedo assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-cipalmente para trabalhos cujo propósito seja de introdução ou referência.

APLICABILIDADE E DEFINIÇÕES

Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelodetentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um

11

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

licenciado e é referida como "você".

Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documentoou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outralíngua.

Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-clusivamente da relação dos editores ou dos autores do Documento com o assunto geral doDocumento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamentenesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, aSeção Secundária pode não explicar nada de matemática).

Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.

As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, comosendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.

Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de CapaFrontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.

Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-mente, representada num formato cuja especificação esteja disponível ao público geral, cujosconteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editoresde texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível deservir como entrada a formatadores de texto ou para tradução automática para uma variedadede formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formatode arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é"Transparente"é chamada de "Opaca".

Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XMLusando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, eprojetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatosproprietários que podem ser lidos e editados apenas com processadores de texto proprietários,SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejamdisponíveis para o público, e HTML gerado automaticamente por alguns editores de texto comfinalidade apenas de saída.

A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,o material que esta Licença requer que apareça na página do título. Para trabalhos que nãotenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-minente do título do trabalho, precedendo o início do corpo do texto.

12

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

FAZENDO CÓPIAS EXATAS

Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou nãocomercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que estaLicença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-cente nenhuma outra condição, quaisquer que sejam, às desta Licença.

Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção decópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,você também precisa respeitar as condições da seção 3.

Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e tambémpode exibir cópias publicamente.

FAZENDO CÓPIAS EM QUANTIDADE

Se você publicar cópias do Documento em número maior que 100, e a nota de licença doDocumento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clarae legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, eTextos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara elegivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionaroutros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estaspreservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópiaexata em outros aspectos.

Se os textos requeridos em qualquer das capas for muito volumoso para caber de formalegível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capaverdadeira, e continuar os outros nas páginas adjacentes.

Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, vocêprecisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópiaOpaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparentecompleta do Documento acessível publicamente em uma rede de computadores, à qual o públicousuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos deprotocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurarque esta cópia Transparente vai permanecer acessível desta forma na localização especificadapor pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-mente ou através de seus agentes ou distribuidores) daquela edição para o público.

É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes deredistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover vocêcom uma versão atualizada do Documento.

13

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

MODIFICAÇÕES

Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuiçãoe modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Alémdisso, você precisa fazer o seguinte na versão modificada:

A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listadosna seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior seo editor original daquela versão lhe der permissão;

B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cincodos autores principais do Documento (todos os seus autores principais, se ele tiver menos quecinco);

C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;

D. Preservar todas as notas de copyright do Documento;

E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente àsoutras notas de copyright;

F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao públicoo direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópicoabaixo;

G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos deCapa requeridos dados na nota de licença do Documento;

H. Incluir uma cópia inalterada desta Licença;

I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendopelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página deTítulo. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo otítulo, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionarum item descrevendo a Versão Modificada, tal como descrito na sentença anterior;

J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a umacópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicadopelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refirader sua permissão;

K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da

14

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-buidores e/ou dedicatórias dados;

L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou emseus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;

M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na VersãoModificada;

N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outrotítulo dado a uma Seção Invariante.

Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem comoSeções Secundárias e não contenham nenhum material copiado do Documento, você pode optarpor designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seustítulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-sam ser diferentes de qualquer outro título de seção.

Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - porexemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como adefinição oficial de um padrão.

Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textosde Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma deTexto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente porvocê ou por acordo feito com alguma entidade para a qual você esteja agindo, você não podeadicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior queadicionou a passagem antiga.

O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seusnomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquerVersão Modificada.

COMBINANDO DOCUMENTOS

Você pode combinar o Documento com outros documentos publicados sob esta Licença, sobos termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e listetodas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.

O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções InvariantesIdênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houvermúltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de

15

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editororigianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajustenos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.

Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combinequaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas asseções entituladas como "Endosso".

COLETÂNEAS DE DOCUMENTOS

Você pode fazer uma coletânea consitindo do Documento e outros documentos publicadossob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos comuma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópiaexata de cada um dos Documentos em todos os outros aspectos.

Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sobesta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga estaLicença em todos os outros aspectos relacionados à cópia exata daquele documento.

AGREGAÇÃO COM TRABALHOS INDEPENDENTES

Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pelacompilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outrostrabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assimcompilados, e eles não são trabalhos derivados do Documento.

Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capado Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.Senão eles precisarão aparecer nas capas de todo o agregado.

TRADUÇÃO

Tradução é considerada como um tipo de modificação, então você pode distribuir traduçõesdo Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduçõesrequer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluirtraduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessasSeções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a

16

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.

TÉRMINO

Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitossob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob estaLicença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em totalacordo com esta Licença.

REVISÕES FUTURAS DESTA LICENÇA

A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versãopresente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Vejahttp://www.gnu.org/copyleft/.

A cada versão da Licença é dado um número de versão distinto. Se o Documento especificarque uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, vocêtem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versãoposterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se oDocumento não especificar um número de Versão desta Licença, você pode escolher qualquerversão já publicada (não como rascunho) pela Free Software Foundation.

ADENDO: Como usar esta Licença para seus documentos

Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licençano documento e ponha as seguintes notas de copyright e licenças logo após a página de título:

Copyright (c) ANO SEU NOME.É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licençade Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos daCapa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".

Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés dedizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos deCapa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para osTextos da Quarta Capa.

Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,

17

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

tal como a GNU General Public License, para permitir o seu uso em software livre.

18

Parte IV

PostGIS

19

Capítulo 1

O que é o PostGIS

O PostGIS é uma extensão espacial gratuita e de código fonte livre. Sua construção é feitasobre o sistema de gerenciamento de banco de dados objeto relacional (SGBDOR) PostgreSQL,que permite o uso de objetos GIS (Sistemas de Informação Geográfica) ser armazenado embanco de dados. PostGIS inclui suporte para índices espaciais GiST e R-Tree, além de funçõespara análise básica e processamento de objetos GIS.

20

Capítulo 2

Plano de ensino

2.1 Objetivo

Capacitar os profissionais a especificarem e implantarem projetos utilizando o PostGIS (bancode dados espaciais).

2.2 Público Alvo

Técnicos que desejam trabalhar com PostGIS.

2.3 Pré-requisitos

Noções básicas de Linux e Geoprocessamento.

2.4 Descrição

O curso de PostGIS será realizado na modalidade EAD e utilizará a plataforma Moodle comoferramenta de aprendizagem. Ele é composto de dois módulos de aprendizado e uma avaliaçãofinal. O material didático estará disponível on-line de acordo com as datas pré-estabelecidas nocalendário. A versão utilizada para o PostGIS será a 1.1.3.

Todo o material está no formato de lições, e estará disponível ao longo do curso. As liçõespoderão ser acessadas quantas vezes forem necessárias.

Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudadoanteriormente que também conterá perguntas sobre os textos indicados. Utilize o material decada semana e os exemplos disponibilizados para se preparar para prova.

2.5 Metodologia

O curso está dividido da seguinte maneira:

21

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

2.6 Cronograma

• Introdução, instalação e configuração;

• Importando e exportando dados, consultas, criação de índices e acesso a partir de outrossoftwares.

As lições contêm o conteúdo principal. Elas poderão ser acessadas quantas vezes forem neces-sárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberáuma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menordo que 6.0, sugerimos que você faça novamente esta lição.Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das liçõesquanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveispara que possam ser consultados durante a avaliação final.Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá serenviada no fórum. Diariamente os monitores darão respostas e esclarecimentos.

2.7 Programa

O curso de PostGIS oferecerá o seguinte conteúdo:

• Introdução ao PostGIS

• Instalação

• Configurando o PostgreSQL e o PostGIS

• Importando e exportando dados

• Fazendo consultas espaciais

• Construindo índices

• Acessando os dados do PostGIS em outros softwares

2.8 Avaliação

Toda a avaliação será feita on-line.Aspectos a serem considerados na avaliação:

• Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;

• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.

Instrumentos de avaliação:

• Participação ativa nas atividades programadas.

22

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• Avaliação ao final do curso.

• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação eobtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordocom a fórmula abaixo:

• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições

• AF = Avaliações

2.9 Bibliografia

• PostgreSQL: http://www.postgresql.org

• PostGIS: http://postgis.refractions.net

– p/ Fedora 4 e 5: http://ftp.gwdg.de/pub/misc/freegis/intevation/freegis/fedora/

– p/ Debian Sarge: http://pkg-grass.alioth.debian.org/cgi-bin/wiki.pl

– p/ Debian Etch (Testing) e Sid (Unstable): PostGIS já é incluso nos softwares empaco-tados para esse distribuição.

– p/ MacOS X: http://wwwamb.bologna.enea.it/forgrass/download.htm

– p/ Windows: http://postgis.refractions.net/download/windows/

• GEOS: http://geos.refractions.net

• Proj4: http://proj.maptools.org

• OGR: http://ogr.maptools.org/

• QGIS: http://qgis.org/

• Mapserver: http://mapserver.gis.umn.edu/

• OGS e padrões OpenGIS: http://www.opengeospatial.org

• Especificações Web Map OpenGIS: http://www.opengis.org/techno/specs/01-047r2.pdf

23

Capítulo 3

Introdução

Uma pequena introdução sobre o PostGIS e os padrões OpenGIS.

3.1 Lição 1 - Introdução ao PostGIS

3.1.1 PostGIS

PostGIS é um módulo de extensão do Banco de Dados ( DB ) gratuito PostgreSQL. O PostGISadiciona "capacidades espaciais"ao PostgreSQL e permitindo que esse se torne um repositóriode dados para os Sistemas de Informações Geográficas (SIG). Isso ocorre nos mesmos moldesde soluções pagas como o SDE - Spatial Database Engine da ESRI® a extensão Spatial da Ora-cle® e o Spatial Extender do DB2 da IBM®.

No PostGIS está incluso suporte para todas as funcionalidades e objetos definidos na especi-ficação "Simple Features for SQL"(SFSQL) do padrão OpenGIS® (Open Geospatial Consortium- OGC). Nele são definidos funções que permitem consultas e manipulações de dados espaciaisatravés de comandos SQL no PostgreSQL.

Devido à sua aderência pelo formato SFSQL, o PostGIS torna-se uma ferramenta confiávelpor usar funções padronizadas e abertas ao manipular os dados espaciais. Com isso muitas

24

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

aplicações (Mapserver, JUMP, QGIS, etc) podem lidar com o PostGIS e acessar/manipular seusdados. Entretanto, no PostGIS também são inclusas um número enorme de funções SQL quepermitem interagir com dados espaciais sem a necessidade de um SIG.

Além disso, utilizar o PostGIS em um servidor poderoso (leia-se, máquina com grande portede processamento) livra o usuário e seu software cliente da tarefa de lidar com o processamentodas consultas ao DB. Isso evita que o usuário tenha que armazenar e processar um grande nú-mero de informações, e ainda permite que a base de dados seja acessada e consultada por umgrande número de usuários (na intranet ou internet).

3.1.2 Padrões OpenGIS (do Open Geospatial Consortium) e sua relação com oPostGIS

Em 1994 foi criado o consórcio internacional Open Geospatial (OGC - Open Geospatial Con-sortium), denomidado anteriormente de OpenGIS. Ele possui a missão de desenvolver especifi-cações para interfaces espaciais que serão disponibilizadas livremente para uso geral.

Essa iniciativa nasceu para garantir a interoperabilidade de softwares através da padroniza-ção das funções que tratam dados espaciais e permitir que todos os softwares de SIG troquemdados entre si (abrir, ler e salvar). Apesar disso ser o ideal, o que pode ser visto é que algunsfabricantes procuram criar seus próprios formatos de dados, atormentando assim a troca de in-formações entre os diferentes SIG e aprisionando o usuário dentro de formatos proprietários.

Além de garantir interoperabilidade, outro fator interessante dos padrões OpenGIS é que aotrabalhar-se dentro desses formatos (e sem copyright ou patentes), o usuário torna-se indepen-dente do software, garantindo assim uma vida útil e longa para os seus projetos com dadosespaciais.

Por uma coincidência histórica, os padrões abertos criados pelo OGC começaram a ganharmaturidade no mesmo período em que projetos de softwares livres começaram a surgir para osetor de Geoprocessamento. Assim os softwares já "nascem"com o OpenGIS "embutido"(comoo PostGIS).

Atualmente os sistemas proprietários também implementam alguns padrões OGC porém sãoos softwares livres que aderem mais rapidamente ao OpenGIS, tornando a escolha pelos softwa-res livres a escolha ideal para criar uma arquitetura seguindo os padrões abertos OGC.

25

Capítulo 4

Instalação

Instalação do PostGIS usando binários e através do código fonte.

4.1 Lição 2 - Instalação

4.1.1 Instalação a partir dos pacotes binários

Para a instalação do PostgreSQL e PostGIS o usuário geralmente tem duas opções: compilara partir do código-fonte ou usar binários. Nesta seção abordaremos a instalação utilizando paco-tes pré-compilados.

Como o GNU/Linux é um sistema operacional também focado para servidores, usar os bi-nários do PostgreSQL é simples, já que a maioria das distribuições GNU/Linux possuem essesoftware pré-compilado e de fácil instalação.

Para o PostGIS a distribuição Debian (Etch/Testing e Sid/Unstable) já dispõe desse pacoteque pode ser facilmente instalado com os comandos (como root):

> apt-get update

> apt-get install postgis

Caso o PostgreSQL ainda não esteja presente/instalado ele será automaticamente selecio-nado e instalado antes de instalar o PostGIS. Nesse procedimento todas as dependências doPostGIS e PostgreSQL também serão automaticamente instaladas.

No Debian Sarge (Stable) o pacote do PostGIS também está disponível, mas nesse caso énecessário utilizar um outro repositório (DebianGIS), já que esse software ainda não fazia parte

26

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

da "árvore"oficial do Debian na época do lançamento do Sarge. Para adicioná-lo basta inserir noarquivo source.list (no /etc/apt) do apt-get a seguinte linha:

deb http://pkg-grass.alioth.debian.org/debian-gis stable main non-free contrib

Feito isso basta repetir o procedimento de instalação descrito anteriormente para as outrasversões do Debian.

Para outra distribuição GNU/Linux, o Fedora Core 4 e 5, também existem pacotes do Post-GIS. Entretanto, esses não são atualizados com a mesma freqüência do Debian. Nesse caso oprocedimento de instalação consiste em fazer download manual do PostGIS e instalá-lo com oseguinte comando (como root):

> rpm -ivh postgis_pacote.rpm

(onde "postgis_pacote"é o nome do arquivo do download, e nesse caso é assumido que oPostgreSQL e todas as dependências do PostGIS (Proj4 e GEOS) já estejam previamente insta-ladas).

4.1.2 Compilando o PostGIS a partir do código fonte

Para a grande maioria das distribuições GNU/Linux (OpenSuSE, Ubuntu, Slackware, Man-driva, etc) não há binários do PostGIS, então nesse caso a única maneira é compilá-lo a partir docódigo-fonte. Para o PostgreSQL não será abordado esse procedimento já que ele está disponí-vel (e empacotado) para todas as grandes distribuições.

Compilar (e instalar) o PostGIS é geralmente uma tarefa relativamente simples e rápida. Po-rém, é necessário cumprir alguns requisitos:

• PostgreSQL 7.2 ou superior instalado (inclusive o pacote "dev"ou arquivos de desenvolvi-mento);

• Compilador GNU C (gcc). Outros compiladores ANSI C podem ser usados, mas existemmaiores chances de haver problemas;

27

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• GNU Make (gmake ou make). Todas as distribuições o incluem, mas nem todas o instalampor padrão. Outras versões do make podem não conseguir processar o arquivo Makefile;

• (recomendado) Proj4 - biblioteca de projeções cartográficas. Essa biblioteca é necessáriacaso o usuário queira ter suporte a reprojeção de coordenadas. Caso a sua distribuição nãopossua o Proj4 ele esta disponível para download nesse endereço: http://proj.maptools.org;

• (recomendado) GEOS - biblioteca de geometrias. É necessária para executar consultas noPostGIS que testam e fazem operações com geometrias. Caso a sua distribuição não pos-sua o GEOS, ele está disponível para download nesse endereço: http://geos.refractions.net.

Após tudo estar checado e em ordem, chegou a hora de compilar o PostGIS. Os passos sãoos seguintes:

• Fazer download da última versão do PostGIS (em nosso caso a 1.1.3 - versão utilizadadurante a confecção desse curso) no endereço: http://postgis.refractions.net;

• Após download o próximo passo é descomprimir o nosso arquivo, no exemplo chama-se"postgis-1.1.3.tar.gz", com o comando abaixo (sim, realmente têm um sinal de - (menos) nofinal da linha):

> gzip -d -c postgis-1.1.3.tar.gz | tar xvf -

• Entre no diretório do postgis-1.1.3 e rode:

> ./configure

NOTA: caso o Proj4 ou GEOS não sejam encontrados isso será informado ao final desse co-mando. Daí será necessário especificar no configure o caminho (PATH) para as bibliotecas quenão forem encontrados. O comando ficaria:

> ./configure –with-proj=PATH

NOTA: Erros no configure (ou nos comandos que virão a seguir) em geral são devidos a pa-cotes adicionais que estão faltando. Logo, é necessário instalá-los para prosseguir até o final dainstalação.

28

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• Agora chegou a hora de compilar e instalar o PostGIS. Os comandos são:

> make

> make install

29

Capítulo 5

Configuração

Configuração do PostgreSQL e do PostGIS.

5.1 Lição 3 - Configurando o PostgreSQL e o PostGIS

5.1.1 Configurando e testando o PostgreSQL

Nessa seção iremos inicializar o PostgreSQL e o PostGIS, e preparar nosso primeiro bancode dados para receber os dados espaciais.

Os passos a seguir devem ser executados como usuário "postgres". Para fazer isso use ocomando "su postgres"(é necessário acesso a senha desse usuário).

Para inicializar o PostgreSQL, o comando é:

> /etc/init.d/postgresql-8.1 start

NOTA: o local e nome do PostgreSQL podem variar dependendo do sistema GNU/Linux utili-zado.

Depois deverá aparecer a seguinte mensagem:

* Starting PostgreSQL 8.1 database server [ ok ]

Ok, já estamos rodando o PostgreSQL!

30

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Os seguintes comandos deverão ser executados como o usuário postgres, que é o usuárioprimário do PostgreSQL. Para se tornar o usuário postgres, execute:

# su postgres

Pronto. Agora, para testar e ver quais os bancos de dados que estão disponíveis use o co-mando:

> psql -l

O resultado (no exemplo) foi:

Lista dos bancos de dados

Nome | Dono | Codificação————–+————+————-postgres | postgres | UTF8project1 | postgres | UTF8template0 | postgres | UTF8template1 | postgres | UTF8(4 registros)

Agora vamos criar o banco de dados exemplo com o comando:

> create database meu_DB

O resultado será: CREATE DATABASE

5.1.2 Configurando e testando o PostGIS

O PostGIS necessita que a linguagem procedural PL/pgSQL seja ativada no banco de dadosque iremos utilizar. Para isso o comando é:

> create language plpgsql meu_DB

Agora carregue o arquivo lwpostgis.sql, ele serve para carregar no PostgreSQL definições deobjetos e funções do PostGIS. Na nossa instalação, por código-fonte, o arquivo está no diretório

31

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

/usr/share/postgresql/8.1/contrib:

> psql -d meu_DB -f /usr/share/postgresql/8.1/contrib/8.1/lwpostgis.sql

Por último é carregado o arquivo (spatial_ref_sys.sql) de definições do sistema de coordena-das EPSG.

> psql -d meu_DB -f /usr/share/postgresql/8.1/contrib/8.1/spatial_ref_sys.sql

IMPORTANTE: Caso a instalação tenha sido feita através do apt-get, esses arquivos podemestar em locais diferentes no sistema de arquivos. Por exempo, após instalar o postgis no De-bian testing, esses arquivos se encontram em "/usr/share/postgresql-8.1-postgis/". Para descobrironde estão esses arquivos, você pode executar, como root:

• updatedb

• locate lwpostgis.sql

• locate spatial_ref_sys.sql

NOTA: uma mensagem de erro como:

psql:/usr/share/postgresql/8.1/contrib/lwpostgis.sql:3509: ERROR: current transaction is abor-ted, commands ignored until end of transaction block

ou

psql:/usr/share/postgresql/8.1/contrib/spatial_ref_sys.sql:10781:ERROR:current transaction is aborted, commands ignored until end of transaction blockROLLBACKVACUUM

Apenas significam que os objetos e funções do PostGIS já foram carregados em nosso bancode dados.

32

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Testando o PostGIS

Para verificar se o PostGIS está funcionando corretamente no nosso banco de dados recémcriado ( meu_DB ) vamos rodar alguns comandos simples de SQL.

O primeiro comando testa se as tabelas relacionadas ao PostGIS foram devidamente carre-gadas em nosso banco de dados.

meu_DB=# \dt

Lista de relações

Esquema | Nome | Tipo | Dono————–+——————————-+———+———-public | geometry_columns | tabela | postgrespublic | spatial_ref_sys | tabela | postgres(2 registros)

No segundo comando iremos ver o número de registros que existem na tabela "spatial_ref_sys".

meu_DB=# SELECT count(*) FROM spatial_ref_sys;

count——-2671(1 registro)

Esse resultado mostra que essa tabela possui 2671 entradas. Algo que é perfeitamente nor-mal. NOTA: esse valor pode variar em diferentes versões do PostGIS.

O terceiro comando seria verificar se as funções do PostGIS (coluna ’Nome’) foram devida-mente carregadas em nosso banco ( meu_DB ). NOTA: dependendo da versão do PostGIS oresultado pode ser diferente.

meu_DB-# \df postgis*

33

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Lista de funções

Esquema | Nome | Tipo de dado do resultado | Tipos de dado do argumento————–+———-+—————————————+———————————–public | postgis_full_version | text |public | postgis_geos_version | text |public | postgis_gist_joinsel | double precision | internal, oid, internal, smallintpublic | postgis_gist_sel | double precision | internal, oid, internal, integerpublic | postgis_jts_version | text |public | postgis_lib_build_date | text |public | postgis_lib_version | text |public | postgis_proj_version | text |public | postgis_scripts_build_date | text |public | postgis_scripts_installed | text |public | postgis_scripts_released | text |public | postgis_uses_stats | boolean |public | postgis_version | text |(13 registros)

No último teste vamos verificar a versão do PostGIS que está instalada através do seguintecomando:

meu_DB=# SELECT postgis_version();

postgis_version—————————————1.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1(1 registro)

Aqui podemos ver que a versão instalada é a 1.1(.3). Também temos a confirmação que asbibliotecas GEOS e PROJ estão sendo utilizadas pelo PostGIS (já que elas têm o status igual á1).

34

Capítulo 6

Importando e exportando dados noPostGIS

Lição sobre como inserir e extrair os dados do banco.

6.1 Lição 4 - Importando e exportando dados

6.1.1 Importando dados no PostGIS

Uma vez criado o banco de dados com funções espaciais ( meu_DB ) estamos prontos parainserir os dados de GIS nele. Existem vários caminhos para entrar com os dados espaciaisno banco de dados PostGIS/PostgreSQL. Aqui iremos abordar dois: usando comandos de SQLou usando os programas de importação e exportação de arquivo Shapefile para formato SQL(shp2pgsql) e o carregador de dados (psql).

6.1.2 Usando SQL

Se você pode converter dados para modo texto, então usando SQL formatado poderia ser omodo mais fácil de entrar com seus dados em PostGIS. Como no Oracle e outros bancos de da-dos de SQL, os dados podem ser carregados em grandes quantidades concatenando um grandearquivo de texto cheio de declarações SQL ("INSERT") dentro do terminal SQL.

A importação de um arquivo texto (teste.sql por exemplo) poderia se parecer como o exemploa seguir:

insert into points values ( ’POINT(0 0)’, ’Origin’ );insert into points values ( ’POINT(5 0)’, ’X Axis’ );insert into points values ( ’POINT(0 5)’, ’Y Axis’ );

Para realizar essa operação crie um arquivo .TXT com as três linhas de comando SQL acimae nomeie o arquivo de "teste.sql".

35

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Antes de importar esse arquivo é necessário, no entanto, criar a tabela onde os dados serãoinseridos. Para realizar isso dê o seguinte comando:

meu_DB=# CREATE table points (pt geometry, name varchar);CREATE TABLE

Com essa tabela podemos a seguir importar o arquivo de dados para dentro do PostgreSQLusando o comando "psql":

> psql -d meu_DB -f teste.sql

INSERT 0 1INSERT 0 1INSERT 0 1

Agora para testar os dados iremos realizar uma consulta que mede a distância entre todos ospontos (0,0), (5,0) e (0,5) com o ponto (5,5). O comando para realizamos essa tarefa é o seguinte:

meu_DB=# SELECT name, AsText(pt), Distance(pt, ’POINT(5 5)’) from points;

E o resultado deve ser:

name | astext | distance———-+—————–+——————Origin | POINT(0 0) | 7.07106781186548X Axis | POINT(5 0) | 5Y Axis | POINT(0 5) | 5

6.1.3 Convertendo dados com o shp2pgsql e importando com o psql

Para a importação de dados no PostGIS também podemos utilizar o comando shp2pgsql. Eleconverte arquivos ESRI Shapefile para o formato SQL, e que depois podem ser inseridos no Post-GIS usando o comando psql.

O comando psql tem vários parâmetros para serem utilizados na linha de comando:

36

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

-d Exclui a tabela do banco de dados antes de criarmos uma nova tabela com os dados doarquivo Shapefile;

-a Acrescenta dados de um arquivo Shapefile na tabela de banco de dados. Note que, para usaresta opção para carregar arquivos múltiplos, os arquivos têm que ter os mesmos atributose os mesmos tipos de dados;

-c Cria uma nova tabela e insere dados do arquivo Shapefile. Este parâmetro é o modo padrão;

-p Produz somente o código do SQL da criação da tabela, sem adicionar nenhum dado ao bancode dados. Isto pode ser usado se você necessitar separar completamente as etapas dacriação da tabela do carregamento dos dados;

-D Comando usado para importar séries de dados muito grandes. Usa o formato do "dump"doPostgreSQL para a saída de dados. Isto pode ser combinado com -a, -o e -d. É muito maisrápido carregar do que o default de inserção (comando "INSERT") do formato SQL;

-s <SRID> Cria e insere tabelas de geometria com o SRID especificado;

-k Conserva formato dos identificadores (coluna, esquema e atributos). Note que os atributos emShapefile são todos MAIÚSCULOS;

-i Força todos os inteiros a usarem o formato de 32-bits (não cria inteiros de 64-bits, mesmo se ocabeçalho DBF aparenta permitir isso);

-I Cria um índice GIST na coluna de geometria;

-w Formato de saída WKT, para o uso com versões de PostGIS anteriores (0.x). Note que istointroduzirá deriva nas coordenadas e que deixará cair os valores M dos Shapefiles.

NOTA: -a, -c, -d e -p é mutuamente exclusivo.

Agora iremos realizar uma seção de exemplo para usar o programa de tradução de Shapefilepara formato SQL (shp2pgsql) para criar um arquivo em formato SQL, e em seguida importá-lono banco de dados usando o comando psql:

> shp2pgsql bc_roads.shp bc_roads > bc_roads.sql

Nota: se o shp2pgsql não estiver disponível com um comando no seu terminal, é necessáriopara rodá-lo dar o caminho ("path") do executável.

> psql -d meu_DB -f roads.sql

A conversão e importação de dados podem ser feitos em um único comando se concatenar-mos (como no UNIX) os dois comandos:

37

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

> shp2pgsql bc_roads.shp bc_roads | psql -d meu_DB

6.1.4 Exportando dados do PostGIS usando SQL

Os dados podem ser extraídos do banco usando comandos SQL ou o importardor/exportadorde arquivos Shapefile.

O meio mais direto de extrair dados do banco de dados é usar um comando SQL (SELECT)para selecionar dados através de uma consulta, e exportar as colunas resultantes em um arquivode texto:

meu_DB=# SELECT gid, AsText(the_geom) AS the_geom, name FROM bc_roads;

gid | the_geom | name—–+—————————————————————————————+————-1 | MULTILINESTRING((1205902.3 460882.2,1205906.3 460789.7)) | No 1 Rd2 | MULTILINESTRING((1205906.3 460789.7,1205907.3 460776.4)) | No 1 Rd3 | MULTILINESTRING((1205907.3 460776.4,1205913.6 460638.8)) | No 1 Rd4 | MULTILINESTRING((1205913.6 460638.8,1205919.6 460513.4)) | No 1 Rd5 | MULTILINESTRING((1205919.6 460513.4,1205920.8 460482)) | No 1 Rd6 | MULTILINESTRING((1211706.8 462048.2,1211710.3 461877)) | Seaham Cres7 | MULTILINESTRING((1212105 462099.5,1212160.1 462102.5)) | Seahaven Pl(7 registros)

Porém, haverá momentos em que restrições serão necessárias para reduzir o número decampos retornados. No caso de restrições baseadas em atributos, apenas use a mesma sintaxenormal de SQL com uma tabela não espacial. No caso de restrições espaciais, os operadoresseguintes são disponíveis/úteis:

&& Este operador diz se o retângulo envolvente (bounding box) de uma geometria intersectao retângulo envolvente de outra.

∼= Estes operadores testam se duas geometrias são geometricamente idênticas. Por exem-plo, se "POLYGON((0 0,1 1,1 0,0 0))"é igual à "POLYGON((0 0,1 1,1 0,0 0))"(nesse caso é!).

= Este operador é um pouco mais "ingênuo", e só testa se o retângulo envolvente (boundingbox) das geometrias é o mesmo.

38

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Logo, você pode usar estes operadores em consultas. Note que ao especificar geometrias eretângulos na linha de comando SQL, você tem que transformar as representações de caracteres(string) explicitamente em geometrias usando a função "GeometryFromText () ". Por exemplo:

SELECT name FROM bc_roadsWHERE the_geom = GeomFromText(’MULTILINESTRING((1212105 462099.5,1212160.1 462102.5))’,-1);

A consulta anterior devolveria o único registro da tabela "bc_roads"no qual a geometria eraigual aquele valor.

Ao usar o operador "&& ", você pode especificar tanto um retângulo (BOX3D) como carac-terística de comparação como uma geometria. Quando você especifica uma geometria é o seuretângulo envolvente (bounding box) que será usado para a comparação.

SELECT name FROM bc_roadsWHERE the_geom && GeomFromText(’POLYGON((1212105 462099.5,1212160.1 462102.5,1212105 462099.5))’,-1);

Então, a consulta anterior usará o retângulo envolvente do polígono para propósitos de com-paração.

A consulta espacial mais comum provavelmente será uma consulta "frame-based", usada porum software cliente, como um visualizador de dados ou servidor de mapas na web, é obter o"map-frame"(representação gráfica - figura) para exibição. Usando um objeto "BOX3D"para o"frame", essa consulta iria ser como demonstrado abaixo:

SELECT AsText(the_geom) AS the_geomFROM bc_roadsWHERE the_geom && SetSRID(’BOX3D(1212105 462099.5,1212160.1 462102.5)’::box3d,-1);

Note que o uso do SRID, especifica a projeção do BOX3D. O valor -1 é usado para indicar quenenhum SRID é especificado.

6.1.5 Convertendo dados com o pgsql2shp e exportando com o psql

O programa de conversão pgsql2shp conecta diretamente ao banco de dados e converte umatabela em um arquivo Shapefile. A sintaxe básica é:

39

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

pgsql2shp [<opções>] <banco de dados> [<esquema>.] <tabela>

As opções de linha de comando são:

-f <nome do arquivo> Escreve a saída para o nome de arquivo especificado;

-h <servidor> O servidor de banco de dados para conectar;

-p <porta> A porta para se conectar ao servidor de banco de dados;

-P <senha> A senha para usar a conexão do banco de dados;

-u <usuário> O nome do usuário para usar na conexão com o banco de dados;

-g <coluna de geometria> No caso de tabelas com colunas de múltiplas geometrias; esse op-cão especifica qual coluna de geometria deve ser usada quando escrever o arquivo Shape-file;

-b Usar um cursor binário. Isto fará a operação mais rápida, mas não irá funcionar se qualqueratributo "não-geométrico"na tabela estiver com texto incompleto;

-r Modo bruto. Não descarta o campo "gid"ou exclui os nomes das colunas;

-d Para a compatibilidade com versões anteriores: escreva um arquivo Shapefile 3-dimensionalquando for extraí-lo do banco de dados de PostGIS (em versões pre-1.0.0 - neles o padrão éescrever um arquivo Shapefile 2-dimensional neste caso). Inicie de postgis-1.0.0 (ou versãoposterior) e as dimensões são codificadas automaticamente.

40

Capítulo 7

Fazendo consultas espaciais

Como fazer consultas espaciais simples e complexas no PostGIS.

7.1 Lição 5 - Fazendo consultas espaciais

7.1.1 Consultas

O argumento para a funcionalidade do banco de dados espacial está em executar consultasdentro do banco de dados que deveria requerer funcionalidade contidas em um software GIS.Usando PostGIS efetivamente requer conhecimento de quais funções espaciais estão disponí-veis, e assegura-se que os índices espaciais apropriados estão criados permitindo bom desem-penho nas consultas.

7.1.2 Exemplos de SQL espacial

Os exemplos nesta seção utilizarão duas tabelas, uma tabela de estradas lineares e uma ta-bela de limites poligonal da municipalidade. As definições de tabela para a tabela dos bc_roadssão:

Coluna | Tipo | Descrição—————-+————————+——————-gid | integer | Unique IDname | character varying | Road Namethe_geom | geometry | Location Geometry (Linestring)

A definição de tabela para a tabela do bc_municipality é:

Coluna | Tipo | Descrição—————+————————+——————-gid | integer | Unique IDcode | integer | Unique IDname | character varying | City / Town Namethe_geom | geometry | Location Geometry (Polygon)

41

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

7.1.3 Exemplos 1

Qual o comprimento total de todas as estradas, expressado nos quilômetros?

Você pode responder esta questão com um comando muito simples de SQL:

meu_DB=# SELECT sum(length(the_geom))/1000 AS km_roads FROM bc_roads;

km_roads——————57245.3213072718(1 registro)

Qual é a área da cidade de Prince George, em hectares?

Esta consulta combina uma condição do atributo (no nome da municipalidade) com um cálculoespacial (de área):

meu_DB=# SELECT area(the_geom)/10000 AS hectares FROM bc_municipality WHEREname = ’PRINCE GEORGE’;

hectares——————32657.9103824925(1 registro)

Qual é a maior municipalidade na província, por área?

Esta consulta traz uma medição espacial na condição da busca. Há diversas maneiras deavaliar este problema, mas a mais eficiente está abaixo:

meu_DB=# SELECT name, area(the_geom)/10000 AS hectares FROM bc_municipalityORDER BY hectares DESC LIMIT 1;

name | hectares————————–+——————TUMBLER RIDGE | 155020.025561315(1registro)

42

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Note que para responder a esta consulta nós temos que calcular a área de cada polígono.Se fizermos isto muito, faria mais sentido acrescentar uma coluna com as áreas de cada polí-gono à tabela, para a usarmos como um índice que iria aumentar o desempenho das consultas.Requisitando que os resultados sejam ordenados em sentido decrescente e usando o comando"LIMIT"de PostgreSQL, podemos facilmente pegar apenas o maior valor, sem usar uma funçãoagregada como o max().

7.1.4 Exemplos 2

Qual é o tamanho completo das estradas contidas inteiramente dentro de cada municipali-dade?

Este é um exemplo de um "cruzamento espacial"("spatial join"), porque nós estamos trazendojunto dados de duas tabelas (fazendo um cruzamento), mas estamos usando uma condição deinteração espacial (contido ou "contained") como a condição de cruzamento, ao invés de usaruma abordagem relacional usando um atributo em comum:

meu_DB=# SELECT m.name, sum(length(r.the_geom))/1000 as roads_kmFROM bc_roads AS r,bc_municipality AS mWHERE r.the_geom && m.the_geomAND contains(m.the_geom,r.the_geom)GROUP BY m.nameORDER BY roads_km DESC;

name | roads_km——————————+——————SURREY | 1687.24857093241VANCOUVER | 1550.37923490885LANGLEY DISTRICT | 849.559744805505PRINCE GEORGE | 737.646890951342BURNABY | 732.348440798669RICHMOND | 698.334802617971KELOWNA | 689.282898281948KAMLOOPS | 653.015753055733DELTA | 645.412004316109MATSQUI | 626.442542300976... (segue)

Esta consulta leva um certo tempo para ser concluída, porque cada estrada é sumarizada noresultado final (cerca de 250 mil estradas para essa tabela do nosso exemplo). Para menoressobreposições ("overlays") (centenas de registros em milhares) a resposta pode ser muito maisrápida.

43

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Criar uma nova tabela com todas as estradas contidas na cidade de Prince George.

Este é um exemplo de uma sobreposição ("overlay"), que lê em duas tabelas e cria uma novatabela como saída e que consiste dos resultados espacialmente sobrepostos ("clipped"). Ao con-trário do cruzamento espacial ("spatial join") demonstrado acima, esta consulta realmente crianovas geometrias (com seu resultado). Uma sobreposição é como um cruzamento espacial tur-binado, pois é útil para trabalhos mais minuciosos de análise:

meu_DB=# CREATE TABLE pg_roads asSELECT intersection(r.the_geom, m.the_geom) AS intersection_geom, length(r.the_geom) ASrd_orig_length, r.*FROM bc_roads AS r, bc_municipality AS mWHERE r.the_geom && m.the_geomAND intersects(r.the_geom, m.the_geom)AND m.name = ’PRINCE GEORGE’;

Use o seguinte comando para verificar o resultado:

meu_DB=# SELECT name from pg_roads;

Nota: Usa a tecla espaço para avançar ou a tecla "q"para sair.

7.1.5 Exemplos 3

Qual é o tamanho em quilômetros, da rua "Douglas St.", em Victoria?

meu_DB=# SELECT sum(length(r.the_geom))/1000 AS kilometersFROM bc_roads r, bc_municipality mWHERE r.the_geom && m.the_geomAND r.name = ’Douglas St’AND m.name = ’VICTORIA’;

kilometers——————6.85339156709377(1 registro)

44

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Qual é o maior polígono de municipalidade que possui um buraco?

meu_DB=# SELECT gid, name, area(the_geom) AS areaFROM bc_municipalityWHERE nrings(the_geom) > 1ORDER BY area DESC LIMIT 1;

gid | name | area—–+————————–+——————13 | SPALLUMCHEEN | 257374619.430219(1 registro)

45

Capítulo 8

Construindo índices

Como construir índices de modo a utilizar melhor o banco de dados espacial.

8.1 Lição 6 - Construindo índices

8.1.1 Construindo índices

Índices são o que faz possível usar grandes conjuntos de dados em um banco de dadosespacial. Sem indexação, qualquer busca por uma feição iria requerer uma procura seqüencialpassando por todos os registros no banco de dados. A indexação acelera as buscas por orga-nizar os dados em uma árvore de procura (hierarquia) que pode ser rapidamente acessada paraencontrar um dado em particular. O PostgreSQL suporta três tipos de índices por padrão:

B-Trees são usadas para dados que podem ser ordenados ao longo de um eixo; por exemplo,números, letra inicial, datas. Dados de GIS não podem ser racionalmente ordenados aolongo de um eixo. Qual é maior, (0,0) ou (0,1) ou (1,0)?. Assim, a indexação B-Tree é inútilpara nós;

R-Trees dividem os dados em retângulos, sub-retângulos, e sub-sub retângulos, etc. R-Treessão usados por alguns bancos de dados espaciais para indexar dados de GIS, mas a im-plementação do R-Tree no PostgreSQL não é tão robusta como o GiST.

Índices GiST (Generalized Search Trees) dividem dados em "things to one side"(coisas paraum lado), "things which overlap"(coisas que se sobrepõe), "things which are inside"(coisasque estão dentro) e podem ser usados em uma extensa gama de tipos de dados, inclusivedados de GIS. PostGIS usa um índice de R-Tree implementado em cima do GiST paraindexar dados de GIS.

8.1.2 Índices GiST

GiST representa "Generalized Search Tree"e é uma forma generalizada de indexação. Alémda indexação de GIS, GiST é usada para acelerar buscas em todos os tipos de estruturas de da-dos irregulares (arranjos de vetores, dados espectrais, etc) que não são normalmente suscetíveisa indexação B-Tree.

46

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Uma vez que uma tabela de dados de GIS excede algumas milhares de linhas, você irá quererconstruir um índice para acelerar as buscas espaciais de dados (a menos que todas suas buscassejam baseadas em atributos, nesse caso você iria construir um índice normal usando os camposde atributo).

A sintaxe para construir um índice de GiST em uma coluna de geometria é demonstrada àseguir:

CREATE INDEX [nome_do_índice] ON [nome_da_tabela]

USING GIST ( [campo_de_geometria] GIST_GEOMETRY_OPS );

Construindo um índice espacial é um exercício computacionalmente intensivo: em tabelas aoredor de 1 milhão de linhas, em uma máquina de 300MHz Solaris, achamos que com a constru-ção de um índice GiST leva aproximadamente 1 hora. Depois de construir um índice, é importanteforçar PostgreSQL a coletar as estatísticas de tabela, e que são usadas para otimizar as busca:

VACUUM ANALYZE [nome_da_tabela] [nome_da_coluna];

– Isso é apenas necessário para instalações do PostgreSQL 7.4 ou anteriores.

SELECT UPDATE_GEOMETRY_STATS([nome_da_tabela], [nome_da_coluna]);

No PostgreSQL índices GiST têm duas vantagens em relação aos índices R-Tree. Em pri-meiro lugar, índices GiST são "null safe"(seguro com nulos), significando que eles podem indexarcolunas que incluem valores nulos. Em segundo lugar, índices GiST apóiam o conceito de "lossi-ness"(sem perda) que é importante quando lidamos com objetos de GIS com tamanhos maioresdo que o tamanho de página do PostgreSQL (8Kb). "Lossiness"permite PostgreSQL armazenarsomente a parte "importante"de um objeto em um índice - no caso de objetos de GIS, só o retân-gulo envolvente. Objetos de GIS maiores do que 8K causarão que os índices R-Tree falhem noprocesso de construção.

No exemplo iremos criar o índice para a tabela "bc_roads":

meu_DB=# CREATE INDEX bc_roads_gidxON bc_roads USING gist (the_geom gist_geometry_ops);

47

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

CREATE INDEX

Feito isso, para verificar se o seu índice foi criado rode o comando (\d bc_roads):

meu_DB=# \b. c_roads

Tabela "public.bc_roads"Coluna | Tipo | Modificadores————–+——————————+——————————————————–gid | integer | not null defaultnextval(’bc_roads_gid_seq’::regclass)name | character varying(40) |the_geom | geometry |

Índices:"bc_roads_pkey"PRIMARY KEY, btree (gid)"bc_roads_gidx"gist (the_geom)... (segue)

Para atualizar as estatísticas do nosso banco de dados, rode o comando VACUUM ANALYZEpara fazer um "update"geral, ou rode ele apenas na tabela na qual você gerou o índice, seguindoo exemplo:

meu_DB=# VACUUM ANALYZE bc_roads the_geom

Agora realizaremos duas consultas, a primeira sem usar o índice (não-indexada) e a segundausando (indexada). O resultado da segunda consulta será bem mais rápida (isso pode ser facil-mente percebido em computadores mais lentos):

meu_DB=# SELECT gid, nameFROM bc_roadsWHERE CROSSES (the_geom, GeomFromText (’LINESTRING(1220446 477473,1220417 477559)’,-1));

e

meu_DB=# SELECT gid, nameFROM bc_roadsWHERE the_geom && GeomFromText(’LINESTRING(1220446 477473,1220417 477559)’, -1)AND CROSSES(the_geom, GeomFromText (’LINESTRING(1220446 477473,1220417 477559)’,

48

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

-1));

8.1.3 Usando Índices

Índices aceleram de maneira invisível o acesso de dados: uma vez que o índice é construído,o "planejador de consultas"é quem decide quando usar a informação do índice para acelerar aconsulta. Infelizmente, o "planejador de consultas"do PostgreSQL não otimiza bem o uso de ín-dices de GiST, então às vezes as consultas que deveriam usar um índice espacial fazem umabusca seqüencial pela tabela inteira.

Se você acha que seus índices espaciais não estão sendo usados (ou seus índices de atributopara aquele assunto) existem algumas soluções para verificar se eles estão funcionando correta-mente:

Primeiramente, certifique-se que as estatísticas são coletadas sobre o número e distribui-ções dos valores em uma tabela, para proporcionar para o "planejador de consultas"com melhorinformações que permitam a tomada de decisão se usa os índices ou não. Para instalações Post-greSQL 7.4 e anteriores isso é feito rodando o seguinte comando:

update_geometry_stats([nome_da_tabela, nome_da_coluna])

(calcula as estatísticas de distribuições de valores em uma tabela)

e

VACUUM ANALYZE [nome_da_tabela] [nome_da_coluna]

(calcula as estatísticas a respeito do número de valores em uma tabela).

Começando com PostgreSQL 8.0 rodar VACUUM ANALYZE fará ambas as operações. Vocêpode usar o "VACUUM"("limpar") regularmente em seus bancos de dados, para isso basta agen-dar no "cron"para executá-lo fora dos horários de pico do servidor PostgreSQL.

Se "limpar"o seu banco de dados não funcionar, você pode forçar o planejador a usar as in-formações de índice com o seguinte comando:

SET ENABLE_SEQSCAN=OFF

49

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Você deveria apenas usar este comando esporadicamente, e em consultas espacialmente in-dexadas. Já que em geral, o planejador sabe melhor do que você o que fazer a respeito na horade escolher entre os índices B-Tree normais e os GiST. Uma vez que você rodou sua consulta,você deveria considerar a opção de reverter o ENABLE_SEQSCAN ao seu estado original, demaneira que em outras consultas o planejador funcionará de forma normal.

Nota: A partir de versão 0.6 do PostGIS, não deveria ser necessário forçar o planejador a usaros índices com ENABLE_SEQSCAN.

Se você acha que o planejador decide errado sobre o custo de consultas seqüencial ver-sus índice, tente reduzir o valor de "random_page_cost"em postgresql.conf ou usando SET "ran-dom_page_cost"=#. O valor padrão para o parâmetro é 4, tente ajustá-lo para 1 ou 2. Reduziresse o valor faz com que o planejador fique mais inclinado a usar consultas usando o índice.

8.1.4 Vantagens dos Índices

Na construção de uma consulta é importante lembrarmos que somente os operadores basea-dos em retângulos envolventes (bounding box) como &&, podem tirar proveito do índice espacialde GiST. Funções como DISTANCE() não podem usar o índice para otimizar suas operações. Porexemplo, a seguinte consulta seria bastante lenta em uma tabela grande:

SELECT name FROM bc_roadsWHERE DISTANCE( the_geom, GeomFromText( ’POINT(1220000 470000)’, -1 ) ) < 100;

Esta consulta está selecionando todas as geometrias em geom_table que está dentro de 100unidades do ponto (1220000 470000). Esta operação será relativamente lenta porque está cal-culando a distância entre cada ponto da tabela e nosso ponto específico (isto é, um cálculo deDISTANCE() para cada linha da tabela). Podemos evitar isto usando o operador && para reduziro número de cálculos de distância necessários:

SELECT the_geom FROM bc_roadsWHERE the_geom && ’BOX3D(1219900 469900, 1220100 470100)’::box3dAND DISTANCE( the_geom, GeomFromText( ’POINT(1220000 470000)’, -1 ) ) < 100

Esta consulta seleciona as mesmas geometrias, mas faz isto de um modo mais eficiente.Supondo que existe um índice GiST em the_geom, o "planejador de consultas"reconhecerá quepode usar o índice para reduzir o número de linhas antes de calcular o resultado da função dis-tance (). Note que a geometria de BOX3D que é usada dentro da operação && é uma caixaquadrada de 200 unidades e centrada no ponto original - esta é nossa "caixa de procura". O

50

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

operador && usa o índice para reduzir rapidamente o resultado atribuído a nossa busca apenasessas geometrias que têm um retângulo envolvente que se sobrepõem com a nossa "caixa deprocura". Supondo que nossa "caixa de procura"é muito menor que as extensões da tabela degeometria inteira, isto reduzirá drasticamente o número de cálculos de distância que precisam serfeitos.

Uma dica: para medir o consumo de tempo e processamento um recurso útil é colocar ocomando "EXPLAIN"no início de cada consulta.

51

Capítulo 9

Acessando os dados do PostGIS emoutros softwares

Como acessar o PostGIS a partir de outros softwares como o QGIS.

9.1 Lição 7 - Acessando os dados do PostGIS em outros softwares

9.1.1 Acessando os dados do PostGIS em outros softwares

As consultas espaciais (e resultados) no PostGIS não possuem saída gráfica. Quando que-remos apenas estatísticas ou respostas diretas, nada além disso é necessário. Porém em outroscasos, a visualização gráfica nos permite ver e expressar certos detalhes com mais clareza.

Pensando dessa forma a seguir iremos abordar alguns softwares de podem visualizar dadosdo PostGIS.

9.1.2 Visualizando dados exportados do PostGIS

A maneira mais "primitiva"de visualizar dados do PostGIS em outros softwares seria exportaros dados do banco de dados. Um dos formatos mais acessível é o Shapefile.

Para exportar seus dados nesse formato basta realizar o procedimento descrito na seção docurso "Exportando dados no PostGIS".

Outro método alternativo de exportar (e também importar) dados seria usar o pacote de ferra-mentas GIS vetorias OGR (incluso no pacote GDAL). Um exemplo da sua utilização esta à seguir:

> ogr2ogr -f "ESRI Shapefile"nome_do_arquivo_criado.shp"PG:dbname=meu_DB"nome_da_tabela_exportada

52

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

9.1.3 Usando o QGIS

Outra maneira de visualizar dados do PostGIS seria através de softwares desktop GIS. Dentreeles o QGIS é um dos destaques.

O QGIS é um software de visualização de dados espaciais, com um bom suporte a dadosraster e vetorias. Outras funcionalidades adicionais podem ser implementadas através da cons-trução de plugins (como o SPIT - "Shapefile to PostgreSQL Import Tool"). No entanto, para lidarcom os dados do PostGIS no QGIS já existe suporte nativo à:

• simples visualização dos dados;

• realizar consultas usando a interface gráfico do QGIS diretamente no PostGIS e visualizaros resultados gráficamente.

O procedimento de conectar o QGIS ao PostGIS (e PostgreSQL) é feito da seguinte forma:

• criar uma conexão entre o QGIS e o PostgreSQL através de assistente gráfico;

• conectar-se ao banco de dados (PostgreSQL);

• selecionar a camada (tabela a ser visualizada geograficamente) a ser importada;

• adicionalmente podemos usar o WHERE para filtrar os dados à serem importados no QGIS;

• importar a camada.

As principais vantagens de usar diretamente dados que estão em um servidor PostGIS noQGIS seriam:

• conectar-se diretamente ao PostGIS e importar os dados garante um acesso amplo e rápidocaso um grande número de pessoas utilize a mesma base de dados;

• se a base de dados é atualizada constantemente, usar diretamente os dados do servidorevita que pessoas tenham que exportar os dados, e também diminui as chances que elasutilizem apenas arquivos que possam conter dados desatualizados.

9.1.4 Usando Mapserver

Com o crescimento da Internet, ampliaram-se muito as maneiras de disponibilizar informaçõesgeográficas através da Web.

53

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Dentre elas destacamos o Minnesota Mapserver (ou apenas Mapserver). Ele é um servidorde mapas Web para Internet que adapta-se a especificação do Servidor de Mapas na InternetOpenGIS. Com ele podemos criar sites que permitam ao usuários visualizar dados espaciaisatravés da Web.

Outra funcionalidade interessante para nós é capacidade do Mapserver em utilizar direta-mente dados do PostgGIS em websites (mesmo que cada servidor esteja instalado em um má-quina diferente).

Para usar o PostGIS com Mapserver, você precisará conhecer como configurar o Mapserver(algo que está além da extensão desse curso). Ou requisitos mínimos para usar o PostGIS emconjunto com o Mapserver são:

• Versão 0.6 ou mais nova de PostGIS;

• Versão 3.5 ou mais nova de Mapserver.

O Mapserver acessa dados de PostGIS/PostgreSQL como qualquer outro cliente de Post-greSQL (usando a biblioteca libpq). Isto significa que o Mapserver pode ser instalado em qual-quer máquina com acesso de rede (internet ou intranet) e para o servidor de PostGIS, e desdeque o sistema tenha as bibliotecas cliente de PostgreSQL.

Os passos para usar o Mapserver são os seguintes:

1. Compile e instale Mapserver, com qualquer opções que você desejar, sem esquecer a op-ção de configuração -with-postgis"(para habilitar o suporte ao PostGIS);

2. Em seu arquivo de mapas Mapserver, acrescente uma camada de PostGIS. Por exemplo:

LAYERCONNECTIONTYPE postgisNAME "widehighways"# Connect to a remote spatial databaseCONNECTION "user=dbuser dbname=gisdatabase host=bigserver"# Get the lines from the ’geom’ column of the ’roads’ tableDATA "geom from roads"STATUS ONTYPE LINE# Of the lines in the extents, only render the wide highwaysFILTER "type = ’highway’ and numlanes >= 4"CLASS

54

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

# Make the superhighways brighter and 2 pixels wideEXPRESSION ([numlanes] >= 6)COLOR 255 22 22SYMBOL "solid"SIZE 2

ENDCLASS

# All the rest are darker and only 1 pixel wideEXPRESSION ([numlanes] < 6)COLOR 205 92 82

ENDEND

No exemplo acima, as diretivas de PostGIS-específicos são como segue:

CONNECTIONTYPE

Para camadas de PostGIS, este é sempre "postgis."

CONNECTION

A conexão de banco de dados é especificada por um conjunto de variáveis (com os valorespadrões em <>):

user=<usuário> password=<senha_do_usuário>dbname=<nome_do_banco_de_dados> hostname=<servidor> port=<5432>

no exemplo: CONNECTION "user=dbuser dbname=gisdatabase host=bigserver"

Alguns parâmetros podem ser omitidos. Mas no mínimo você deveria colocar o nome dobanco de dados e usuário para se conectar.

DATA

O formato deste parâmetro é «coluna> from <nome_da_tabela>"onde a coluna é a colunaespacial a ser traduzida/visualizada no mapa, e tabela é a fonte dos dados.

55

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

FILTER

O FILTER (filtro) deve ser uma string SQL válida, e que correspondendo a uma consulta SQL(com a palavra-chave "WHERE"). Por exemplo, visualizar apenas as estradas com 6 ou maispistas, use um filtro de "num_lanes >= 6."

3 No seu banco de dados espacial, assegure-se que você tem índices espaciais (GiST) cons-truídos para todas as camadas que serão utilizadas pelo Mapserver.CREATE INDEX [nome_do_índice]ON [nome_da_tabela]USING GIST ( [coluna_de_geometria] GIST_GEOMETRY_OPS );

1. Se você for fazer consulta em suas camadas usando Mapserver também precisará de umíndice "oid".

O Mapserver requer identificadores únicos para cada registro espacial ao fazer as consultas,e o módulo do Mapserver para manipular os dados do PostGIS usa o valor oid PostgreSQL paraprover estes identificadores únicos. Um efeito colateral disto é que para fazer acesso randômicorápido de registros durante as consultas, um índice "oid"é necessário.

Para construir um índice "oid", use o SQL seguinte:

CREATE INDEX [nome_do_índice] ON [nome_da_tabela] ( oid );

56