Você está na página 1de 57

PostGIS

Verso 1.0.0

Sumrio
I Sobre essa Apostila 2 4 9 18
19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 20 20 20 20 21 21 21 22

II Informaes Bsicas III GNU Free Documentation License IV PostGIS

1 O que o PostGIS 2 Plano de ensino 2.1 Objetivo . . . 2.2 Pblico Alvo . 2.3 Pr-requisitos 2.4 Descrio . . 2.5 Metodologia . 2.6 Cronograma 2.7 Programa . . 2.8 Avaliao . . 2.9 Bibliograa .

3 Introduo 3.1 Lio 1 - Introduo ao PostGIS . . . . . . . . . . . . . . . . . 3.1.1 PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Padres OpenGIS (do Open Geospatial Consortium) e PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . sua relao . . . . . . .

. . . . . . com . . .

23 . . 23 . . 23 o . . 24

4 Instalao 25 4.1 Lio 2 - Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.1.1 Instalao a partir dos pacotes binrios . . . . . . . . . . . . . . . . . . . . . 25 4.1.2 Compilando o PostGIS a partir do cdigo fonte . . . . . . . . . . . . . . . . . 26 5 Congurao 29 5.1 Lio 3 - Congurando o PostgreSQL e o PostGIS . . . . . . . . . . . . . . . . . . . 29 5.1.1 Congurando e testando o PostgreSQL . . . . . . . . . . . . . . . . . . . . . 29 5.1.2 Congurando e testando o PostGIS . . . . . . . . . . . . . . . . . . . . . . . 30

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF 34 34 34 34 35 37 38 40 40 40 40 41 42 43 45 45 45 45 48 49 51 51 51 51 52 52

6 Importando e exportando dados no PostGIS 6.1 Lio 4 - Importando e exportando dados . . . . . . . . . . . . . . . . 6.1.1 Importando dados no PostGIS . . . . . . . . . . . . . . . . . . 6.1.2 Usando SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.3 Convertendo dados com o shp2pgsql e importando com o psql 6.1.4 Exportando dados do PostGIS usando SQL . . . . . . . . . . . 6.1.5 Convertendo dados com o pgsql2shp e exportando com o psql 7 Fazendo consultas espaciais 7.1 Lio 5 - Fazendo consultas espaciais 7.1.1 Consultas . . . . . . . . . . . . 7.1.2 Exemplos de SQL espacial . . 7.1.3 Exemplos 1 . . . . . . . . . . . 7.1.4 Exemplos 2 . . . . . . . . . . . 7.1.5 Exemplos 3 . . . . . . . . . . . 8 Construindo ndices 8.1 Lio 6 - Construindo ndices 8.1.1 Construindo ndices . 8.1.2 ndices GiST . . . . . 8.1.3 Usando ndices . . . . 8.1.4 Vantagens dos ndices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

9 Acessando os dados do PostGIS em outros softwares 9.1 Lio 7 - Acessando os dados do PostGIS em outros softwares 9.1.1 Acessando os dados do PostGIS em outros softwares . 9.1.2 Visualizando dados exportados do PostGIS . . . . . . . 9.1.3 Usando o QGIS . . . . . . . . . . . . . . . . . . . . . . 9.1.4 Usando Mapserver . . . . . . . . . . . . . . . . . . . . .

Parte I

Sobre essa Apostila

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Contedo
O contedo dessa apostila fruto da compilao de diversos materiais livres publicados na internet, disponveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.) O formato original deste material bem como sua atualizao est disponvel dentro da licena GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seo de mesmo nome, tendo inclusive uma verso traduzida (no ocial). A reviso e alterao vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Crticas e sugestes construtivas sero bem-vindas a qualquer hora.

Autores
A autoria deste de responsabilidade de Christian do Santos Ferreira (christian.linux@gmail.com). O texto original faz parte do projeto Centro de Difuso de Tecnologia e Conhecimento que vm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informao) em conjunto com outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades no pas. Informaes adicionais podem ser obtidas atravs do email ouvidoria@cdtc.org.br, ou da home page da entidade, atravs da URL http://www.cdtc.org.br.

Garantias
O material contido nesta apostila isento de garantias e o seu uso de inteira responsabilidade do usurio/leitor. Os autores, bem como o ITI e seus parceiros, no se responsabilizam direta ou indiretamente por qualquer prejuzo oriundo da utilizao do material aqui contido.

Licena
Copyright 2006, Instituto Nacional de Tecnologia da Informao (cdtc@iti.gov.br) . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOSTILA. A copy of the license is included in the section entitled GNU Free Documentation License.

Parte II

Informaes Bsicas

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Sobre o CDTC
Objetivo Geral O Projeto CDTC visa a promoo e o desenvolvimento de aes que incentivem a disseminao de solues que utilizem padres abertos e no proprietrios de tecnologia, em proveito do desenvolvimento social, cultural, poltico, tecnolgico e econmico da sociedade brasileira. Objetivo Especco Auxiliar o Governo Federal na implantao do plano nacional de software no-proprietrio e de cdigo fonte aberto, identicando e mobilizando grupos de formadores de opinio dentre os servidores pblicos e agentes polticos da Unio Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negcio da tecnologia da informao e de novos negcios de comunicao com base em software no-proprietrio e de cdigo fonte aberto, oferecendo treinamento especco para tcnicos, prossionais de suporte e funcionrios pblicos usurios, criando grupos de funcionrios pblicos que iro treinar outros funcionrios pblicos e atuar como incentivadores e defensores dos produtos de software no proprietrios e cdigo fonte aberto, oferecendo contedo tcnico on-line para servios de suporte, ferramentas para desenvolvimento de produtos de software no proprietrios e do seu cdigo fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educao, pesquisa, desenvolvimento e teste de produtos de software livre.

Guia do aluno
Neste guia, voc ter reunidas uma srie de informaes importantes para que voc comece seu curso. So elas: Licenas para cpia de material disponvel; Os 10 mandamentos do aluno de Educao a Distncia; Como participar dos foruns e da wikipdia; Primeiros passos. muito importante que voc entre em contato com TODAS estas informaes, seguindo o roteiro acima.

Licena
Copyright 2006, Instituto Nacional de Tecnologia da Informao (cdtc@iti.gov.br). 6

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

dada permisso para copiar, distribuir e/ou modicar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior pblicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cpia da licena est inclusa na seo entitulada "Licena de Documentao Livre GNU".

Os 10 mandamentos do aluno de educao online

1. Acesso Internet: ter endereo eletrnico, um provedor e um equipamento adequado pr-requisito para a participao nos cursos a distncia; 2. Habilidade e disposio para operar programas: ter conhecimentos bsicos de Informtica necessrio para poder executar as tarefas; 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distncia conta muitos pontos, pois ir colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores; 4. Comportamentos compatveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos; 5. Organizao pessoal: planejar e organizar tudo fundamental para facilitar a sua reviso e a sua recuperao de materiais; 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigaes e realiz-las em tempo real; 7. Curiosidade e abertura para inovaes: aceitar novas idias e inovar sempre; 8. Flexibilidade e adaptao: requisitos necessrio mudana tecnolgica, aprendizagens e descobertas; 9. Objetividade em sua comunicao: comunicar-se de forma clara, breve e transparente ponto - chave na comunicao pela Internet; 10. Responsabilidade: ser responsvel por seu prprio aprendizado. O ambiente virtual no controla a sua dedicao, mas reete os resultados do seu esforo e da sua colaborao.

Como participar dos fruns e Wikipdia


Voc tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira o uso dos fruns de notcias e de dvidas gerais que se distinguem pelo uso: . O frum de notcias tem por objetivo disponibilizar um meio de acesso rpido a informaes que sejam pertinentes ao curso (avisos, notcias). As mensagens postadas nele so enviadas a 7

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informao que interesse ao grupo, favor post-la aqui. Porm, se o que voc deseja resolver alguma dvida ou discutir algum tpico especco do curso. recomendado que voc faa uso do Frum de dvidas gerais que lhe d recursos mais efetivos para esta prtica. . O frum de dvidas gerais tem por objetivo disponibilizar um meio fcil, rpido e interativo para solucionar suas dvidas e trocar experincias. As mensagens postadas nele so enviadas a todos participantes do curso. Assim, ca muito mais fcil obter respostas, j que todos podem ajudar. Se voc receber uma mensagem com algum tpico que saiba responder, no se preocupe com a formalizao ou a gramtica. Responda! E no se esquea de que antes de abrir um novo tpico recomendvel ver se a sua pergunta j foi feita por outro participante. A segunda forma se d pelas Wikis: . Uma wiki uma pgina web que pode ser editada colaborativamente, ou seja, qualquer participante pode inserir, editar, apagar textos. As verses antigas vo sendo arquivadas e podem ser 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 "Wikipdia", uma experincia grandiosa de construo de uma enciclopdia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em portugus pelos links: Pgina principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaborao com a aprendizagem do grupo!

Primeiros Passos
Para uma melhor aprendizagem recomendvel que voc siga os seguintes passos: Ler o Plano de Ensino e entender a que seu curso se dispe a ensinar; Ler a Ambientao do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas bsicas do mesmo; Entrar nas lies seguindo a seqncia descrita no Plano de Ensino; Qualquer dvida, reporte ao Frum de Dvidas Gerais.

Perl do Tutor
Segue-se uma descrio do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal um modelo de excelncia: consistente, justo e prossional nos respectivos valores e atitudes, incentiva mas honesto, imparcial, amvel, positivo, respeitador, aceita as idias dos estudantes, paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 8

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

A classicao por um tutor desta natureza proporciona o melhor feedback possvel, crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem. Este tutor ou instrutor: fornece explicaes claras acerca do que ele espera e do estilo de classicao que ir utilizar; gosta que lhe faam perguntas adicionais; identica as nossas falhas, mas corrige-as amavelmente, diz um estudante, e explica porque motivo a classicao foi ou no foi atribuda; tece comentrios completos e construtivos, mas de forma agradvel (em contraste com um reparo de um estudante: os comentrios deixam-nos com uma sensao de crtica, de ameaa e de nervossismo) d uma ajuda complementar para encorajar um estudante em diculdade; esclarece pontos que no foram entendidos, ou corretamente aprendidos anteriormente; ajuda o estudante a alcanar os seus objetivos; exvel quando necessrio; mostra um interesse genuno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); escreve todas as correes de forma legvel e com um nvel de pormenorizao adequado; acima de tudo, devolve os trabalhos rapidamente;

Parte III

GNU Free Documentation License

10

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

(Traduzido pelo Joo S. O. Bueno atravs do CIPSGA em 2001) Esta uma traduo no ocial da Licena de Documentao Livre GNU em Portugus Brasileiro. Ela no publicada pela Free Software Foundation, e no se aplica legalmente a distribuio de textos que usem a GFDL - apenas o texto original em Ingls da GNU FDL faz isso. Entretanto, ns esperamos que esta traduo ajude falantes de portugus a entenderem melhor a GFDL. This is an unofcial translation of the GNU General Documentation License into Brazilian Portuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDLonly the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. Licena de Documentao Livre GNU Verso 1.1, Maro 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 cpias exatas deste documento de licena, mas no permitido alter-lo.

INTRODUO
O propsito desta Licena deixar um manual, livro-texto ou outro documento escrito "livre"no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copi-lo ou redistribui-lo, com ou sem modicaes, comercialmente ou no. Secundariamente, esta Licena mantm para o autor e editor uma forma de ter crdito por seu trabalho, sem ser considerado responsvel pelas modicaes feitas por terceiros. Esta Licena um tipo de "copyleft"("direitos revertidos"), o que signica que derivaes do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licena Pblica Geral (GNU GPL), que um copyleft para software livre. Ns zemos esta Licena para que seja usada em manuais de software livre, por que software livre precisa de documentao livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licena no est restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele publicado como um livro impresso. Ns recomendamos esta Licena principalmente para trabalhos cujo propsito seja de introduo ou referncia.

APLICABILIDADE E DEFINIES
Esta Licena se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribudo sob os termos desta Licena. O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do pblico um

11

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

licenciado e referida como "voc". Uma "Verso Modicada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modicaes e/ou traduzida em outra lngua. Uma "Seo Secundria" um apndice ou uma seo inicial do Documento que trata exclusivamente da relao dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e no contm nada que poderia ser includo diretamente nesse assunto geral (Por exemplo, se o Documento em parte um livro texto de matemtica, a Seo Secundria pode no explicar nada de matemtica). Essa relao poderia ser uma questo de ligao histrica com o assunto, ou matrias relacionadas, ou de posies legais, comerciais, loscas, ticas ou polticas relacionadas ao mesmo. As "Sees Invariantes"so certas Sees Secundrias cujos ttulos so designados, como sendo de Sees Invariantes, na nota que diz que o Documento publicado sob esta Licena. Os "Textos de Capa"so certos trechos curtos de texto que so listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto publicado sob esta Licena. Uma cpia "Transparente"do Documento signica uma cpia que pode ser lida automaticamente, representada num formato cuja especicao esteja disponvel ao pblico geral, cujos contedos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genricos ou (para imagens compostas de pixels) programas de pintura genricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passvel de servir como entrada a formatadores de texto ou para traduo automtica para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cpia feita em um formato de arquivo outrossim Transparente cuja constituio tenha sido projetada para atrapalhar ou desencorajar modicaes subsequentes pelos leitores no Transparente. Uma cpia que no "Transparente" chamada de "Opaca". Exemplos de formatos que podem ser usados para cpias Transparentes incluem ASCII simples sem marcaes, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatvel com os padres, e projetado para ser modicado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietrios que podem ser lidos e editados apenas com processadores de texto proprietrios, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edio no estejam disponveis para o pblico, e HTML gerado automaticamente por alguns editores de texto com nalidade apenas de sada. A "Pgina do Ttulo"signica, para um livro impresso, a pgina do ttulo propriamente dita, mais quaisquer pginas subsequentes quantas forem necessrias para conter, de forma legvel, o material que esta Licena requer que aparea na pgina do ttulo. Para trabalhos que no tenham uma pgina do ttulo, "Pgina do Ttulo"signica o texto prximo da apario mais proeminente do ttulo do trabalho, precedendo o incio do corpo do texto.

12

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

FAZENDO CPIAS EXATAS


Voc pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou no comercial, desde que esta Licena, as notas de copyright, e a nota de licena dizendo que esta Licena se aplica ao documento estejam reproduzidas em todas as cpias, e que voc no acrescente nenhuma outra condio, quaisquer que sejam, s desta Licena. Voc no pode usar medidas tcnicas para obstruir ou controlar a leitura ou confeco de cpias subsequentes das cpias que voc zer ou distribuir. Entretanto, voc pode aceitar compensao em troca de cpias. Se voc distribuir uma quantidade grande o suciente de cpias, voc tambm precisa respeitar as condies da seo 3. Voc tambm pode emprestar cpias, sob as mesmas condies colocadas acima, e tambm pode exibir cpias publicamente.

FAZENDO CPIAS EM QUANTIDADE


Se voc publicar cpias do Documento em nmero maior que 100, e a nota de licena do Documento obrigar Textos de Capa, voc precisar incluir as cpias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capa na capa de trs. Ambas as capas tambm precisam identicar clara e legivelmente voc como o editor dessas cpias. A capa da frente precisa apresentar o ttulo completo com todas as palavras do ttulo igualmente proeminentes e visveis. Voc pode adicionar outros materiais s capas. Fazer cpias com modicaes limitadas s capas, tanto quanto estas preservem o ttulo do documento e satisfaam a essas condies, pode ser tratado como cpia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legvel, voc deve colocar os primeiros (tantos quantos couberem de forma razovel) na capa verdadeira, e continuar os outros nas pginas adjacentes. Se voc publicar ou distribuir cpias Opacas do Documento em nmero maior que 100, voc precisa ou incluir uma cpia Transparente que possa ser lida automaticamente com cada cpia Opaca, ou informar, em ou com, cada cpia Opaca a localizao de uma cpia Transparente completa do Documento acessvel publicamente em uma rede de computadores, qual o pblico usurio de redes tenha acesso a download gratuito e annimo utilizando padres pblicos de protocolos de rede. Se voc utilizar o segundo mtodo, voc precisar tomar cuidados razoavelmente prudentes, quando iniciar a distribuio de cpias Opacas em quantidade, para assegurar que esta cpia Transparente vai permanecer acessvel desta forma na localizao especicada por pelo menos um ano depois da ltima vez em que voc distribuir uma cpia Opaca (diretamente ou atravs de seus agentes ou distribuidores) daquela edio para o pblico. pedido, mas no obrigatrio, que voc contate os autores do Documento bem antes de redistribuir qualquer grande nmero de cpias, para lhes dar uma oportunidade de prover voc com uma verso atualizada do Documento.

13

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

MODIFICAES
Voc pode copiar e distribuir uma Verso Modicada do Documento sob as condies das sees 2 e 3 acima, desde que voc publique a Verso Modicada estritamente sob esta Licena, com a Verso Modicada tomando o papel do Documento, de forma a licenciar a distribuio e modicao da Verso Modicada para quem quer que possua uma cpia da mesma. Alm disso, voc precisa fazer o seguinte na verso modicada: A. Usar na Pgina de Ttulo (e nas capas, se houver alguma) um ttulo distinto daquele do Documento, e daqueles de verses anteriores (que deveriam, se houvesse algum, estarem listados na seo "Histrico do Documento"). Voc pode usar o mesmo ttulo de uma verso anterior se o editor original daquela verso lhe der permisso; B. Listar na Pgina de Ttulo, como autores, uma ou mais das pessoas ou entidades responsveis pela autoria das modicaes na Verso Modicada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); C. Colocar na Pgina de Ttulo o nome do editor da Verso Modicada, como o editor; D. Preservar todas as notas de copyright do Documento; E. Adicionar uma nota de copyright apropriada para suas prprias modicaes adjacente s outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licena dando ao pblico o direito de usar a Verso Modicada sob os termos desta Licena, na forma mostrada no tpico abaixo; G. Preservar nessa nota de licena as listas completas das Sees Invariantes e os Textos de Capa requeridos dados na nota de licena do Documento; H. Incluir uma cpia inalterada desta Licena; I. Preservar a seo entitulada "Histrico", e seu ttulo, e adicionar mesma um item dizendo pelo menos o ttulo, ano, novos autores e editor da Verso Modicada como dados na Pgina de Ttulo. Se no houver uma sesso denominada "Histrico"no Documento, criar uma dizendo o ttulo, ano, autores, e editor do Documento como dados em sua Pgina de Ttulo, ento adicionar um item descrevendo a Verso Modicada, tal como descrito na sentena anterior; J. Preservar o endereo de rede, se algum, dado no Documento para acesso pblico a uma cpia Transparente do Documento, e da mesma forma, as localizaes de rede dadas no Documento para as verses anteriores em que ele foi baseado. Elas podem ser colocadas na seo "Histrico". Voc pode omitir uma localizao na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da verso a que ela se rera der sua permisso; K. Em qualquer seo entitulada "Agradecimentos"ou "Dedicatrias", preservar o ttulo da 14

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

seo e preservar a seo em toda substncia e m de cada um dos agradecimentos de contribuidores e/ou dedicatrias dados; L. Preservar todas as Sees Invariantes do Documento, inalteradas em seus textos ou em seus ttulos. Nmeros de seo ou equivalentes no so considerados parte dos ttulos da seo; M. Apagar qualquer seo entitulada "Endossos". Tal sesso no pode ser includa na Verso Modicada; N. No reentitular qualquer seo existente com o ttulo "Endossos"ou com qualquer outro ttulo dado a uma Seo Invariante. Se a Verso Modicada incluir novas sees iniciais ou apndices que se qualiquem como Sees Secundrias e no contenham nenhum material copiado do Documento, voc pode optar por designar alguma ou todas aquelas sees como invariantes. Para fazer isso, adicione seus ttulos lista de Sees Invariantes na nota de licena da Verso Modicada. Esses ttulos precisam ser diferentes de qualquer outro ttulo de seo. Voc pode adicionar uma seo entitulada "Endossos", desde que ela no contenha qualquer coisa alm de endossos da sua Verso Modicada por vrias pessoas ou entidades - por exemplo, declaraes de revisores ou de que o texto foi aprovado por uma organizao como a denio ocial de um padro. 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 nal da lista de Textos de Capa na Verso Modicada. Somente uma passagem de Texto da Capa da Frente e uma de Texto 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 por voc ou por acordo feito com alguma entidade para a qual voc esteja agindo, voc no pode adicionar um outro; mas voc pode trocar o antigo, com permisso explcita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento no do permisso por esta Licena para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Verso Modicada.

COMBINANDO DOCUMENTOS
Voc pode combinar o Documento com outros documentos publicados sob esta Licena, sob os termos denidos na seo 4 acima para verses modicadas, desde que voc inclua na combinao todas as Sees Invariantes de todos os documentos originais, sem modicaes, e liste todas elas como Sees Invariantes de seu trabalho combinado em sua nota de licena. O trabalho combinado precisa conter apenas uma cpia desta Licena, e Sees Invariantes Idnticas com multiplas ocorrncias podem ser substitudas por apenas uma cpia. Se houver mltiplas Sees Invariantes com o mesmo nome mas com contedos distintos, faa o ttulo de 15

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

cada seo nico adicionando ao nal do mesmo, em parnteses, o nome do autor ou editor origianl daquela seo, se for conhecido, ou um nmero que seja nico. Faa o mesmo ajuste nos ttulos de seo na lista de Sees Invariantes nota de licena do trabalho combinado. Na combinao, voc precisa combinar quaisquer sees entituladas "Histrico"dos diversos documentos originais, formando uma seo entitulada "Histrico"; da mesma forma combine quaisquer sees entituladas "Agradecimentos", ou "Dedicatrias". Voc precisa apagar todas as sees entituladas como "Endosso".

COLETNEAS DE DOCUMENTOS
Voc pode fazer uma coletnea consitindo do Documento e outros documentos publicados sob esta Licena, e substituir as cpias individuais desta Licena nos vrios documentos com uma nica cpia incluida na coletnea, desde que voc siga as regras desta Licena para cpia exata de cada um dos Documentos em todos os outros aspectos. Voc pode extrair um nico documento de tal coletnea, e distribu-lo individualmente sob esta Licena, desde que voc insira uma cpia desta Licena no documento extrado, e siga esta Licena em todos os outros aspectos relacionados cpia exata daquele documento.

AGREGAO COM TRABALHOS INDEPENDENTES


Uma compilao do Documento ou derivados dele com outros trabalhos ou documentos separados e independentes, em um volume ou mdia de distribuio, no conta como uma Verso Modicada do Documento, desde que nenhum copyright de compilao seja reclamado pela compilao. Tal compilao chamada um "agregado", e esta Licena no se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, s por conta de terem sido assim compilados, e eles no so trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seo 3 for aplicvel a essas cpias do Documento, ento, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Seno eles precisaro aparecer nas capas de todo o agregado.

TRADUO
Traduo considerada como um tipo de modicao, ento voc pode distribuir tradues do Documento sob os termos da seo 4. A substituio de Sees Invariantes por tradues requer uma permisso especial dos detentores do copyright das mesmas, mas voc pode incluir tradues de algumas ou de todas as Sees Invariantes em adio s verses orignais dessas Sees Invariantes. Voc pode incluir uma traduo desta Licena desde que voc tambm inclua a verso original em Ingls desta Licena. No caso de discordncia entre a traduo e a

16

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

verso original em Ingls desta Licena, a verso original em Ingls prevalecer.

TRMINO
Voc no pode copiar, modicar, sublicenciar, ou distribuir o Documento exceto como expressamente especicado sob esta Licena. Qualquer outra tentativa de copiar, modicar, sublicenciar, ou distribuir o Documento nula, e resultar automaticamente no trmino de seus direitos sob esta Licena. Entretanto, terceiros que tenham recebido cpias, ou direitos de voc sob esta Licena no tero suas licenas terminadas, tanto quanto esses terceiros permaneam em total acordo com esta Licena.

REVISES FUTURAS DESTA LICENA


A Free Software Foundation pode publicar novas verses revisadas da Licena de Documentao Livre GNU de tempos em tempos. Tais novas verses sero similares em espirito verso presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupaes. Veja http://www.gnu.org/copyleft/. A cada verso da Licena dado um nmero de verso distinto. Se o Documento especicar que uma verso particular desta Licena "ou qualquer verso posterior"se aplica ao mesmo, voc tem a opo de seguir os termos e condies daquela verso especca, ou de qualquer verso posterior que tenha sido publicada (no como rascunho) pela Free Software Foundation. Se o Documento no especicar um nmero de Verso desta Licena, voc pode escolher qualquer verso j publicada (no como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licena para seus documentos Para usar esta Licena num documento que voc escreveu, inclua uma cpia desta Licena no documento e ponha as seguintes notas de copyright e licenas logo aps a pgina de ttulo: Copyright (c) ANO SEU NOME. dada permisso para copiar, distribuir e/ou modicar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior publicada pela Free Software Foundation; com as Sees Invariantes sendo LISTE SEUS TTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cpia da licena est inclusa na seo entitulada "Licena de Documentao Livre GNU". Se voc no tiver nenhuma Seo Invariante, escreva "sem Sees Invariantes"ao invs de dizer quais so invariantes. Se voc no tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invs de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos no triviais de cdigo de programas, ns recomendamos a publicao desses exemplos em paralelo sob a sua escolha de licena de software livre,

17

CDTC

Centro de Difuso 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

Captulo 1

O que o PostGIS
O PostGIS uma extenso espacial gratuita e de cdigo fonte livre. Sua construo feita sobre o sistema de gerenciamento de banco de dados objeto relacional (SGBDOR) PostgreSQL, que permite o uso de objetos GIS (Sistemas de Informao Geogrca) ser armazenado em banco de dados. PostGIS inclui suporte para ndices espaciais GiST e R-Tree, alm de funes para anlise bsica e processamento de objetos GIS.

20

Captulo 2

Plano de ensino
2.1 Objetivo
Capacitar os prossionais a especicarem e implantarem projetos utilizando o PostGIS (banco de dados espaciais).

2.2 Pblico Alvo


Tcnicos que desejam trabalhar com PostGIS.

2.3 Pr-requisitos
Noes bsicas de Linux e Geoprocessamento.

2.4 Descrio
O curso de PostGIS ser realizado na modalidade EAD e utilizar a plataforma Moodle como ferramenta de aprendizagem. Ele composto de dois mdulos de aprendizado e uma avaliao nal. O material didtico estar disponvel on-line de acordo com as datas pr-estabelecidas no calendrio. A verso utilizada para o PostGIS ser a 1.1.3. Todo o material est no formato de lies, e estar disponvel ao longo do curso. As lies podero ser acessadas quantas vezes forem necessrias. Ao nal de cada semana do curso ser disponibilizada a prova referente ao mdulo estudado anteriormente que tambm conter perguntas sobre os textos indicados. Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova.

2.5 Metodologia
O curso est dividido da seguinte maneira:

21

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

2.6 Cronograma
Introduo, instalao e congurao; Importando e exportando dados, consultas, criao de ndices e acesso a partir de outros softwares. As lies contm o contedo principal. Elas podero ser acessadas quantas vezes forem necessrias, desde que esteja dentro da semana programada. Ao nal de uma lio, voc receber uma nota de acordo com o seu desempenho. Responda com ateno s perguntas de cada lio, pois elas sero consideradas na sua nota nal. Caso sua nota numa determinada lio for menor do que 6.0, sugerimos que voc faa novamente esta lio. Ao nal do curso ser disponibilizada a avaliao referente ao curso. Tanto as notas das lies quanto a da avaliao sero consideradas para a nota nal. Todos os mdulos caro visveis para que possam ser consultados durante a avaliao nal. Aconselhamos a leitura da "Ambientao do Moodle"para que voc conhea a plataforma de Ensino a Distncia, evitando diculdades advindas do "desconhecimento"sobre a mesma. Os instrutores estaro a sua disposio ao longo de todo curso. Qualquer dvida dever ser enviada no frum. Diariamente os monitores daro respostas e esclarecimentos.

2.7 Programa
O curso de PostGIS oferecer o seguinte contedo: Introduo ao PostGIS Instalao Congurando o PostgreSQL e o PostGIS Importando e exportando dados Fazendo consultas espaciais Construindo ndices Acessando os dados do PostGIS em outros softwares

2.8 Avaliao
Toda a avaliao ser feita on-line. Aspectos a serem considerados na avaliao: Iniciativa e autonomia no processo de aprendizagem e de produo de conhecimento; Capacidade de pesquisa e abordagem criativa na soluo dos problemas apresentados. Instrumentos de avaliao: Participao ativa nas atividades programadas. 22

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Avaliao ao nal do curso. O participante far vrias avaliaes referente ao contedo do curso. Para a aprovao e obteno do certicado o participante dever obter nota nal maior ou igual a 6.0 de acordo com a frmula abaixo: Nota Final = ((ML x 7) + (AF x 3)) / 10 = Mdia aritmtica das lies AF = Avaliaes

2.9 Bibliograa
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 empacotados para esse distribuio. 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 padres OpenGIS: http://www.opengeospatial.org Especicaes Web Map OpenGIS: http://www.opengis.org/techno/specs/01-047r2.pdf

23

Captulo 3

Introduo

Uma pequena introduo sobre o PostGIS e os padres OpenGIS.

3.1 Lio 1 - Introduo ao PostGIS


3.1.1 PostGIS
PostGIS um mdulo de extenso do Banco de Dados ( DB ) gratuito PostgreSQL. O PostGIS adiciona "capacidades espaciais"ao PostgreSQL e permitindo que esse se torne um repositrio de dados para os Sistemas de Informaes Geogrcas (SIG). Isso ocorre nos mesmos moldes de solues pagas como o SDE - Spatial Database Engine da ESRI a extenso Spatial da Oracle e o Spatial Extender do DB2 da IBM.

No PostGIS est incluso suporte para todas as funcionalidades e objetos denidos na especicao "Simple Features for SQL"(SFSQL) do padro OpenGIS (Open Geospatial Consortium - OGC). Nele so denidos funes que permitem consultas e manipulaes de dados espaciais atravs de comandos SQL no PostgreSQL.

Devido sua aderncia pelo formato SFSQL, o PostGIS torna-se uma ferramenta convel por usar funes padronizadas e abertas ao manipular os dados espaciais. Com isso muitas 24

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

aplicaes (Mapserver, JUMP, QGIS, etc) podem lidar com o PostGIS e acessar/manipular seus dados. Entretanto, no PostGIS tambm so inclusas um nmero enorme de funes SQL que permitem interagir com dados espaciais sem a necessidade de um SIG.

Alm disso, utilizar o PostGIS em um servidor poderoso (leia-se, mquina com grande porte de processamento) livra o usurio e seu software cliente da tarefa de lidar com o processamento das consultas ao DB. Isso evita que o usurio tenha que armazenar e processar um grande nmero de informaes, e ainda permite que a base de dados seja acessada e consultada por um grande nmero de usurios (na intranet ou internet).

3.1.2 Padres OpenGIS (do Open Geospatial Consortium) e sua relao com o PostGIS
Em 1994 foi criado o consrcio internacional Open Geospatial (OGC - Open Geospatial Consortium), denomidado anteriormente de OpenGIS. Ele possui a misso de desenvolver especicaes para interfaces espaciais que sero disponibilizadas livremente para uso geral.

Essa iniciativa nasceu para garantir a interoperabilidade de softwares atravs da padronizao das funes que tratam dados espaciais e permitir que todos os softwares de SIG troquem dados entre si (abrir, ler e salvar). Apesar disso ser o ideal, o que pode ser visto que alguns fabricantes procuram criar seus prprios formatos de dados, atormentando assim a troca de informaes entre os diferentes SIG e aprisionando o usurio dentro de formatos proprietrios.

Alm de garantir interoperabilidade, outro fator interessante dos padres OpenGIS que ao trabalhar-se dentro desses formatos (e sem copyright ou patentes), o usurio torna-se independente do software, garantindo assim uma vida til e longa para os seus projetos com dados espaciais.

Por uma coincidncia histrica, os padres abertos criados pelo OGC comearam a ganhar maturidade no mesmo perodo em que projetos de softwares livres comearam a surgir para o setor de Geoprocessamento. Assim os softwares j "nascem"com o OpenGIS "embutido"(como o PostGIS).

Atualmente os sistemas proprietrios tambm implementam alguns padres OGC porm so os softwares livres que aderem mais rapidamente ao OpenGIS, tornando a escolha pelos softwares livres a escolha ideal para criar uma arquitetura seguindo os padres abertos OGC.

25

Captulo 4

Instalao
Instalao do PostGIS usando binrios e atravs do cdigo fonte.

4.1 Lio 2 - Instalao


4.1.1 Instalao a partir dos pacotes binrios
Para a instalao do PostgreSQL e PostGIS o usurio geralmente tem duas opes: compilar a partir do cdigo-fonte ou usar binrios. Nesta seo abordaremos a instalao utilizando pacotes pr-compilados.

Como o GNU/Linux um sistema operacional tambm focado para servidores, usar os binrios do PostgreSQL simples, j que a maioria das distribuies GNU/Linux possuem esse software pr-compilado e de fcil instalao.

Para o PostGIS a distribuio Debian (Etch/Testing e Sid/Unstable) j dispe desse pacote que pode ser facilmente instalado com os comandos (como root):

> apt-get update > apt-get install postgis

Caso o PostgreSQL ainda no esteja presente/instalado ele ser automaticamente selecionado e instalado antes de instalar o PostGIS. Nesse procedimento todas as dependncias do PostGIS e PostgreSQL tambm sero automaticamente instaladas.

No Debian Sarge (Stable) o pacote do PostGIS tambm est disponvel, mas nesse caso necessrio utilizar um outro repositrio (DebianGIS), j que esse software ainda no fazia parte

26

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

da "rvore"ocial do Debian na poca do lanamento do Sarge. Para adicion-lo basta inserir no arquivo 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 instalao descrito anteriormente para as outras verses do Debian.

Para outra distribuio GNU/Linux, o Fedora Core 4 e 5, tambm existem pacotes do PostGIS. Entretanto, esses no so atualizados com a mesma freqncia do Debian. Nesse caso o procedimento de instalao consiste em fazer download manual do PostGIS e instal-lo com o seguinte comando (como root):

> rpm -ivh postgis_pacote.rpm

(onde "postgis_pacote" o nome do arquivo do download, e nesse caso assumido que o PostgreSQL e todas as dependncias do PostGIS (Proj4 e GEOS) j estejam previamente instaladas).

4.1.2 Compilando o PostGIS a partir do cdigo fonte


Para a grande maioria das distribuies GNU/Linux (OpenSuSE, Ubuntu, Slackware, Mandriva, etc) no h binrios do PostGIS, ento nesse caso a nica maneira compil-lo a partir do cdigo-fonte. Para o PostgreSQL no ser abordado esse procedimento j que ele est disponvel (e empacotado) para todas as grandes distribuies.

Compilar (e instalar) o PostGIS geralmente uma tarefa relativamente simples e rpida. Porm, necessrio cumprir alguns requisitos:

PostgreSQL 7.2 ou superior instalado (inclusive o pacote "dev"ou arquivos de desenvolvimento); Compilador GNU C (gcc). Outros compiladores ANSI C podem ser usados, mas existem maiores chances de haver problemas;

27

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

GNU Make (gmake ou make). Todas as distribuies o incluem, mas nem todas o instalam por padro. Outras verses do make podem no conseguir processar o arquivo Makele; (recomendado) Proj4 - biblioteca de projees cartogrcas. Essa biblioteca necessria caso o usurio queira ter suporte a reprojeo de coordenadas. Caso a sua distribuio no possua o Proj4 ele esta disponvel para download nesse endereo: http://proj.maptools.org; (recomendado) GEOS - biblioteca de geometrias. necessria para executar consultas no PostGIS que testam e fazem operaes com geometrias. Caso a sua distribuio no possua o GEOS, ele est disponvel para download nesse endereo: http://geos.refractions.net.

Aps tudo estar checado e em ordem, chegou a hora de compilar o PostGIS. Os passos so os seguintes:

Fazer download da ltima verso do PostGIS (em nosso caso a 1.1.3 - verso utilizada durante a confeco desse curso) no endereo: http://postgis.refractions.net; Aps download o prximo passo descomprimir o nosso arquivo, no exemplo chama-se "postgis-1.1.3.tar.gz", com o comando abaixo (sim, realmente tm um sinal de - (menos) no nal da linha):

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

Entre no diretrio do postgis-1.1.3 e rode:

> ./congure

NOTA: caso o Proj4 ou GEOS no sejam encontrados isso ser informado ao nal desse comando. Da ser necessrio especicar no congure o caminho (PATH) para as bibliotecas que no forem encontrados. O comando caria:

> ./congure with-proj=PATH

NOTA: Erros no congure (ou nos comandos que viro a seguir) em geral so devidos a pacotes adicionais que esto faltando. Logo, necessrio instal-los para prosseguir at o nal da instalao. 28

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Agora chegou a hora de compilar e instalar o PostGIS. Os comandos so:

> make

> make install

29

Captulo 5

Congurao
Congurao do PostgreSQL e do PostGIS.

5.1 Lio 3 - Congurando o PostgreSQL e o PostGIS


5.1.1 Congurando e testando o PostgreSQL
Nessa seo iremos inicializar o PostgreSQL e o PostGIS, e preparar nosso primeiro banco de dados para receber os dados espaciais.

Os passos a seguir devem ser executados como usurio "postgres". Para fazer isso use o comando "su postgres"( necessrio acesso a senha desse usurio).

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 utilizado.

Depois dever aparecer a seguinte mensagem:

* Starting PostgreSQL 8.1 database server [ ok ]

Ok, j estamos rodando o PostgreSQL!

30

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Os seguintes comandos devero ser executados como o usurio postgres, que o usurio primrio do PostgreSQL. Para se tornar o usurio postgres, execute:

# su postgres

Pronto. Agora, para testar e ver quais os bancos de dados que esto disponveis use o comando:

> psql -l

O resultado (no exemplo) foi:

Lista dos bancos de dados Nome | Dono | Codicao ++postgres | postgres | UTF8 project1 | postgres | UTF8 template0 | postgres | UTF8 template1 | 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 Congurando e testando o PostGIS


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

> create language plpgsql meu_DB

Agora carregue o arquivo lwpostgis.sql, ele serve para carregar no PostgreSQL denies de objetos e funes do PostGIS. Na nossa instalao, por cdigo-fonte, o arquivo est no diretrio 31

CDTC

Centro de Difuso 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 denies do sistema de coordenadas EPSG.

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

IMPORTANTE: Caso a instalao tenha sido feita atravs do apt-get, esses arquivos podem estar em locais diferentes no sistema de arquivos. Por exempo, aps instalar o postgis no Debian testing, esses arquivos se encontram em "/usr/share/postgresql-8.1-postgis/". Para descobrir onde esto 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 aborted, 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 block ROLLBACK VACUUM

Apenas signicam que os objetos e funes do PostGIS j foram carregados em nosso banco de dados.

32

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Testando o PostGIS Para vericar se o PostGIS est funcionando corretamente no nosso banco de dados recm criado ( meu_DB ) vamos rodar alguns comandos simples de SQL.

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

meu_DB=# \dt

Lista de relaes Esquema | Nome | Tipo | Dono +-++public | geometry_columns | tabela | postgres public | spatial_ref_sys | tabela | postgres (2 registros)

No segundo comando iremos ver o nmero 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 normal. NOTA: esse valor pode variar em diferentes verses do PostGIS.

O terceiro comando seria vericar se as funes do PostGIS (coluna Nome) foram devidamente carregadas em nosso banco ( meu_DB ). NOTA: dependendo da verso do PostGIS o resultado pode ser diferente.

meu_DB-# \df postgis*

33

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Lista de funes 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, smallint public | postgis_gist_sel | double precision | internal, oid, internal, integer public | 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 vericar a verso do PostGIS que est instalada atravs do seguinte comando:

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 verso instalada a 1.1(.3). Tambm temos a conrmao que as bibliotecas GEOS e PROJ esto sendo utilizadas pelo PostGIS (j que elas tm o status igual 1).

34

Captulo 6

Importando e exportando dados no PostGIS


Lio sobre como inserir e extrair os dados do banco.

6.1 Lio 4 - Importando e exportando dados


6.1.1 Importando dados no PostGIS
Uma vez criado o banco de dados com funes espaciais ( meu_DB ) estamos prontos para inserir os dados de GIS nele. Existem vrios caminhos para entrar com os dados espaciais no banco de dados PostGIS/PostgreSQL. Aqui iremos abordar dois: usando comandos de SQL ou usando os programas de importao e exportao de arquivo Shapele para formato SQL (shp2pgsql) e o carregador de dados (psql).

6.1.2 Usando SQL


Se voc pode converter dados para modo texto, ento usando SQL formatado poderia ser o modo mais fcil de entrar com seus dados em PostGIS. Como no Oracle e outros bancos de dados de SQL, os dados podem ser carregados em grandes quantidades concatenando um grande arquivo de texto cheio de declaraes SQL ("INSERT") dentro do terminal SQL.

A importao de um arquivo texto (teste.sql por exemplo) poderia se parecer como o exemplo a 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 operao crie um arquivo .TXT com as trs linhas de comando SQL acima e nomeie o arquivo de "teste.sql".

35

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Antes de importar esse arquivo necessrio, no entanto, criar a tabela onde os dados sero inseridos. 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 PostgreSQL usando o comando "psql":

> psql -d meu_DB -f teste.sql INSERT 0 1 INSERT 0 1 INSERT 0 1 Agora para testar os dados iremos realizar uma consulta que mede a distncia entre todos os pontos (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.07106781186548 X Axis | POINT(5 0) | 5 Y Axis | POINT(0 5) | 5

6.1.3 Convertendo dados com o shp2pgsql e importando com o psql


Para a importao de dados no PostGIS tambm podemos utilizar o comando shp2pgsql. Ele converte arquivos ESRI Shapele para o formato SQL, e que depois podem ser inseridos no PostGIS usando o comando psql.

O comando psql tem vrios parmetros para serem utilizados na linha de comando:

36

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

-d Exclui a tabela do banco de dados antes de criarmos uma nova tabela com os dados do arquivo Shapele; -a Acrescenta dados de um arquivo Shapele na tabela de banco de dados. Note que, para usar esta opo para carregar arquivos mltiplos, os arquivos tm que ter os mesmos atributos e os mesmos tipos de dados; -c Cria uma nova tabela e insere dados do arquivo Shapele. Este parmetro o modo padro; -p Produz somente o cdigo do SQL da criao da tabela, sem adicionar nenhum dado ao banco de dados. Isto pode ser usado se voc necessitar separar completamente as etapas da criao da tabela do carregamento dos dados; -D Comando usado para importar sries de dados muito grandes. Usa o formato do "dump"do PostgreSQL para a sada de dados. Isto pode ser combinado com -a, -o e -d. muito mais rpido carregar do que o default de insero (comando "INSERT") do formato SQL; -s <SRID> Cria e insere tabelas de geometria com o SRID especicado; -k Conserva formato dos identicadores (coluna, esquema e atributos). Note que os atributos em Shapele so todos MAISCULOS; -i Fora todos os inteiros a usarem o formato de 32-bits (no cria inteiros de 64-bits, mesmo se o cabealho DBF aparenta permitir isso); -I Cria um ndice GIST na coluna de geometria; -w Formato de sada WKT, para o uso com verses de PostGIS anteriores (0.x). Note que isto introduzir deriva nas coordenadas e que deixar cair os valores M dos Shapeles.

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

Agora iremos realizar uma seo de exemplo para usar o programa de traduo de Shapele para formato SQL (shp2pgsql) para criar um arquivo em formato SQL, e em seguida import-lo no banco de dados usando o comando psql:

> shp2pgsql bc_roads.shp bc_roads > bc_roads.sql

Nota: se o shp2pgsql no estiver disponvel com um comando no seu terminal, necessrio para rod-lo dar o caminho ("path") do executvel.

> psql -d meu_DB -f roads.sql

A converso e importao de dados podem ser feitos em um nico comando se concatenarmos (como no UNIX) os dois comandos: 37

CDTC

Centro de Difuso 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 extrados do banco usando comandos SQL ou o importardor/exportador de arquivos Shapele.

O meio mais direto de extrair dados do banco de dados usar um comando SQL (SELECT) para selecionar dados atravs de uma consulta, e exportar as colunas resultantes em um arquivo de 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 Rd 2 | MULTILINESTRING((1205906.3 460789.7,1205907.3 460776.4)) | No 1 Rd 3 | MULTILINESTRING((1205907.3 460776.4,1205913.6 460638.8)) | No 1 Rd 4 | MULTILINESTRING((1205913.6 460638.8,1205919.6 460513.4)) | No 1 Rd 5 | MULTILINESTRING((1205919.6 460513.4,1205920.8 460482)) | No 1 Rd 6 | MULTILINESTRING((1211706.8 462048.2,1211710.3 461877)) | Seaham Cres 7 | MULTILINESTRING((1212105 462099.5,1212160.1 462102.5)) | Seahaven Pl (7 registros)

Porm, haver momentos em que restries sero necessrias para reduzir o nmero de campos retornados. No caso de restries baseadas em atributos, apenas use a mesma sintaxe normal de SQL com uma tabela no espacial. No caso de restries espaciais, os operadores seguintes so disponveis/teis:

&& Este operador diz se o retngulo envolvente (bounding box) de uma geometria intersecta o retngulo envolvente de outra.

= Estes operadores testam se duas geometrias so geometricamente idnticas. Por exemplo, 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 "ingnuo", e s testa se o retngulo envolvente (bounding box) das geometrias o mesmo. 38

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Logo, voc pode usar estes operadores em consultas. Note que ao especicar geometrias e retngulos na linha de comando SQL, voc tem que transformar as representaes de caracteres (string) explicitamente em geometrias usando a funo "GeometryFromText () ". Por exemplo: SELECT name FROM bc_roads WHERE 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 era igual aquele valor.

Ao usar o operador "&& ", voc pode especicar tanto um retngulo (BOX3D) como caracterstica de comparao como uma geometria. Quando voc especica uma geometria o seu retngulo envolvente (bounding box) que ser usado para a comparao. SELECT name FROM bc_roads WHERE the_geom && GeomFromText(POLYGON((1212105 462099.5,1212160.1 462102.5, 1212105 462099.5)),-1);

Ento, a consulta anterior usar o retngulo envolvente do polgono para propsitos de comparao.

A consulta espacial mais comum provavelmente ser uma consulta "frame-based", usada por um software cliente, como um visualizador de dados ou servidor de mapas na web, obter o "map-frame"(representao grca - gura) para exibio. Usando um objeto "BOX3D"para o "frame", essa consulta iria ser como demonstrado abaixo: SELECT AsText(the_geom) AS the_geom FROM bc_roads WHERE the_geom && SetSRID(BOX3D(1212105 462099.5,1212160.1 462102.5)::box3d,-1);

Note que o uso do SRID, especica a projeo do BOX3D. O valor -1 usado para indicar que nenhum SRID especicado.

6.1.5 Convertendo dados com o pgsql2shp e exportando com o psql


O programa de converso pgsql2shp conecta diretamente ao banco de dados e converte uma tabela em um arquivo Shapele. A sintaxe bsica : 39

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

pgsql2shp [<opes>] <banco de dados> [<esquema>.] <tabela> As opes de linha de comando so:

-f <nome do arquivo> Escreve a sada para o nome de arquivo especicado; -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 conexo do banco de dados; -u <usurio> O nome do usurio para usar na conexo com o banco de dados; -g <coluna de geometria> No caso de tabelas com colunas de mltiplas geometrias; esse opco especica qual coluna de geometria deve ser usada quando escrever o arquivo Shapele; -b Usar um cursor binrio. Isto far a operao mais rpida, mas no ir funcionar se qualquer atributo "no-geomtrico"na tabela estiver com texto incompleto; -r Modo bruto. No descarta o campo "gid"ou exclui os nomes das colunas; -d Para a compatibilidade com verses anteriores: escreva um arquivo Shapele 3-dimensional quando for extra-lo do banco de dados de PostGIS (em verses pre-1.0.0 - neles o padro escrever um arquivo Shapele 2-dimensional neste caso). Inicie de postgis-1.0.0 (ou verso posterior) e as dimenses so codicadas automaticamente.

40

Captulo 7

Fazendo consultas espaciais


Como fazer consultas espaciais simples e complexas no PostGIS.

7.1 Lio 5 - Fazendo consultas espaciais


7.1.1 Consultas
O argumento para a funcionalidade do banco de dados espacial est em executar consultas dentro do banco de dados que deveria requerer funcionalidade contidas em um software GIS. Usando PostGIS efetivamente requer conhecimento de quais funes espaciais esto disponveis, e assegura-se que os ndices espaciais apropriados esto criados permitindo bom desempenho nas consultas.

7.1.2 Exemplos de SQL espacial


Os exemplos nesta seo utilizaro duas tabelas, uma tabela de estradas lineares e uma tabela de limites poligonal da municipalidade. As denies de tabela para a tabela dos bc_roads so: Coluna | Tipo | Descrio -++gid | integer | Unique ID name | character varying | Road Name the_geom | geometry | Location Geometry (Linestring)

A denio de tabela para a tabela do bc_municipality : Coluna | Tipo | Descrio ++gid | integer | Unique ID code | integer | Unique ID name | character varying | City / Town Name the_geom | geometry | Location Geometry (Polygon)

41

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

7.1.3 Exemplos 1
Qual o comprimento total de todas as estradas, expressado nos quilmetros? Voc pode responder esta questo 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 condio do atributo (no nome da municipalidade) com um clculo espacial (de rea):

meu_DB=# SELECT area(the_geom)/10000 AS hectares FROM bc_municipality WHERE name = PRINCE GEORGE; hectares 32657.9103824925 (1 registro)

Qual a maior municipalidade na provncia, por rea? Esta consulta traz uma medio espacial na condio da busca. H diversas maneiras de avaliar este problema, mas a mais eciente est abaixo:

meu_DB=# SELECT name, area(the_geom)/10000 AS hectares FROM bc_municipality ORDER BY hectares DESC LIMIT 1; name | hectares + TUMBLER RIDGE | 155020.025561315 (1registro) 42

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Note que para responder a esta consulta ns temos que calcular a rea de cada polgono. Se zermos isto muito, faria mais sentido acrescentar uma coluna com as reas de cada polgono 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 funo agregada como o max().

7.1.4 Exemplos 2
Qual o tamanho completo das estradas contidas inteiramente dentro de cada municipalidade? Este um exemplo de um "cruzamento espacial"("spatial join"), porque ns estamos trazendo junto dados de duas tabelas (fazendo um cruzamento), mas estamos usando uma condio de interao espacial (contido ou "contained") como a condio de cruzamento, ao invs de usar uma abordagem relacional usando um atributo em comum:

meu_DB=# SELECT m.name, sum(length(r.the_geom))/1000 as roads_km FROM bc_roads AS r,bc_municipality AS m WHERE r.the_geom && m.the_geom AND contains(m.the_geom,r.the_geom) GROUP BY m.name ORDER BY roads_km DESC; name | roads_km + SURREY | 1687.24857093241 VANCOUVER | 1550.37923490885 LANGLEY DISTRICT | 849.559744805505 PRINCE GEORGE | 737.646890951342 BURNABY | 732.348440798669 RICHMOND | 698.334802617971 KELOWNA | 689.282898281948 KAMLOOPS | 653.015753055733 DELTA | 645.412004316109 MATSQUI | 626.442542300976 ... (segue)

Esta consulta leva um certo tempo para ser concluda, porque cada estrada sumarizada no resultado nal (cerca de 250 mil estradas para essa tabela do nosso exemplo). Para menores sobreposies ("overlays") (centenas de registros em milhares) a resposta pode ser muito mais rpida. 43

CDTC

Centro de Difuso 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 sobreposio ("overlay"), que l em duas tabelas e cria uma nova tabela como sada e que consiste dos resultados espacialmente sobrepostos ("clipped"). Ao contrrio do cruzamento espacial ("spatial join") demonstrado acima, esta consulta realmente cria novas geometrias (com seu resultado). Uma sobreposio como um cruzamento espacial turbinado, pois til para trabalhos mais minuciosos de anlise: meu_DB=# CREATE TABLE pg_roads as SELECT intersection(r.the_geom, m.the_geom) AS intersection_geom, length(r.the_geom) AS rd_orig_length, r.* FROM bc_roads AS r, bc_municipality AS m WHERE r.the_geom && m.the_geom AND intersects(r.the_geom, m.the_geom) AND m.name = PRINCE GEORGE;

Use o seguinte comando para vericar o resultado:

meu_DB=# SELECT name from pg_roads;

Nota: Usa a tecla espao para avanar ou a tecla "q"para sair.

7.1.5 Exemplos 3
Qual o tamanho em quilmetros, da rua "Douglas St.", em Victoria? meu_DB=# SELECT sum(length(r.the_geom))/1000 AS kilometers FROM bc_roads r, bc_municipality m WHERE r.the_geom && m.the_geom AND r.name = Douglas St AND m.name = VICTORIA; kilometers 6.85339156709377 (1 registro)

44

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Qual o maior polgono de municipalidade que possui um buraco? meu_DB=# SELECT gid, name, area(the_geom) AS area FROM bc_municipality WHERE nrings(the_geom) > 1 ORDER BY area DESC LIMIT 1; gid | name | area ++ 13 | SPALLUMCHEEN | 257374619.430219 (1 registro)

45

Captulo 8

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

8.1 Lio 6 - Construindo ndices


8.1.1 Construindo ndices
ndices so o que faz possvel usar grandes conjuntos de dados em um banco de dados espacial. Sem indexao, qualquer busca por uma feio iria requerer uma procura seqencial passando por todos os registros no banco de dados. A indexao acelera as buscas por organizar os dados em uma rvore de procura (hierarquia) que pode ser rapidamente acessada para encontrar um dado em particular. O PostgreSQL suporta trs tipos de ndices por padro:

B-Trees so usadas para dados que podem ser ordenados ao longo de um eixo; por exemplo, nmeros, letra inicial, datas. Dados de GIS no podem ser racionalmente ordenados ao longo de um eixo. Qual maior, (0,0) ou (0,1) ou (1,0)?. Assim, a indexao B-Tree intil para ns; R-Trees dividem os dados em retngulos, sub-retngulos, e sub-sub retngulos, etc. R-Trees so usados por alguns bancos de dados espaciais para indexar dados de GIS, mas a implementao do R-Tree no PostgreSQL no to robusta como o GiST. ndices GiST (Generalized Search Trees) dividem dados em "things to one side"(coisas para um lado), "things which overlap"(coisas que se sobrepe), "things which are inside"(coisas que esto dentro) e podem ser usados em uma extensa gama de tipos de dados, inclusive dados de GIS. PostGIS usa um ndice de R-Tree implementado em cima do GiST para indexar dados de GIS.

8.1.2

ndices GiST

GiST representa "Generalized Search Tree"e uma forma generalizada de indexao. Alm da indexao de GIS, GiST usada para acelerar buscas em todos os tipos de estruturas de dados irregulares (arranjos de vetores, dados espectrais, etc) que no so normalmente suscetveis a indexao B-Tree. 46

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Uma vez que uma tabela de dados de GIS excede algumas milhares de linhas, voc ir querer construir um ndice para acelerar as buscas espaciais de dados (a menos que todas suas buscas sejam baseadas em atributos, nesse caso voc iria construir um ndice normal usando os campos de 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 exerccio computacionalmente intensivo: em tabelas ao redor de 1 milho de linhas, em uma mquina de 300MHz Solaris, achamos que com a construo de um ndice GiST leva aproximadamente 1 hora. Depois de construir um ndice, importante forar PostgreSQL a coletar as estatsticas de tabela, e que so usadas para otimizar as busca:

VACUUM ANALYZE [nome_da_tabela] [nome_da_coluna];

Isso apenas necessrio para instalaes do PostgreSQL 7.4 ou anteriores.

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

No PostgreSQL ndices GiST tm duas vantagens em relao aos ndices R-Tree. Em primeiro lugar, ndices GiST so "null safe"(seguro com nulos), signicando que eles podem indexar colunas que incluem valores nulos. Em segundo lugar, ndices GiST apiam o conceito de "lossiness"(sem perda) que importante quando lidamos com objetos de GIS com tamanhos maiores do que o tamanho de pgina do PostgreSQL (8Kb). "Lossiness"permite PostgreSQL armazenar somente a parte "importante"de um objeto em um ndice - no caso de objetos de GIS, s o retngulo envolvente. Objetos de GIS maiores do que 8K causaro que os ndices R-Tree falhem no processo de construo.

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

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

47

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

CREATE INDEX

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

meu_DB=# \b . c_roads Tabela "public.bc_roads" Coluna | Tipo | Modicadores ++ gid | integer | not null default nextval(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 estatsticas do nosso banco de dados, rode o comando VACUUM ANALYZE para fazer um "update"geral, ou rode ele apenas na tabela na qual voc gerou o ndice, seguindo o exemplo:

meu_DB=# VACUUM ANALYZE bc_roads the_geom

Agora realizaremos duas consultas, a primeira sem usar o ndice (no-indexada) e a segunda usando (indexada). O resultado da segunda consulta ser bem mais rpida (isso pode ser facilmente percebido em computadores mais lentos): meu_DB=# SELECT gid, name FROM bc_roads WHERE CROSSES (the_geom, GeomFromText (LINESTRING(1220446 477473,1220417 477559), -1));

e meu_DB=# SELECT gid, name FROM bc_roads WHERE the_geom && GeomFromText(LINESTRING(1220446 477473,1220417 477559), -1) AND CROSSES(the_geom, GeomFromText (LINESTRING(1220446 477473,1220417 477559), 48

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

-1));

8.1.3 Usando ndices


ndices aceleram de maneira invisvel o acesso de dados: uma vez que o ndice construdo, o "planejador de consultas" quem decide quando usar a informao do ndice para acelerar a consulta. Infelizmente, o "planejador de consultas"do PostgreSQL no otimiza bem o uso de ndices de GiST, ento s vezes as consultas que deveriam usar um ndice espacial fazem uma busca seqencial pela tabela inteira.

Se voc acha que seus ndices espaciais no esto sendo usados (ou seus ndices de atributo para aquele assunto) existem algumas solues para vericar se eles esto funcionando corretamente:

Primeiramente, certique-se que as estatsticas so coletadas sobre o nmero e distribuies dos valores em uma tabela, para proporcionar para o "planejador de consultas"com melhor informaes que permitam a tomada de deciso se usa os ndices ou no. Para instalaes PostgreSQL 7.4 e anteriores isso feito rodando o seguinte comando:

update_geometry_stats([nome_da_tabela, nome_da_coluna]) (calcula as estatsticas de distribuies de valores em uma tabela)

VACUUM ANALYZE [nome_da_tabela] [nome_da_coluna] (calcula as estatsticas a respeito do nmero de valores em uma tabela).

Comeando com PostgreSQL 8.0 rodar VACUUM ANALYZE far ambas as operaes. Voc pode usar o "VACUUM"("limpar") regularmente em seus bancos de dados, para isso basta agendar no "cron"para execut-lo fora dos horrios de pico do servidor PostgreSQL.

Se "limpar"o seu banco de dados no funcionar, voc pode forar o planejador a usar as informaes de ndice com o seguinte comando:

SET ENABLE_SEQSCAN=OFF

49

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Voc deveria apenas usar este comando esporadicamente, e em consultas espacialmente indexadas. J que em geral, o planejador sabe melhor do que voc o que fazer a respeito na hora de escolher entre os ndices B-Tree normais e os GiST. Uma vez que voc rodou sua consulta, voc deveria considerar a opo de reverter o ENABLE_SEQSCAN ao seu estado original, de maneira que em outras consultas o planejador funcionar de forma normal.

Nota: A partir de verso 0.6 do PostGIS, no deveria ser necessrio forar o planejador a usar os ndices com ENABLE_SEQSCAN.

Se voc acha que o planejador decide errado sobre o custo de consultas seqencial versus ndice, tente reduzir o valor de "random_page_cost"em postgresql.conf ou usando SET "random_page_cost"=#. O valor padro para o parmetro 4, tente ajust-lo para 1 ou 2. Reduzir esse o valor faz com que o planejador que mais inclinado a usar consultas usando o ndice.

8.1.4 Vantagens dos ndices


Na construo de uma consulta importante lembrarmos que somente os operadores baseados em retngulos envolventes (bounding box) como &&, podem tirar proveito do ndice espacial de GiST. Funes como DISTANCE() no podem usar o ndice para otimizar suas operaes. Por exemplo, a seguinte consulta seria bastante lenta em uma tabela grande: SELECT name FROM bc_roads WHERE DISTANCE( the_geom, GeomFromText( POINT(1220000 470000), -1 ) ) < 100;

Esta consulta est selecionando todas as geometrias em geom_table que est dentro de 100 unidades do ponto (1220000 470000). Esta operao ser relativamente lenta porque est calculando a distncia entre cada ponto da tabela e nosso ponto especco (isto , um clculo de DISTANCE() para cada linha da tabela). Podemos evitar isto usando o operador && para reduzir o nmero de clculos de distncia necessrios: SELECT the_geom FROM bc_roads WHERE the_geom && BOX3D(1219900 469900, 1220100 470100)::box3d AND DISTANCE( the_geom, GeomFromText( POINT(1220000 470000), -1 ) ) < 100

Esta consulta seleciona as mesmas geometrias, mas faz isto de um modo mais eciente. Supondo que existe um ndice GiST em the_geom, o "planejador de consultas"reconhecer que pode usar o ndice para reduzir o nmero de linhas antes de calcular o resultado da funo distance (). Note que a geometria de BOX3D que usada dentro da operao && uma caixa quadrada de 200 unidades e centrada no ponto original - esta nossa "caixa de procura". O 50

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

operador && usa o ndice para reduzir rapidamente o resultado atribudo a nossa busca apenas essas geometrias que tm um retngulo envolvente que se sobrepem com a nossa "caixa de procura". Supondo que nossa "caixa de procura" muito menor que as extenses da tabela de geometria inteira, isto reduzir drasticamente o nmero de clculos de distncia que precisam ser feitos.

Uma dica: para medir o consumo de tempo e processamento um recurso til colocar o comando "EXPLAIN"no incio de cada consulta.

51

Captulo 9

Acessando os dados do PostGIS em outros softwares


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

9.1 Lio 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 no possuem sada grca. Quando queremos apenas estatsticas ou respostas diretas, nada alm disso necessrio. Porm em outros casos, a visualizao grca nos permite ver e expressar certos detalhes com mais clareza.

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

9.1.2 Visualizando dados exportados do PostGIS


A maneira mais "primitiva"de visualizar dados do PostGIS em outros softwares seria exportar os dados do banco de dados. Um dos formatos mais acessvel o Shapele.

Para exportar seus dados nesse formato basta realizar o procedimento descrito na seo do curso "Exportando dados no PostGIS".

Outro mtodo alternativo de exportar (e tambm importar) dados seria usar o pacote de ferramentas GIS vetorias OGR (incluso no pacote GDAL). Um exemplo da sua utilizao esta seguir:

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

52

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

9.1.3 Usando o QGIS


Outra maneira de visualizar dados do PostGIS seria atravs de softwares desktop GIS. Dentre eles o QGIS um dos destaques.

O QGIS um software de visualizao de dados espaciais, com um bom suporte a dados raster e vetorias. Outras funcionalidades adicionais podem ser implementadas atravs da construo de plugins (como o SPIT - "Shapele to PostgreSQL Import Tool "). No entanto, para lidar com os dados do PostGIS no QGIS j existe suporte nativo :

simples visualizao dos dados; realizar consultas usando a interface grco do QGIS diretamente no PostGIS e visualizar os resultados grcamente.

O procedimento de conectar o QGIS ao PostGIS (e PostgreSQL) feito da seguinte forma: criar uma conexo entre o QGIS e o PostgreSQL atravs de assistente grco; conectar-se ao banco de dados (PostgreSQL); selecionar a camada (tabela a ser visualizada geogracamente) a ser importada; adicionalmente podemos usar o WHERE para ltrar os dados serem importados no QGIS; importar a camada.

As principais vantagens de usar diretamente dados que esto em um servidor PostGIS no QGIS seriam: conectar-se diretamente ao PostGIS e importar os dados garante um acesso amplo e rpido caso um grande nmero de pessoas utilize a mesma base de dados; se a base de dados atualizada constantemente, usar diretamente os dados do servidor evita que pessoas tenham que exportar os dados, e tambm diminui as chances que elas utilizem apenas arquivos que possam conter dados desatualizados.

9.1.4 Usando Mapserver


Com o crescimento da Internet, ampliaram-se muito as maneiras de disponibilizar informaes geogrcas atravs da Web.

53

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Dentre elas destacamos o Minnesota Mapserver (ou apenas Mapserver). Ele um servidor de mapas Web para Internet que adapta-se a especicao do Servidor de Mapas na Internet OpenGIS. Com ele podemos criar sites que permitam ao usurios visualizar dados espaciais atravs da Web.

Outra funcionalidade interessante para ns capacidade do Mapserver em utilizar diretamente dados do PostgGIS em websites (mesmo que cada servidor esteja instalado em um mquina diferente).

Para usar o PostGIS com Mapserver, voc precisar conhecer como congurar o Mapserver (algo que est alm da extenso desse curso). Ou requisitos mnimos para usar o PostGIS em conjunto com o Mapserver so: Verso 0.6 ou mais nova de PostGIS; Verso 3.5 ou mais nova de Mapserver.

O Mapserver acessa dados de PostGIS/PostgreSQL como qualquer outro cliente de PostgreSQL (usando a biblioteca libpq). Isto signica que o Mapserver pode ser instalado em qualquer mquina com acesso de rede (internet ou intranet) e para o servidor de PostGIS, e desde que o sistema tenha as bibliotecas cliente de PostgreSQL.

Os passos para usar o Mapserver so os seguintes: 1. Compile e instale Mapserver, com qualquer opes que voc desejar, sem esquecer a opo de congurao -with-postgis"(para habilitar o suporte ao PostGIS); 2. Em seu arquivo de mapas Mapserver, acrescente uma camada de PostGIS. Por exemplo:

LAYER CONNECTIONTYPE postgis NAME "widehighways" # Connect to a remote spatial database CONNECTION "user=dbuser dbname=gisdatabase host=bigserver" # Get the lines from the geom column of the roads table DATA "geom from roads" STATUS ON TYPE LINE # Of the lines in the extents, only render the wide highways FILTER "type = highway and numlanes >= 4" CLASS 54

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

# Make the superhighways brighter and 2 pixels wide EXPRESSION ([numlanes] >= 6) COLOR 255 22 22 SYMBOL "solid" SIZE 2 END CLASS # All the rest are darker and only 1 pixel wide EXPRESSION ([numlanes] < 6) COLOR 205 92 82 END END

No exemplo acima, as diretivas de PostGIS-especcos so como segue:

CONNECTIONTYPE

Para camadas de PostGIS, este sempre "postgis."

CONNECTION

A conexo de banco de dados especicada por um conjunto de variveis (com os valores padres em <>):

user=<usurio> password=<senha_do_usurio> dbname=<nome_do_banco_de_dados> hostname=<servidor> port=<5432>

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

Alguns parmetros podem ser omitidos. Mas no mnimo voc deveria colocar o nome do banco de dados e usurio para se conectar.

DATA

O formato deste parmetro coluna> from <nome_da_tabela>"onde a coluna a coluna espacial a ser traduzida/visualizada no mapa, e tabela a fonte dos dados.

55

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

FILTER

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

3 No seu banco de dados espacial, assegure-se que voc tem ndices espaciais (GiST) construdos para todas as camadas que sero 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 tambm precisar de um ndice "oid".

O Mapserver requer identicadores nicos para cada registro espacial ao fazer as consultas, e o mdulo do Mapserver para manipular os dados do PostGIS usa o valor oid PostgreSQL para prover estes identicadores nicos. Um efeito colateral disto que para fazer acesso randmico rpido de registros durante as consultas, um ndice "oid" necessrio.

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

CREATE INDEX [nome_do_ndice] ON [nome_da_tabela] ( oid );

56