Академический Документы
Профессиональный Документы
Культура Документы
Verso 1.0.0
Sumrio
I Sobre essa Apostila 2 4 9 18
19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 20 20 20 20 21 21 21 22
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
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
CDTC
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
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
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".
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.
CDTC
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
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
10
CDTC
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
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
Brasil/DF
13
CDTC
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
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
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.
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
Brasil/DF
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.
17
CDTC
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.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
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
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
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
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.
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):
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
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:
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):
(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).
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
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):
> ./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:
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
Brasil/DF
> make
29
Captulo 5
Congurao
Congurao do PostgreSQL e do PostGIS.
Os passos a seguir devem ser executados como usurio "postgres". Para fazer isso use o comando "su postgres"( necessrio acesso a senha desse usurio).
NOTA: o local e nome do PostgreSQL podem variar dependendo do sistema GNU/Linux utilizado.
30
CDTC
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
Lista dos bancos de dados Nome | Dono | Codicao ++postgres | postgres | UTF8 project1 | postgres | UTF8 template0 | postgres | UTF8 template1 | postgres | UTF8 (4 registros)
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
Brasil/DF
/usr/share/postgresql/8.1/contrib:
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:
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
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".
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.
33
CDTC
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:
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
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
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:
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
O comando psql tem vrios parmetros para serem utilizados na linha de comando:
36
CDTC
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.
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:
Nota: se o shp2pgsql no estiver disponvel com um comando no seu terminal, necessrio para rod-lo dar o caminho ("path") do executvel.
A converso e importao de dados podem ser feitos em um nico comando se concatenarmos (como no UNIX) os dois comandos: 37
CDTC
Brasil/DF
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
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.
CDTC
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
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
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:
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
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
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;
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
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.
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
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:
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:
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.
47
CDTC
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:
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
Brasil/DF
-1));
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:
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
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.
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
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
Pensando dessa forma a seguir iremos abordar alguns softwares de podem visualizar dados do PostGIS.
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:
52
CDTC
Brasil/DF
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.
53
CDTC
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
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
CONNECTIONTYPE
CONNECTION
A conexo de banco de dados especicada por um conjunto de variveis (com os valores padres em <>):
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
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.
56