Você está na página 1de 89

Manual PostGIS

Sumrio 1. Introduo 1.1. Crditos 1.2. Mais Informaes 2. Instalao 2.1. Exigncias 2.2. PostGIS 2.2.1. Criando PostGIS habilitando espacialmente um banco de dados de modelo de construo 2.2.2. Melhorias 2.2.3. Problemas Comuns 2.3. JDBC 2.4. Carregador/Descarregador 3. Perguntas Mais Frequentes 4. Usando PostGIS 4.1. Objetos GIS 4.1.1. Padres de OpenGIS WKB e WKT 4.1.2. Padres de PostGIS EWKB, EWKT e Forma Cannica 4.1.3. SQL-MM Parte 3 4.2. Usando Padres de OpenGIS 4.2.1. Tabela de Sistemas de Referncias Espacial (SPATIAL_REF_SYS) 4.2.2. Tabela de Colunas Geomtricas (GEOMETRY_COLUMNS) 4.2.3. Criando uma Tabela de espacial 4.2.4. Assegurando-se conforme a geometria de OpenGIS 4.3. Carregando Dados de GIS 4.3.1. Usando SQL 4.3.2. Usando o Carregador 4.4. Recuperando Dados de GIS 4.4.1. Usando SQL 4.4.2. Usando o Descarregador 4.5. Construindo ndices 4.5.1. ndices GiST 4.5.2. Usando ndices 4.6. Queries Complexas 4.6.1. Vantagens no Uso de ndices 4.6.2. Exemplos de SQL Espacial 4.7. Usando Servidor de Mapas 4.7.1. Uso bsico 4.7.2. Perguntas Mais Frequentes 4.7.3. Uso Avanado 4.7.4. Exemplos 4.8. Clientes de Java (JDBC) 4.9. Clientes de C (libpq) 4.9.1. Cursores de Texto 4.9.2. Cursores Binrios 5. Tipos de Performance 5.1. Tabelas Pequenas de Geometrias Grandes 5.1.1. Descrio de problemas 5.1.2. Envolvimento com o trabalho 5.2. CLUSTERing em ndices da geometria 5.3. Evitando a converso da dimenso

6. Referncia PostGIS 6.1. Funes de OpenGIS 6.1.1. Funes de Gerenciamento 6.1.2. Funes de Relacionamento da Geometria 6.1.3. Funes de Processamento da Geometria 6.1.4. Assessores Geomtricos 6.1.5. Construtores Geomtricos 6.2. Extenses PostGIS 6.2.1. Funes de Gerenciamento 6.2.2. Operadores 6.2.3. Funes de Medida 6.2.4. Sada Geomtricas 6.2.5. Construtores Geomtricos 6.2.6. Editores Geomtricos 6.2.7. Referncia Linear 6.2.8. Variado 6.2.9. Suporte a grandes transaes (Long Transactions) 6.3. Funes SQL-MM 6.4. Funes ArcSDE 7. Relatando Erros A. Apendice A.1. Notas de Verso A.1.1. Verso 1.2.1 A.1.2. Verso 1.2.0 A.1.3. Verso 1.1.6 A.1.4. Verso 1.1.5 A.1.5. Verso 1.1.4 A.1.6. Verso 1.1.3 A.1.7. Verso 1.1.2 A.1.8. Verso 1.1.1 A.1.9. Verso 1.1.0 A.1.10. Verso 1.0.6 A.1.11. Verso 1.0.5 A.1.12. Verso 1.0.4 A.1.13. Verso 1.0.3 A.1.14. Verso 1.0.2 A.1.15. Verso 1.0.1 A.1.16. Verso 1.0.0 A.1.17. Verso 1.0.0RC6 A.1.18. Verso 1.0.0RC5 A.1.19. Verso 1.0.0RC4 A.1.20. Verso 1.0.0RC3 A.1.21. Verso 1.0.0RC2 A.1.22. Verso 1.0.0RC1

PostGIS foi desenvolvido por Refractions Research Inc, como uma tecnologia de banco de dados espacial no projeto de pesquisa. Refractions uma companhia de consultoria em GIS e banco de dados localizada em Victoria, British Columbia, Canad, especializada em integrao de dados e desenvolvimento de software customizado. A finalidade deste manual de apoiar uma gama de funcionalidade de GIS importante, incluindo suporte completo do OpenGIS, construo de topologia avanada (coberturas, superfcies, redes), ferramentas de interface do usurio de mesa visando e editando dados de GIS, e ferramentas de acesso baseadas na web. 1.1. Crditos

Sandro Santilli <strk@refractions.net> Coordena todos os erros (bugs) fixando e mantendo o esforo, a integrao de novas funcionalidades GEOS, e novas funes. Chris Hodgson <chodgson@refractions.net> Mantem novos funes e suporte ao ndice 7.2. Paul Ramsey <pramsey@refractions.net> Conserva a trilha da documentao e empacotamento. Jeff Lounsbury <jeffloun@refractions.net> Mantm o desenvolvimento original do Shape no programa de carga/descarga. Dave Blasby <dblasby@gmail.com> Dave, o principal desenvolvedor de PostGIS, mantm o lado de servidor de objetos e suporte a ndice, o lado de servidor de funes analticas. Outros contribuidores Em ordem alfabtica: Alex Bodnaru, Alex Mayrhofer, Bernhard Reiter, Bruce Rindahl, Bruno Wolff III, Carl Anderson, Charlie Savage, David Skea, David Techer, IIDA Tetsushi, Geographic Data BC, Gerald Fenoy, Gino Lucrezi, Klaus Foerster, Kris Jurka, Mark CaveAyland, Mark Sondheim, Markus Schaber, Michael Fuhr, Nikita Shulga, Norman Vine, Olivier Courtin, Ralph Mason, Steffen Macke.

Bibliotecas de suportes importante A biblioteca das operaes geomtricas GEOS e o trabalho algortmico de Martin Davis <mbdavis@vividsolutions.com> de Vivid Solutions em faz-la todas trabalharem. A biblioteca de projeo cartogrfica Proj4 e o trabalho de Gerald Evenden and Frank Warmerdam em cri-la e mant-la. 1.2. Mais Informaes O software, a documentao e as novidades mais recentes do PostGIS esto disponveis no site, http://postgis.refractions.net.

Mais informaes sobre a biblioteca de operaes geomtricas GEOS est disponvel em http://geos.refractions.net. Mais informaes sobre a biblioteca de reprojeo Proj4 est disponvel em http:// www.remotesensing.org/proj. Mais informaes sobre o servidor da banco de dados PostgreSQL est disponvel no site principal de PostgreSQL, http://www.postgresql.org. Mais informaes sobre ndice GiST est disponvel no site de desenvolvimento PostgreSQL GiST,http://www.sai.msu.su/~megera/postgres/gist. Mais informaes sobre servidor de mapas na internet Mapserver est disponvel em http://mapserver.gis.umn.edu/. As "caractersticas simples para especificao do SQL " est disponvel no Consrcio de OpenGIS no site: http://www.opengis.org/.

Captulo 2. Instalao

2.1. Exigncias PostGIS tem as seguintes exigncias para construo e uso: Uma instalao completa do PostgreSQL (incluindo servidor de headers). PostgreSQL est disponvel em http://www.postgresql.org/. Verso 7.2 ou posteriores. O compilador de GNU C (gcc). Alguns outros compiladores de C ANSI podem ser usados para compilar PostGIS, mas foram achados poucos problemas ao compilar com gcc. GNU Make (gmake ou make). Para muitos sistemas, GNU make a verso default que faz falta. Para saber a verso, utilizar make -v. Outras verses de make no podem processar o PostGIS Makefile corretamente. (Opcional) Biblioteca de reprojeo Proj4. A biblioteca Proj4 usada para fornecer suporte a reprojees coordenadas dentro de PostGIS. Proj4 est disponvel para baixa em http://www.remotesensing.org/proj. (Opcional) Biblioteca de geometria GEOS. A biblioteca GEOS usada para fornecer testes em geometria (Touches(), Contains(), Intersects()) e operaes (Buffer(), GeomUnion(), Difference()) com PostGIS. GEOS est disponvel para baixa em http://geos.refractions.net/.

2.2. PostGIS O mdulo de PostGIS uma extenso ao PostgreSQL servidor de retaguarda. Assim, PostGIS 1.2.1 requer um acesso completo do servidor de headers PostgreSQL organizado em diretrio para compilar. O cdigo fonte PostgreSQL est disponvel em http://www.postgresql.org/. PostGIS 1.2.1 pode ser construdo com verses de PostgreSQL 7.2.0 ou posteriores. As verses de PostgreSQL anteriores no so suportadas. 1. Antes de voc compilar os mdulos do servidor de PostGIS, ter que compilar e instalar o pacote PostgreSQL. Nota Se voc planeja usar funcionalidade de GEOS precisar unir PostgreSQL biblioteca de C++ padro:

2. 3.

LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE] Este um trabalho voltado para excees em C++ interando com ferramentas de desenvolvimento mais antigas. Se voc perceber problemas estranhos (inesperadamente fechar uma retaguarda ou algo semelhante), faa esta tentativa. Isso far com que corra o risco de compilar o PostgreSQL.

4. 5. 6. 7. 8. 9.

Para recuperar o arquivo fonte PostGIS faa nova baixa em http:// postgis.refractions.net/postgis-1.2.1.tar.gz. Descomprima o arquivo no diretrio "contrib" do fonte PostgreSQL, organizando assim, os fontes no diretrio. # cd [postgresql source tree]/contrib # gzip -d -c postgis-1.2.1.tar.gz | tar xvf Entrar no diretrio "postgis-1.2.1" e rodar: # ./configure Se quiser dar suporte a reprojeo de coordenada, dever ter a biblioteca de Proj4 instalada. Se ./configure no encontr-la, tente usar --with-proj=PATH para ajustar para um diretrio especfico da instalao Proj4. Se quiser usar funcionalidades GEOS, ter que ter instalada a biblioteca de GEOS. Se ./configure no encontr-la, tente usar --with-geos=PATH para especificar o path completo para o programa geos-config path completo.

10. 11. 12. 13. 14.

Rodar o compilador e instalar comandos. # make # make install Todos os arquivos so instalados usando informaes fornecidas por pg_config. Bibliotecas so instaladas [pkglibdir]/lib/contrib. Arquivos de suporte importantes como lwpostgis.sql so instalados em prefix]/share/contrib.

Carregador e binrios livres so instalados em [bindir]/.

15. 16. PostGIS requer para o PL/pgSQL extenso da linguagem procedural. Antes de carregar o arquivo lwpostgis.sql, ter que habilitar primeiro o PL/pgSQL. Dever usar o comando createlang. O Guia de Programador PostgreSQL tem os detalhes, caso queira execut-lo manualmente. 17. # createlang plpgsql [yourdatabase] 18. Carregar o objeto PostGIS e definir funes no banco de dados, carregando definies de arquivo lwpostgis.sql. 19. # psql -d [yourdatabase] -f lwpostgis.sql 20. Extenses de servidor de PostGIS agora esto carregadas e prontas para uso. 21. Para um completo uso de coordenada de identificadores de definio de sistemas EPSG, poder tambem carregar o arquivo de definies spatial_ref_sys.sql e contedos de tabela SPATIAL_REF_SYS. 22. # psql -d [yourdatabase] -f spatial_ref_sys.sql 2.2.1. Criando PostGIS habilitando espacialmente um modelo de construo de banco de dados Algumas distribuies empacotadas de PostGIS (em particular os instaladores Win32 para o PostGIS >= 1.1.5) carregam as funes de PostGIS dentro de um banco de dados chamado template_postgis. Se o banco de dados template_postgis existir em sua instalao de PostgreSQL, ento possvel para usurios e/ou as aplicaes, criarem bancos de dados espacialmente habilitados, usando um nico comando. Note que em ambos os casos, o usurio do banco de dados ter um grande privilgio para criar novos bancos de dados. Do shell: # createdb -T template_postgis my_spatial_db Do SQL: postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis 2.2.2. Atualizao Atualizando bancos de dados espacial existente pode ser complicado como requer a recolocao ou a introduo de novas definies de objeto de PostGIS. Infelizmente nem todas as definies podem ser substitudas facilmente em um banco de dados vivo, assim s vezes sua melhor aposta so um processo de descarregar/carregar (dump/reload). PostGIS fornece uma proceduce SOFT UPGRADE para liberaes menores ou de pequenas correes (bugfix) e uma procedure HARD UPGRADE para liberaes maiores.

Antes de tentar atualizar o postgis, sempre vlido fazer uma cpia dos seus dados. Se usar o flag -Fc para pg_dump, estar apto a restaurar o descarregador com um HARD UPGRADE. 2.2.2.1. Soft upgrade Soft upgrade consiste do fonte de script lwpostgis_upgrade.sql em seu banco de dados espacial: $ psql -f lwpostgis_upgrade.sql -d your_spatial_database Se um soft upgrade no for possvel, o script abortar e ser advertido sobre o HARD UPGRADE que es sendo requerido, assim no hesite tentar primeiro um soft upgrade. Se um melhoramento macio no for possvel o certificado abortar e voc estar advertido sobre o MELHORAMENTO DURO que est sendo requerido, assim que no hesitate tentar primeiramente um melhoramento macio. Note Se voc no encontrar o arquivo lwpostgis_upgrade.sql, estar usando uma verso antereior a 1.1 e gerar esse arquivo por si mesmo. Isto feito com o seguinte comando: $ utils/postgis_proc_upgrade.pl lwpostgis.sql > lwpostgis_upgrade.sql 2.2.2.2. Hard upgrade Por HARD UPGRADE pretendemos descarregar/carregar (dump/reload) do banco de dados habilitando o postgis completo. Precisar de um HARD UPGRADE quando o armazenamento interno dos objetos de postgis alterar ou quando o SOFT UPGRADE no for possvel. O apndice Notas de Verso reportar para cada verso se voc necessitar descarregar/carregar (HARD UPGRADE) para atualizar. PostGIS provides an utility script to restore a dump produced with the pg_dump -Fc command. It is experimental so redirecting its output to a file will help in case of problems. The procedure is as follow: PostGIS fornece um script utilitrio para restaurar uma descarga produzida com o comando pg_dump -Fc. Assim, experimental redirecionar sua sada para um arquivo que o ajudar em caso de problemas. O procedimento como segue: Criar um "custom-format" para descarregar do banco de dados se quiser atualizar (chamamos de "olddb"). $ pg_dump -Fc olddb > olddb.dump Restaurar a descarga atualizando contextualmente postgis em um banco de dados novo. O novo banco de dados no pode existir. postgis_restore aceita parmetros createdb depois da descarga de um nome de arquivo (file name) e isso pode por instncia ser usado se estiver usando o caracter enconding non-default para seu banco de dados. Chamamos de newdb, com UNICODE como o caracter encoding:

$ sh utils/postgis_restore.pl lwpostgis.sql newdb olddb.dump -E=UNICODE > restore.log Certificar-se de que todo objeto de descarga restaurado realmente tenha que ser restaurado dda descarga e no entrar em conflito com esses definidos em lwpostgis.sql $ grep ^KEEPING restore.log | less Se atualizar de PostgreSQL < 8.0 para >= 8.0 poder apagar o attrelid, o varattnum e as colunas do stats na tabela dos geometry_columns, que no mais necessrio. Mant-los no ter problemas. DROPPING THEM WHEN REALLY NEEDED WILL DO HURT ! $ psql newdb -c "ALTER TABLE geometry_columns DROP attrelid" $ psql newdb -c "ALTER TABLE geometry_columns DROP varattnum" $ psql newdb -c "ALTER TABLE geometry_columns DROP stats" A tabela spatial_ref_sys so recuperadas da descarga, para assegurar seus costumes adicionais so mantidos, mas a distribuio pde conter modificao como voce recupera suas entradas, apagar a tabela e a fonte de uma nova. Se fizer adies, supomos que conhea como recuper-las antes de atualizar a tabela. Substitu-la com a nova feita desta forma: $ psql newdb newdb=> delete from spatial_ref_sys; DROP newdb=> \i spatial_ref_sys.sql 2.2.3. Problemas Comuns Existem vrias coisas para conferir quando sua instalao ou atualizao no acontece como voc espera. 1. Ser mais fcil se voc descomprimir os arquivos de PostGIS no diretrio "contrib" do fonte PostgreSQL em rvore. Porm, se isto no for possvel por alguma razo, voc poder criar uma varivel de desenvolvimento PGSQL_SRC para o caminho do diretrio fonte PostgreSQL Isto permitir voc compilar PostGIS, mas o comando make install pode falhar, assim voce dever estar preparado para copiar a biblioteca de PostGIS e arquivos executveis para os seus locais apropriados voc. Verifique se voc instalou PostgreSQL 7.2 ou mais novo, e ento voc estar compilando mesma verso de fonte de PostgreSQL contra a verso de PostgreSQL que est executando. Confuses podem ocorrer quando sua distribuio (Linux) j instalou PostgreSQL, caso contrrio, voce pode ter instalado PostgreSQL antes e se esquecido disto. PostGIS s trabalhar com verses PostgreSQL 7.2 ou mais novas. Mensagens de erros estranhas e inesperadas resultaro se voc usar uma verso mais velha. Para conferir a verso de PostgreSQL que est executando, conecte-se ao banco de dados, usando psql e execute o comando: SELECT version(); Se rodar uma distribuio baseada RPM, voce pode verificar a existncia de pacotes pr-instaladores usando o comando rpm como segue: rpm -qa | grep postgresql

2.

3. 4.

Tambm verifique se fez qualquer alterao necessria do Makefile.config. Isto inclui: 1. Se quiser pode fazer reprojees coordenadas, dever instalar a biblioteca de Proj4 em seu sistema, atribuir 1 a varivel USE_PROJ e para seu prefixo de instalao PROJ_DIR dentro de Makefile.config. 2. Se voc quer estar hbil para usar funes de GEOS, dever instalar a biblioteca de GEOS em seu sistema, e atribuir 1 a varivel USE_GEOS e para sua instalao GEOS_DIR dentro de Makefile.config.

2.3. JDBC As extenses de JDBC provem de objetos de Java correspondentes aos tipos de PostGIS internos. Estes objetos podem ser usados para gravar clientes Java, que verificam o banco de dados de PostGIS e extraem ou fazem clculos em dados de GIS em PostGIS. 1. Entrar no sub-diretrio de distribuio de PostGIS jdbc. 2. Editar Makefile para prover os caminhos corretos de seu compilador de java (JAVAC) e interprete (JAVA). Executar o comando make. Copiar o arquivo postgis.jar onde quer que mantenha suas bibliotecas de java.

3.

2.4. Carregador/Descarregador Os dados para o carregador e descarregador so construdos e instalados automaticamente, como parte da construo de PostGIS. Para constru-los e os installos manualmente, execute os comandos, conforme abaixo descritos: # cd postgis-1.2.1/loader # make # make install O carregador chamado shp2pgsql e converte arquivos ESRI Shape em SQL apropriado por carregar no PostGIS/PostgreSQL. O descarregador chamado pgsql2shp e converte tabelas PostGIS em arquivos ESRI Shape.

Captulo 3. Perguntas Mais Frequentes

3.1. Que tipo de objetos geomtricos eu posso armazenar? Voc pode armazenar point, linestring, polygon, multipoint, multiline, multipolygon, e colees geomtricas. Estes so especificados Open GIS Well Known Text (com extenses XYZ,XYM,XYZM).

3.2. Como acrescentar um objeto de GIS no banco de dados?

Primeiro voc precisa criar uma tabela com uma coluna de tipo "geometry" para carregar os dados de GIS. Conecte seu banco de dados com psql e execute o comando SQL seguinte: CREATE TABLE gtest ( ID int4, NAME varchar(20) ); SELECT AddGeometryColumn('', 'gtest','geom',-1,'LINESTRING',2); Se a adio de coluna de geometria falhar, voc provavelmente no carregou as funes e objetos de PostGIS dentro do banco de dados. Veja as instrues de instalao. Ento, voc pode inserir uma geometria na tabela, usando insero de declarao do SQL . O prprio objeto GIS formatado usando o formato OpenGIS Consortium "well-known text" INSERT INTO gtest (ID, NAME, GEOM) VALUES (1, 'First Geometry', GeomFromText('LINESTRING(2 3,4 5,6 5,7 8)', -1)); Para mais informao sobre outros objetos GIS, veja referncia de objeto.. Para ver os dados de GIS na tabela: SELECT id, name, AsText(geom) AS geom FROM gtest; O valor de retorno dever ser : id | name | geom ----+----------------+----------------------------1 | First Geometry | LINESTRING(2 3,4 5,6 5,7 8) (1 row) 3.3. Como fazer uma seleo espacial?

o mesmo caminho que constri outras selees de banco de dados, como uma combinao SQL de retornos de valores, funes e teste verdadeiro ou falso. Para fazer uma seleo espacial, existem dois caminhos que so importantes de se manter em mente ao construir sua pergunta: pode fazer um ndice espacial; e voc faz clculos enormes em um grande nmero geometries. No geral, se quiser usar operadores de interseo (&&) que testa se salto de caixa de interseo caracterstica.O uso do operador && til porque se um ndice espacial est disponvel velocidade acima do teste, o operador && far uso disto. Isto pode fazer as selees muito mais rpida. Note que o salto de caixas usou a seleo que deve ser declarada explicitamente como um box3d que usa o ":: box3d" que lana a operao.

Poder tambm fazer uso de funes espaciais, como Distance(), Intersects(), Contains() e Within(), entre outros, e obter resultados abaixo de suas buscas. A maior seleo espatial incluem ambos um teste posicionado e um teste de funo spatial. O teste do ndice serve para limitar o nmero de retornos, somente eles que podem se encontrar com a condio do interesse. As funes espaciais so ento para uso de teste de condio exata. SELECT id, the_geom FROM thetable WHERE the_geom && 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))' AND Contains(the_geom,'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'; 3.4. Como fazer seleo espacial rpida em tabelas grandes?

Selees rpidas em tabelas grandes uma finalidade da existncia propriamente de bancos de dados espaciais (junto com suporte transacional), tendo assim, a importncia de um bom ndice. Para construir um ndice espacial em uma tabela com uma coluna geometrica, use a funo "CREATE INDEX" como segue: CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] ); A opo "USING GIST" informa ao servidor para usar um ndice GiST (Generalized Searche Tree). Nota ndices GiST so assumidos para quem no sabe o que fazer com o dado. ndices para esses dados soltos, chamado tambem de ndices lossy, usa um objeto "proxy" (no caso espacial, uma caixa delimitada) para construir o ndice. Dever tambm assegurar-se de que se a seleo de PostgreSQL tiver muita informao sobre seu ndice para fazer decises racionais, quando us-lo. Para fazer isto, voc tem que pegar estatsticas em suas tabelas geomtricas. Para verses de PostgreSQL 8.0.x e superiores, rode o comando VACUUM ANALYZE. Para verses de PostgreSQL 7.4.x e inferiores, rode o comando SELECT UPDATE_GEOMETRY_STATS(). 3.5. Porque so descartados os ndices PostgreSQL R-Tree?

Verses anteriores de PostGIS usaram os ndices PostgreSQL R-Tree. Porm, PostgreSQL R-Trees tem sido descartado completamente desde a verso 0.6, e ndices espaciais so proporcionados com esquema R-Tree-over-GiST. Nossos testes mostraram velocidade de procura para R-Tree nativa e GiST serem comparveis. PostgreSQL R-Trees nativo tem duas limitaes que os fazem indesejveis para o uso com caractersticas GIS (nota-se que estas limitaes so devido a atual implementao de PostgreSQL R-Tree nativa, no o conceito de R-Tree em geral): ndices R-Tree em PostgreSQL no podem controlar caractersticas que so de tamanhos maiores que 8K. ndices GiST podem, usando-se o "lossy" de substituio a caixa delimitada para caracterstica prpria. ndices R-Tree em PostgreSQL no so nenhuma "null safe" (sem segurana), assim construindo um ndice em uma coluna de geometria que contenha geometrias nulas falharo.

3.6. Porque usar a funo AddGeometryColumn () e todas as funes restante de OpenGIS?

Se voc no quer usar funes de suporte OpenGIS, no use. Simplesmente crie tabelas com verses mais velhas dentro, definindo suas colunas de geometria na declarao do CREATE . Todas suas geometrias tero SRIDs de valor -1, e os meta-dados de tabelas OpenGIS no sero preenchidas corretamente. Porm, isto vai causar falhas na maioria das aplicaes baseadas em PostGIS, e geralmente sugerido que voc use AddGeometryColumn () para criar tabelas de geometrias. Mapserver uma aplicao que faz uso dos meta-dados de geometry_columns. Especificamente, Mapserver pode usar o SRID da coluna de geometria para fazer caractersticas de reprojees rpidas dentro da correta projeo de mapa. 3.7. Qual o melhor caminho para achar todos os objetos dentro de outro objeto de rdio?

Para se usar o banco de dados eficientemente, melhor fazer uma seleo de rdio com qual combina o teste de rdio com um teste de caixa de salto: o teste de caixa delimitada usa o ndice espacial, enquanto um subconjunto de dados de acesso rpido, com o qual o teste de rdio aplicado. A funo Expand() uma maneira acessvel de ampliar um salto de caixa para permitir uma busca do ndice de uma regio do interesse. A combinao de uma clusula do ndice do acesso rpido e de um teste exato mais lento da distncia, fornece a melhor combinao da velocidade e da preciso para esta seleo. Por exemplo, procurar todos os objetos com 100 metros de POINT(1000 1000) a seleo a seguir trabalharia bem: SELECT * FROM GEOTABLE

WHERE GEOCOLUMN && Expand(GeomFromText('POINT(1000 1000)',-1),100) AND Distance(GeomFromText('POINT(1000 1000)',-1),GEOCOLUMN) < 100; 3.8. Como executar uma reprojeo coordenada como parte de uma seleo?

Para executar uma reprojeo, a fonte e sistemas de coordenada de destino devem ser definidos dentro da tabela SPATIAL_REF_SYS, e as geometrias que so reprojetadas j devem ser usadas em atribuio do SRID. Uma vez isso terminado, uma reprojeo to simples quanto recorrer ao destino desejado SRID. SELECT Transform(GEOM,4269) FROM GEOTABLE;

Captulo 4. Usando PostGIS 4.1. Objetos de GIS Suporte PostGIS a objetos de GIS so "Simple Features" (Caractersticas Simples) definidas pelo OpenGIS Consortium (OGC). Note que PostGIS suporta atualmente as caractersticas e a representao de APIs, mas no as vrias comparaes e operadores de convoluo cedidos na especificao OGC "Simple Features for SQL". PostGIS estende o padro com suport para coordenadas 3DZ, 3DM e 4D. 4.1.1. Padres de OpenGIS WKB e WKT A especificao OpenGIS define dois caminhos padres de objeto espacial de expresso: a forma Well-Known Text (WKT) e a forma Well-Known Binary (WKB). Ambos, WKT and WKB, incluem informao sobre o tipo do objeto e as coordenadas a qual forma o objeto. Exemplos das representaes de texto das caractersticas so como segue: POINT(0 0) LINESTRING(0 0,1 1,1 2) POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) MULTIPOINT(0 0,1 2) MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))

GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4)))

A especificao de OpenGIS requer tambm que o formato de armazenamento interno de objetos espaciais inclui um identificador de sistema referenciado espacial (SRID). O SRID requerido ao criar objetos espaciais para a insero no banco de dados. Input/Output desses formatos est disponvel usando as seguintes relaes: bytea WKB = asBinary(geometry); text WKT = asText(geometry); geometry = GeomFromWKB(bytea WKB, SRID); geometry = GeometryFromText(text WKT, SRID); Por exemplo, uma declarao vlida de insero para criar e inserir um objeto espacial de OGC seria:: INSERT INTO SPATIALTABLE ( THE_GEOM, THE_NAME ) VALUES ( GeomFromText('POINT(-126.4 45.32)', 312), 'A Place' ) 4.1.2. PostGIS Padres EWKB, EWKT e Formas Cannicas Somente o formato OGC suporta geometria 2d, e o SRID associado *nunca* faz parte das respresentaes do input/output. Formatos de extenso Postgis so atualmente superset de um OGC(cada WKB/WKT vlido um EWKB/EWKT vlido), mas mas isto pde variar no futuro, especificamente se OGC sasse com um formato novo que ope a nossas extenses. Assim voc NO DEVE confiar nesta caracterstica! Postgis EWKB/EWKT soma o suport a coordenadas 3dm,3dz,4d e faz parte das informaes SRID. Exemplos das representaes do texto (EWKT) dos objetos espaciais estendidos das caractersticas so como segue: POINT(0 0 0) -- XYZ SRID=32632;POINT(0 0) -- XY with SRID POINTM(0 0 0) -- XYM POINT(0 0 0 0) -- XYZM SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM with SRID

MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1)) POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)) MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0))) GEOMETRYCOLLECTIONM(POINTM(2 3 9),LINESTRINGM((2 3 4,3 4 5)))

Input/Output desses formatos so usados conforme a interface a seguir: bytea EWKB = asEWKB(geometry); text EWKT = asEWKT(geometry); geometry = GeomFromEWKB(bytea EWKB); geometry = GeomFromEWKT(text EWKT); Por exemplo, uma declarao vlida de insero para criar e inserir um objeto espacial seria: INSERT INTO SPATIALTABLE ( THE_GEOM, THE_NAME ) VALUES ( GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'lugar' ) A "canonical form" (forma cannica ) de um tipo PostgreSQL so as representaes que pega com uma simples "query" (sem uma chamada de funo) e no qual garantido para ser aceito com uma insero simples, atualizao ou cpia. Para o postgis tipo 'geometry' so esses: - Output binary: EWKB ascii: HEXEWKB (EWKB in hex form) - Input binary: EWKB ascii: HEXEWKB|EWKT Para o exemplo esta indicao l EWKT e retorna HEXEWKB no processo do input/output cannico do ascii: =# SELECT 'SRID=4;POINT(0 0)'::geometry; geometry ---------------------------------------------------01010000200400000000000000000000000000000000000000 (1 row)

4.1.3. SQL-MM Part 3 A especificao Espacial de Aplicaes de Multimedia do SQL estende as simples caractersticas para especificaes do SQL, definindo um nmero de curvas inseridas circularmente. As definies SQL-MM incluem coordenadas 3dm, 3dz e 4d, mas no permite embutir informao SRID. The well-known text extensions are not yet fully supported. Examples of some simple curved geometries are shown below: As extenses de texto conhecidas no so suportadas ainda por completo. Os exemplos de algumas geometrias curvadas simples so mostrados abaixo: CIRCULARSTRING(0 0, 1 1, 1 0) COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1)) CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)) MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4)) MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11)))

Nota Atualmente, PostGIS no pode suportar o uso de curvas compostas (Compound Curves) em um polgono curvo (Curve Polygon). Nota Todas as comparaes do ponto flutuante dentro da implementao de SQL-MM so executadas para uma tolerncia especificada, atualmente 1E-8. 4.2. Usando Padres de OpenGIS O OpenGIS "Simple Features Specification for SQL" define tipos de objetos padro GIS, as funes requeridas para manipul-las e uma especificao de tabela de meta-dados. Para asse- gurar que os meta-dados permaneam consistentes, operaes como criar e remover uma coluna espacial so carregadas fora atravs da definio procedures especiais por OpenGIS. E x i s t e m d u a s t a b e l a s d e m e t a - d a d o s O p e n G I S : S PAT I A L _ R E F _ S Y S e GEOMETRY_COLUMNS. A tabela SPATIAL_REF_SYS carrega os identificadores numricos e descries textuais de sistemas de coordenada usadas no banco de dados espacial. 4.2.1. Tabela de Sistemas de Referncias Espacial (SPATIAL_REF_SYS) A definio da Tabela de Sistemas de Referncias Espacial (SPATIAL_REF_SYS) como segue: CREATE TABLE SPATIAL_REF_SYS (

SRID INTEGER NOT NULL PRIMARY KEY, AUTH_NAME VARCHAR(256), AUTH_SRID INTEGER, SRTEXT VARCHAR(2048), PROJ4TEXT VARCHAR(2048) ) As colunas SPATIAL_REF_SYS so como segue: SRID Um valor inteiro que exclusivamente identifica o Sistema de Referncia Espacial (Spacial Referencing System - SRS) dentro do banco de dados. AUTH_NAME Nome do padro ou corpo de padres que esto sendo citados para este sistema de referncia. Por exemplo, "EPSG" seria um AUTH_NAME vlido. AUTH_SRID O ID do Sistema de Referncia Espacial (SRID) como definido pela autoridade citada no AUTH_NAME. No caso de EPSG, onde o cdigo de projeo EPSG ficaria. SRTEXT Representao de Well-Known Text do Sistema de Referncia Espacial (WKT SRS). Um exemplo de uma representao WKT SRS : PROJCS["NAD83 / UTM Zone 10N", GEOGCS["NAD83", DATUM["North_American_Datum_1983", SPHEROID["GRS 1980",6378137,298.257222101] ], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433] ], PROJECTION["Transverse_Mercator"], PARAMETER["latitude_of_origin",0], PARAMETER["central_meridian",-123], PARAMETER["scale_factor",0.9996], PARAMETER["false_easting",500000], PARAMETER["false_northing",0], UNIT["metre",1] ] Para uma listagem de cdigos de projeo Grupo de Exame Europeu do Petrleo (EPSG - European Petroleum Survey Group) e suas correspondentes representaes, veja http:// www.opengis.org/techno/interop/EPSG2WKT.TXT. Para uma discusso de WKT em geral, veja OpenGIS "Coordinate Transformation Services Implementation Specification" em http://www.opengis.org/techno/specs.htm. Para informaes do Grupo de Exame Europeu do Petrleo (EPSG - European Petroleum Survey Group) e seu banco de dados de sistemas de referncia espacial, veja: http://epsg.org/. PROJ4TEXT

PostGIS usa a biblioteca Proj4 para fornecer potencialidades de transformaocoordenadas . A coluna de PROJ4TEXT contem a string de definio de coordenada Proj4 para um SRID particular. Por exemplo: +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m Para mais informaes a respeito, veja a pgina de Proj4 em http:// www.remotesensing.org/proj. O arquivo spatial_ref_sys.sql contm ambas definies, SRTEXT and PROJ4TEXT,para todas as projees. 4.2.2. Tabela de Colunas Geomtricas (GEOMETRY_COLUMNS) A definio de Tabela de Colunas Geomtricas (GEOMETRY_COLUMNS) como segue: CREATE TABLE GEOMETRY_COLUMNS ( F_TABLE_CATALOG VARCHAR(256) NOT NULL, F_TABLE_SCHEMA VARCHAR(256) NOT NULL, F_TABLE_NAME VARCHAR(256) NOT NULL, F_GEOMETRY_COLUMN VARCHAR(256) NOT NULL, COORD_DIMENSION INTEGER NOT NULL, SRID INTEGER NOT NULL, TYPE VARCHAR(30) NOT NULL ) As colunas so como segue: F_TABLE_CATALOG, F_TABLE_SCHEMA, F_TABLE_NAME Nome completamente qualificado da caracterstica tabela contendo a coluna geomtrica. Note que as condies "catalog" e "schema" so Oracle-ish. No existe anlogo de "catalog" PostgreSQL de forma que a coluna espao em branco a esquerda - para "schema" o nome de banco de dados PostgreSQL usado. (public o default). F_GEOMETRY_COLUMN O nome da coluna geomtrica na tabela caracterstica COORD_DIMENSION Dimenso de espao (2, 3 ou 4 dimensional) da coluna. SRID Identificador do sistema de referncia espacial usado para a coordenada geomtrica nesta tabela. uma chave de referncia estrangeira para o SPATIAL_REF_SYS. TYPE Tipo do objeto espacial. Restringir a coluna espacial a um nico tipo, usar um: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION or corresponding XYM versions POINTM, LINESTRINGM, P O LY G O N M , M U LT I P O I N T M , M U LT I L I N E S T R I N G M , M U LT I P O LY G O N M , GEOMETRYCOLLECTIONM. Para colees heterogneas (mixed-type), voc pode usar "GEOMETRY" como tipo.

Nota Este atributo no (provavelmente) parte da especificao OpenGIS, mas requerido para homogeneidade de tipo assegurado. 4.2.3. Criando uma Tabela Espacial Criao de uma tabela com dados espaciais feito em duas fases: Criar uma tabela normal , ou seja, sem dados espacias. Por exemplo: CREATE TABLE ROADS_GEOM ( ID int4, NAME varchar(25) ) Acrescentar uma coluna espacial para a tabela que usa a funo OpenGIS "AddGeometryColumn." A sintaxe : AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>) ou, usando "schema" corrente: AddGeometryColumn(<table_name>, <column_name>, <srid>, <type>, <dimension>) Exemplo1: SELECT AddGeometryColumn('public', 'roads_geom', 'geom', 423, 'LINESTRING', 2) Exemplo2: SELECT AddGeometryColumn( 'roads_geom', 'geom', 423, 'LINESTRING', 2) Existe um exemplo de SQL usado para criar tabela e adicionar uma coluna espacial (assumindo que um SRID de 128 j existe): CREATE TABLE parks ( PARK_ID int4, PARK_NAME varchar(128), PARK_DATE date, PARK_TYPE varchar(2) ); SELECT AddGeometryColumn('parks', 'park_geom', 128, 'MULTIPOLYGON', 2 ); Existe outro exemplo, usando o tipo "geometry" genrico e o indefinido SRID de valor -1: CREATE TABLE roads ( ROAD_ID int4, ROAD_NAME varchar(128) ); SELECT AddGeometryColumn( 'roads', 'roads_geom', -1, 'GEOMETRY', 3 ); 4.2.4. Assegurando-se conforme a geometria de OpenGIS A maioria das funes executadas pela biblioteca de GEOS confiam na suposio que suas geometrias so vlidas como especificadas pela Especificao de Caracterstica Simples de OpenGIS (OpenGIS Simple Feature Specification). Para verificar a validade das geometrias voc pode usar a funo IsValid(): gisdb=# select isvalid('LINESTRING(0 0, 1 1)'), isvalid('LINESTRING(0 0,0 0)'); isvalid | isvalid

---------+--------t|f Por default, PostGIS no aplica esta verificao de validade na entrada da geometria, porque testar a validade necessita lotes de tempo do processador central (CPU) para geometrias complexas, especialmente poligonos. Se no confiar em suas fontes de dados, pode manualmente reforar tal verificao a suas tabelas, adicionando um confinamento da verificao: ALTER TABLE mytable ADD CONSTRAINT geometry_valid_check CHECK (isvalid(the_geom)); Se voc encontrasse quaisquer mensagens de erro estranhas como "GEOS Intersection() apresentou um erro!" ou "JTS Intersection() apresentou um erro!" quando chamar funes PostGIS com entrada de geometrias vlidas, voc provavelmente encontrou um erro em PostGIS ou em uma das bibliotecas de uso dele, e voc deve contatar os colaboradores de PostGIS. O mesmo verdadeiro se uma funo de PostGIS retornar uma geometria invlida para a entrada vlida. Note Estritamente as geometrias de OGC no podem ter valores de Z ou de M. A funo vlida IsValid() no considerar geometrias altamente calculadas as dimenses invlidas! Invocaes de AddGeometryColumn() adicionar confinamente, verificando dimenses da geometria, assim como bastante para especificar. 4.3. Carregando Dados de GIS Uma vez que voc criou uma tabela espacial, voc est pronto para atualizar os dados de GIS no banco de dados. Atualmente, existem dois caminhos para entrar com os dados no banco de dados PostGIS/PostgreSQL: usando declaraes de SQL formatadas ou usando o carregador/descarregador de arquivo Shape. 4.3.1. Usando SQL Se voc pode converter dados de uma representao de texto, ento usando SQL formatado poderia ser o modo mais fcil de entrar com seus dados em PostGIS. Como com Oracle e outros bancos de dados de SQL, os dados podem ser carregados em grandes quantidades e transportados em um grande arquivo de texto SQL cheio de declaraes de "INSERT" dentro do terminal SQL. A carga de um arquivo de dados (roads.sql por exemplo) poderia se parecer como segue: BEGIN; I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S (1,GeomFromText('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd'); I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S (2,GeomFromText('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd'); I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S (3,GeomFromText('LINESTRING(192783 228138,192612 229814)',-1),'Paul St'); I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S (4,GeomFromText('LINESTRING(189412 252431,189631 259122)',-1),'Graeme Ave');

I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S (5,GeomFromText('LINESTRING(190131 224148,190871 228134)',-1),'Phil Tce'); I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S (6,GeomFromText('LINESTRING(198231 263418,198213 268322)',-1),'Dave Cres'); COMMIT; O arquivo de dados pode ser transportado facilmente para dentro do PostgreSQL usando o monitor de terminal SQL "psql": psql -d [database] -f roads.sql 4.3.2. Usando o Carregador O carregador de dados shp2pgsql converte arquivos ESRI Shape dentro do SQL de maneira correta para insero em um banco de dados de PostGIS/PostgreSQL. O carregador tem vrios modos operacionais distinguidos em linha de comando por parametro: -d Exclui a tabela do banco de dados antes de criar uma nova tabela com os dados no arquivo Shape. -a Acrescenta dados do arquivo Shape 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 mesmos tipos de dados. -c Cria uma nova tabela e insere dados do arquivo Shape. Este parametro o modo padro. -p Produz somente o cdigo do SQL da criao da tabela, sem adicionar nenhum dado real. Isto pode ser usado se voc necessitar separar completamente as etapas da criao da tabela e do carregamento dos dados. -D Cria uma nova tabela e insere dados do arquivo Shape. Este parametro usa o "dump" formato PostgreSQL para os dados de produo e muito mais rpido carregar que o padro "insert" formato SQL. Use isto para quantidades grandes de dados. Use o formato do "dump" de PostgreSQL para os dados da sada. Isto pode ser combinado com - a, - o c e - d. muito mais rpido carregar do que o default de insero do formato SQL. Use isto para sries de dados muito grandes. -s <SRID> Cria e insere tabelas de geometria com o SRID especificado. -k Conserva identificadores de caso (coluna, schema e atributos). Note que os atributos em Shapefile so todos UPPERCASE. -i Conserva identificadores de caso (coluna, schema e atributos). Note que os atributos em Shapefile so todos UPPERCASE.

-w Formato de sada WKT, para o uso com verses de PostGISanteriores (0.x). Note que isto introduzir traes coordenadas e deixar cair valores de M de shapefiles. -W <encoding> Specify encoding of the input data (dbf file). When used, all attributes of the dbf are converted from the specified encoding to UTF8. The resulting SQL output will contain a SET CLIENT_ENCODING to UTF8 command, so that the backend will be able to reconvert from UTF8 to whatever encoding the database is configured to use internally. Especificar codificando os dados de entrada (arquivo dbf). Quando usados, todos os atributos do dbf so convertidos da codificao especificada para UTF8. A sada resultante do SQL conter um comando SET CLIENT_ENCODING para UTF8, de modo que o retorno estar apto para uma converso de UTF8 para qualquer codificao de banco de dados que configurado para usar internamente. Note que - a, - c, - d e - p mutuamente exclusivo. Uma sesso de exemplo que usa o carregador para criar um arquivo e carreg-lo poderia ser como segue: # shp2pgsql shaperoads myschema.roadstable > roads.sql # psql -d roadsdb -f roads.sql Podem ser feitos uma converso e carga de tudo em um nico comando, usando caminhos (pipes) como no UNIX: # shp2pgsql shaperoads myschema.roadstable | psql -d roadsdb 4.4. Recuperando Dados de GIS Podem ser extrados dados do banco de dados usando outro SQL ou o arquivo carregador/descarregador Shape. No item SQL discutiremos alguns dos operadores disponvel para fazer comparaes e selecionar tabelas espaciais. 4.4.1. Usando SQL Os meios mais diretos de extrair dados do banco de dados so usar um SQL, para selecionar dados e descarregar as colunas resultantes em um arquivo de texto: db=# SELECT id, AsText(geom) AS geom, name FROM ROADS_GEOM; id | geom | name ---+-----------------------------------------+----------1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd 2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd 3 | LINESTRING(192783 228138,192612 229814) | Paul St 4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave 5 | LINESTRING(190131 224148,190871 228134) | Phil Tce 6 | LINESTRING(198231 263418,198213 268322) | Dave Cres 7 | LINESTRING(218421 284121,224123 241231) | Chris Way (6 rows)

Porm, haver restries que ser necessrio reduzir o nmero de campos devolvido. No caso de restries atributos-baseados, usar exatamente a mesma sintaxe de SQL como normal com uma tabela no espacial. No caso de restries espaciais, os operadores seguintes so habilitados/completos: && Este operador diz se caixa delimitada de uma geometria sobrepe caixa delimitada de outra. ~= Estes operadores testam se duas geometrias so geometricamente idnticas. Por exemplo,se ' POLYGON((0 0,1 1,1 0,0 0)) ' est igual a ' POLYGON((0 0,1 1,1 0,0 0)) '. = Este operador um pequeno mais ingnuo, s testa se as caixas delimitadas para geometrias o mesmo. Logo, voc pode usar estes operadores em questo. Note que ao especificar geometrias e caixas na linha de comando SQL, voc tem que transformar as representaes de string explicitamente em geometrias usando a funo "GeometryFromText () ". Por exemplo: SELECT ID, NAME FROM ROADS_GEOM WHERE GEOM ~= GeomFromText('LINESTRING(191232 243118,191108 243242)',-1); A "query" anterior devolveria o nico registro da tabela "ROADS_GEOM" pela qual a geometria era igual aquele valor. Ao usar o operador "&& ", pode especificar um outro BOX3D como caracterstica de comparao ou um GEOMETRY. Porm, quando voc especifica um GEOMETRY que sua caixa delimitada ser usada para a comparao. SELECT ID, NAME FROM ROADS_GEOM WHERE GEOM && GeomFromText('POLYGON((191232 243117,191232 243119,191234 243117,191232 243117))',-1); A "query" anterior usar a caixa delimitada do polgono para propsitos de comparao. A "query" espacial mais comum provavelmente ser uma query "frame-based", usada por cliente de software, como navegador de dados e mapas na web, pegar um valor de dados "map-frame" para exibio. Usando um objeto "BOX3D" para a visualizao, como demonstrado como segue: SELECT AsText(GEOM) AS GEOM FROM ROADS_GEOM WHERE

GEOM && GeomFromText('BOX3D(191232 243117,191232 243119)'::box3d,-1); Note que o uso do SRID, especifica a projeo do BOX3D. O valor -1 usado para indicar nenhum SRID especificado. 4.4.2. Usando o Descarregador O descarregador de tabela pgsql2shp conecta diretamente ao banco de dados e converte uma tabela em um arquivo Shape. A sintaxe bsica : pgsql2shp [<options>] <database> [<schema>.]<table> pgsql2shp [<options>] <database> <query> As opes de linha de comando so: -f <filename> Escreva uma sada para um nome de arquivo particular. -h <host> O banco de dados do host para conectar. -p <port> A porta para conectar ao banco de dados do host. -P <password> A senha para usar a conexo do banco de dados. -u <user> O nome do usurio para usar a conexo do banco de dados. -g <geometry column> No caso de tabelas com colunas de geometria mltiplas, usar a coluna de geometria quando escrever o arquivo Shape. -b Use um cursor binrio. Isto far a operao mais rpida, mas no trabalhar se qualquer atributo da NON-geometry na tabela faltar um molde ao texto. -r Modalidade pura. No destrua o campo "gid", ou nomes da coluna "escape". -d Para a compatibilidade inversa: escrever um arquivo shape 3-dimensional, quando descarregar do banco de dados de postgis anteriores (pre-1.0.0) - o padro escrever um arquivo Shape 2- dimensional neste caso). Inicie de postgis-1.0.0+, as dimenses so codificadas inteiramente. 4.5. Construindo ndices ndice o que faz usando um banco de dados espacial para um possvel bancos de dados grandes. Sem indexao, nenhuma busca por caracterstica requereria uma

procura sequencial de todo registro no banco de dados. Velocidades indexadas para cima procurando os dados organizados em uma rvore de procura que pode ser atravessada para achar um registro rapidamente. PostgreSQL apia trs tipos de ndices atravs do padro: ndices B-Trees, ndices R-Trees e ndices GiST. B-Trees so usadas para dados que podem ser ordenados ao longo de um eixo; por exemplo, nmeros, cartas, datas. Dados de GIS no podem ser racionalmente ordenados ao longo de um eixo (o qual maior, (0,0) ou (0,1) ou (1,0)?) assim indexao B-Tree intil para ns. R-Trees abre dados em retngulos, sub-retngulos, e sub-sub retngulos, etc. RTrees so usados por alguns bancos de dados espaciais para indexar dados de GIS, mas uma implementao R-Tree PostgreSQL no como uma implementao robusta de GiST. ndices GiST (Generalized Search Trees) abre dados em "things to one side" (pense por um lado), "things which overlap" (coisas que sobreponham), "things which are inside" (coisas que esto dentro) e podem ser usadas em uma gama extensiva de tipos de dados, inclusive dados de GIS. PostGIS usa um ndice de R-Tree implementado em cima de GiST para indexar dados de GIS.

4.5.1. ndices GiST GiST representa "Generalized Search Tree" e uma forma generalizada de indexar. Alm da da indexao de GIS, GiST usada para acelerar buscas em todos os tipos de estruturas de dados irregulares (arranjos de nmeros inteiros, dados espectrais, etc) que no so amenos a indexao normal B-Tree. Uma vez que uma tabela de dados de GIS excede algumas mil linhas, voc poder construir um ndice para buscas espaciais de dados (a menos que todas suas buscas estejam baseadas em atributos, pelo qual voc queira construir um ndice normal nos campos de atributo). A sintaxe para construir um ndice de GiST em uma coluna de geometria como segue: CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] 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 estatsticas de tabela que so usadas para otimizar planos de "query": VACUUM ANALYZE [table_name] [column_name]; -- This is only needed for PostgreSQL 7.4 installations and below SELECT UPDATE_GEOMETRY_STATS([table_name], [column_name]);

ndices GiST tm duas vantagens em relao a ndices R-Tree em PostgreSQL. Em primeiro lugar, ndices GiST so "null safe" (segurana nula), significando que eles podem indexar colunas que incluem valores nulos. Em segundo lugar, indices GiST apiam o conceito de "lossiness" que importante quando lidado com objetos de GIS com pginas PostgreSQL de tamanhos maiores que 8K. "Lossiness" permite PostgreSQL armazenar somente a parte impor tante de um objeto em um ndice - no caso de objetos de GIS, s a caixa de saltos. Objetos de GIS maiores que 8K causaro ndices R-Tree para falhar no processo de ser construdo. 4.5.2. Usando ndices ndices aceleram o acesso de dados: uma vez que o ndice construdo, a transparncia de planejamento de queries decide quando usar informao de ndice para acelerar um plano de "query". Infelizmente, a "query" PostgreSQL no planeja otimizar bem o uso de ndices de GiST, s vezes buscas que deveriam usar um ndice espacial ao invs do padro para uma busca sequencial da tabela inteira. Se voc acha que seus ndices espaciais no esto sendo usados (ou seus ndices de atributo, para aquele assunto) existe um agrupamento de coisas que voc pode fazer: Primeiramente, certifique-se que as estatisticas so coletadas sobre o nmero e distribuies dos valores em uma tabela, proporcionando para o operador de "query", melhor informao de tomada de decises em torno do uso de ndices Para instalaes PostgreSQL 7.4 e anteriores, rodado: update_geometry_stats([table_name, column_name]) (agrupa estatsticas distribuies de valores em uma tabela) e VACUUM ANALYZE [table_name] [column_name] (agrupa estatsticas a respeito do nmero de valores em uma tabela). Comeando com PostgreSQL 8.0 rodando VACUUM ANALYZE far ambas as operaes. Voc deveria limpar regularmente seus bancos de dados - muitos DBAs PostgreSQL tm rodado "VACUUM" (vazio) com a carga mxima de trabalho "cron" desligada em bases regulares. Se no limpar seus trabalhos, voc pode forar o operador a usar informao de ndice utilizando o comando SET ENABLE_SEQSCAN=OFF. Voc com certeza s deveria usar este comando, em queries espacialmente indexadas: em geral, o operador sabe melhor que voc o que fazer a respeito, quando usar ndices normais de B-Tree. Uma vez que voc rodou sua "query", voc deveria considerar a situao ENABLE_SEQSCAN atrs ligado, de maneira que outras queries o operador utilizar como normal. Nota A partir de verso 0.6, no deveria ser necessrio forar o operador a usar o ndice com ENABLE_SEQSCAN.

Se voc encontrar o operador errado sobre o custo de sequencial versus varreduras de ndice, tente reduzir o valor de "random_page_cost" em postgresql.conf ou usando SET "random_page_cost"=#. O valor default para o parmetro 4, tente ajust-lo para 1 ou 2. Decremente o valor que faz o operador mais inclinado, usando varreduras de ndice. 4.6. Queries Complexas

A finalidade da existncia propriamente para a funcionalidade do banco de dados espacial est em executar queries dentro do banco de dados que deveria requerer funcionalidade contidas em desktop GIS. Usando PostGIS efetivamente requer conhecimento de quais funes espaciais esto disponveis, e assegura-se que ndices apropriados esto em lugar que aprovam bom desempenho. 4.6.1. Vantagens dos ndices Na construo de uma "query" importante lembrarmos que os operadores baseados em saltos de caixa tal como &&, pode tirar proveito do ndice espacial de GiST. Funes como distance () no pode usar o ndice para otimizar suas operaes. Por exemplo, a "query" seguinte seria bastante lenta em uma tabela grande: SELECT the_geom FROM geom_table WHERE distance( the_geom, GeomFromText( 'POINT(100000 200000)', -1 ) ) < 100 Esta "query" est selecionando todas as geometrias em geom_table que est dentro de 100 unidades do ponto (100000, 200000). Estar lento porque est calculando a distncia entre cada ponto na tabela e nosso ponto especificado, ie. distance () calculados para cada linha na tabela. Podemos evitar isto usando o operador && para reduzir o nmero de clculos de distncia requerido: SELECT the_geom FROM geom_table WHERE the_geom && 'BOX3D(90900 190900, 100100 200100)'::box3d AND distance( the_geom, GeomFromText( 'POINT(100000 200000)', -1 ) ) < 100 Esta "query" seleciona as mesmas geometrias, mas faz isto de um modo mais eficiente. Supondo que existe um ndice GiST em the_geom, o operador de "query" 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 centrada no ponto original unidade 200 - esta nossa "query box". O operador && usa o ndice para reduzir rapidamente o resultado atribudo a essas geometrias, que tm salto de caixas que sobrepem a "query box". Supondo que nossa "query box" muito menor que as extenses da tabela de geometria inteira, isto reduzir drasticamente o nmero de distncia de clculos que precisam ser feitos. 4.6.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 definies de tabela para a tabela dos bc_roads so: Column | Type | Description ------------+-------------------+------------------gid | integer | Unique ID name | character varying | Road Name the_geom | geometry | Location Geometry (Linestring) A definio de tabela para a tabela do bc_municipality : Column | Type | Description -----------+-------------------+-------------------

gid | integer | Unique ID code | integer | Unique ID name | character varying | City / Town Name the_geom | geometry | Location Geometry (Polygon) 4.6.2.1. Qual o comprimento total de todas as estradas, expressado nos quilmetros? 4.6.2.2. Qual a rea da cidade de So Paulo, em hectares? 4.6.2.3. Qual a maior municipalidade na provncia, por rea? 4.6.2.4. Qual o tamanho completo das estradas contidas inteiramente dentro de cada municipalidade? 4.6.2.5. Cre uma nova tabela com todas as estradas dentro da cidade de So Paulo. 4.6.2.6. Qual o tamanho em quilmetros, da Avenida dos Autonomistas, em OSASCO? 4.6.2.7. Qual o maior polgono da municipalidade que tem uma regra? 4.6.2.1. Qual o comprimento total de todas as estradas, expressado nos quilmetros?

Voce pode responder esta questo com uma parte muito simples de SQL: postgis=# SELECT sum(length(the_geom))/1000 AS km_roads FROM bc_roads; km_roads -----------------70842.1243039643 (1 row) 4.6.2.2. Qual a rea da cidade de So Paulo, em hectares?

Esta "query" combina uma condio do atributo (no nome da municipalidade) com um clculo espacial (da rea): postgis=# SELECT area(the_geom)/10000 AS hectares FROM bc_municipality WHERE name = 'SO PAULO' -----------------32657.9103824927 (1 row) 4.6.2.3. Qual a maior municipalidade na provncia, por rea?

Esta "query" traz uma medida espacial na condio da "query". H diversas maneiras de avaliar este problema, mas o mais eficiente est abaixo: postgis=# SELECT name, area(the_geom)/10000 AS hectares FROM bc_municipality ORDER BY hectares DESC LIMIT 1; name | hectares ---------------+----------------TUMBLER RIDGE | 155020.02556131

(1 row) Note que a ordem para responder a esta "query", ns temos que calcular a rea de cada polgono. Se ns fizssemos isto muito, teria sentido acrescentar uma coluna da rea tabela, que ns poderamos separadamente posicionar para o desempenho. Requisitando os resultados em um sentido descendente, e por eles que usam o comando de PostgreSQL "LIMIT", ns podemos facilmente extrair o maior valor, sem usar uma funo agregada como o max(). 4.6.2.4. Qual o tamanho completo das estradas contidas inteiramente dentro de cada municipalidade?

Este um exemplo de um "spatial join" , porque ns estamos trazendo junto dados de duas tabelas (que fazem juntar), mas estamos usando uma condio de interao espacial ("contained") como a melhor condio de juntar do que a aproximao relacional usual de juntar em uma chave comum: postgis=# 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; name | roads_km ----------------------------+-----------------SURREY | 1539.47553551242 VANCOUVER | 1450.33093486576 LANGLEY DISTRICT | 833.793392535662 BURNABY | 773.769091404338 PRINCE GEORGE | 694.37554369147 ... Esta "query" examina porque cada estrada na tabela sumarizada no resultado final (sobre as estradas 250K para nossa tabela do exemplo particular). Para menores "overlays" (mil registros em cem) a resposta pode ser muito rapida. 4.6.2.5. Crie uma nova tabela com todas as estradas dentro da cidade de So Paulo.

Este um exemplo de um "overlay", que examina em duas tabelas e sadas em uma nova tabela, que consiste espacialmente "clipped" ou do corte de resultados. Ao contrrio do "spatial join" demonstrado acima, esta "query" cria realmente novas geometrias. Um "overlay" como um turbo-carregado de "spatial join", e til para um trabalho mais exato da anlise: postgis=# 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 = 'SO PAULO'; 4.6.2.6. Qual o tamanho em quilmetros, da Avenida dos Autonomistas, em OSASCO?

postgis=# 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 = 'Avenida dos Autonomistas' AND m.name = 'OSASCO'; kilometers -----------------4.89151904172838 (1 row) 4.6.2.7. Qual o maior polgono da municipalidade que tem uma regra?

postgis=# 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 -----+--------------+-----------------12 | SPALLUMCHEEN | 257374619.430216 (1 row) 4.7. Usando Mapserver O Minnesota Mapserver um servidor Web Map na internet que adapta-se a especificao do Servidor de Mapas na Internet OpenGIS . A homepage do Mapserver est em http://mapserver.gis.umn.edu/. A especificao de Web Map OpenGIS est em http://www.opengis.org/techno/ specs/01-047r2.pdf.

4.7.1. Uso Bsico Usar PostGIS com Mapserver, voc precisar conhecer como configurar o Mapserver que est alm da extenso desta documentao. Esta seo cobrir distribuio e detalhes de configurao de PostGIS especfico. Usar PostGIS com Mapserver, voc precisar: Verso 0.6 ou posterior de PostGIS. Verso 3.5 ou posterior de Mapserver.

Mapserver acessa dados de PostGIS/PostgreSQL como qualquer outro cliente de PostgreSQL- usando libpq. Estes meios que Mapserver pode ser instalado em qualquer mquina com acesso de rede para o servidor de PostGIS, enquanto o sistema tem bibliotecas client de PostgreSQL libpq. 1. Compile e instale Mapserver, com qualquer opes que voc deseje, inclusive a opo de configurao "-with-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 # 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 especificao do PostGIS so como segue: CONNECTIONTYPE Para camadas de PostGIS, este sempre "postgis." CONNECTION A conexo de banco de dados governada por uma 'connection string' do qual um padro de coleo de chaves e valores como este (com os valores padres em <>): user=<username> password=<password> dbname=<username> hostname=<server> port=<5432> Um fio de conexo vazio ainda vlido, e nenhum dos pares de chave/valor podem ser omitido. No mnimo voc se prover do nome e usurio do banco de dados com c conexo. DATA A forma deste parmetro "< column> from <tablename>" onde a coluna a coluna espacial a ser traduzida no mapa.

3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.

FILTER O filtro deve ser uma string SQL vlida correspondendo lgica que normalmente segue da palavra-chave "WHERE" em uma "query" SQL. Por exemplo, assim fazer s estradas com 6 ou mais pistas, use um filtro de "num_lanes >= 6."

28. Em seu banco de dados espacial, assegure-se que voc tem ndices espaciais (GiST) construdos para qualquer das camadas que voc estar desenhando. 29. 30. 31. 32. CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] GIST_GEOMETRY_OPS ); Se voc estivesse examinando suas camadas usando Mapserver voc tambm precisaria de um "oid index." Mapserver requer identificadores nicos para cada registro espacial ao fazer queries, e o mdulo de Mapserver PostGIS usa o valor oid PostgreSQL para prover estes identificadores nicos. Um efeito colateral disto que para fazer acesso randmico rpido de registros durante queries, um "oid index" necessrio. Construir um "oid index", use o SQL seguinte:

33. CREATE INDEX [indexname] ON [tablename] ( oid ); 4.7.2. Perguntas Mais Frequentes 4.7.2.1. Quando eu uso uma EXPRESSO em meu arquivo de mapa, a condio nunca retorna como verdadeira, mesmo que eu saiba os valores existentes em minha tabela. 4.7.2.2. O FILTRO que eu me uso para meus arquivos Shape no est trabalhando para minha tabela de PostGIS de mesmos dados. 4.7.2.3. A extrao da camada de PostGIS muito mais lenta do que a camada do arquivo Shape, este normal? 4.7.2.4. A extrao da camada de PostGIS fina, mas as queries so realmente lentas. O que est errado? 4.7.2.1. Quando eu uso uma EXPRESSO em meu arquivo de mapa, a condio nunca retorna como verdadeira, mesmo que eu saiba os valores existentes em minha tabela.

Ao contrrio dos arquivos Shape, os nomes de campo de PostGIS tm que ser referenciado nas expresses usando um caso mais baixo. EXPRESSION ([numlanes] >= 6) 4.7.2.2. O FILTRO que eu me uso para meus arquivos Shape no est trabalhando para minha tabela de PostGIS de mesmos dados.

Ao contrrio dos arquivos Shape, filtros para camadas de PostGIS usa a sintaxe SQL (so adicionados declarao do SQL o conector de PostGIS que extrai camadas em Mapserver). FILTER "type = 'highway' and numlanes >= 4" 4.7.2.3. A extrao da camada de PostGIS muito mais lenta do que a camada do arquivo Shape, este normal?

Em geral, espera-se camadas de PostGIS serem 10% mais lenta do que camadas de arquivos Shape, devido o "overhead" extra envolvido em conexes do banco de dados, em transformaes de dados e trnsito de dados entre o banco de dados e o Mapserver. Se voc estiver encontrando problemas substanciais de desempenho, provvel que voc no tem a configurao, um ndice espacial em sua tabela. postgis# CREATE INDEX geotable_gix ON geotable USING GIST ( geocolumn ); postgis# SELECT update_geometry_stats(); -- For PGSQL < 8.0 postgis# VACUUM ANALYZE; -- For PGSQL >= 8.0 4.7.2.4. A extrao da camada de PostGIS fina, mas as queries so realmente lentas. O que est errado?

Para que as "queries" sejam rpidas, voc deve ter uma chave original para sua tabela espacial e voc deve ter um ndice nessa chave original. Voc pode especificar que chave original para o Mapserver usar com a clusula "USING UNIQUE" em sua linha de dados: DATA "the_geom FROM geotable USING UNIQUE gid" Se sua tabela no tiver uma coluna original explcita, voc pode usar "fake" para uma nica coluna usando a linha de PostgreSQL "oid" para sua coluna original. "oid" a coluna original "default" se voc no declarar um, assim que reforar sua velocidade da "query", um problema de construo em ndice no valor "oid" de sua tabela espacial. postgis# CREATE INDEX geotable_oid_idx ON geotable (oid); 4.7.3. Uso Avanado A clusula USING pseudo-SQL usada para acrescentar alguma informao para ajudar a entender os resultados mapserver de maior complexidade das queries. Mais especificamente, quando uma viso ou um subselect usado como tabela fonte (a uso certo de "FROM" em uma definio de DATA) mais difcil para mapserver que automaticamente determina um identifi- cador nico para cada linha e tambm o SRID para a tabela. A clusula USING pode proporcionar para mapserver estes dois tipos de informao como segue: DATA "the_geom FROM (SELECT table1.the_geom AS the_geom, table1.oid AS oid, table2.data AS data

FROM table1 LEFT JOIN table2 ON table1.id = table2.id) AS new_table USING UNIQUE oid USING SRID=-1" USING UNIQUE <uniqueid> Mapserver requer um id nico para cada linha para identificar a linha quando esboa queries. Normalmente, usaria o oid como identificador nico, mas views e subselects no tem automaticamente uma coluna "oid". Se voc quiser usar a funcionalidade de "query" de Mapserver, voc precisa acrescentar uma nica coluna para "views" ou "subselects" , e declar-la com USING UNIQUE. Por exemplo, voc poderia selecionar um valor para "oid" da prpria tabela para este propsito, ou nenhuma coluna que garantido ser nico para o resultado final. A declarao USING tambm pode ser muito til para declaraes de dados simples, se voc esboando "queries". Recomendavasse previamente que, para acrescentar um ndice na coluna oid das tabelas usadas nas camadas "query-able", em ordem acelara o desempenho de "queries" de mapa. Porm, com a clusula USING, possvel dizer que para o mapserver usa chave primria em suas prprias tabelas como o identificador de "queries" de mapa, e ento necessariamente no ter o mais longo ndice adicional. Nota Examinando um mapa (Quering a Map) a ao de "clicking" em um mapa e questionar informaes a respeito de caractersticas de mapa naquele local. No confunda "map queries" com o "query" SQL em uma definio DATA. USING SRID=<srid> PostGIS necessita saber qual referenciamento de sistema espacial que est sendo usado pelas geometrias em ordem para que devolva os dados corretos atrs do mapserver. Normalmente possvel encontrar esta informao dentro da tabela "geometry_columns" no banco de dados de PostGIS, porm, isto no possvel para tabelas que so criadas superficialmente como "view"s e "subselects". Assim o USING SRID= opo que permite o correto SRID ser especificado na definio DATA. Aviso O parceiro para camadas de PostGIS Mapserver razoavelmente primitivo, e caso sensvel em algumas reas. Tenha cuidado para assegurar-se de que todos as palavras chaves do SQL e todas suas clusulas USING estejam em caso superior, e que sua clusula USING UNIQUE precede sua clusula "USING SRID. 4.7.4. Exemplos Comeamos com um exemplo simples e que levanta nosso trabalho. Considere a seguir a definio de camada de Mapserver: LAYER CONNECTIONTYPE postgis NAME "roads" CONNECTION "user=theuser password=thepass dbname=thedb host=theserver" DATA "the_geom FROM roads" STATUS ON

TYPE LINE CLASS COLOR 0 0 0 END END Esta camada exibir todas as geometrias de estrada na tabela de estradas com linhas pretas. Agora dizemos que ns queremos mostrar s as rodovias at que ns conseguirmos fechar a cmara em pelo menos 1:100000 balana as prximas duas camadas obtero este efeito: LAYER CONNECTION "user=theuser password=thepass dbname=thedb host=theserver" DATA "the_geom FROM roads" MINSCALE 100000 STATUS ON TYPE LINE FILTER "road_type = 'highway'" CLASS COLOR 0 0 0 END END LAYER CONNECTION "user=theuser password=thepass dbname=thedb host=theserver" DATA "the_geom FROM roads" MAXSCALE 100000 STATUS ON TYPE LINE CLASSITEM road_type CLASS EXPRESSION "highway" SIZE 2 COLOR 255 0 0 END CLASS COLOR 0 0 0 END END A primeira camada usada quando a balana maior que 1:100000, e exibe s as estradas de tipo "highway" (rodovia) com linhas pretas. A opo FILTER causa s estradas de TIPO "highway" (rodovia) a ser exibida. A segunda camada usada quando a balana menos que 1:100000, e exibir rodovias como linhas vermelhas grossas, e outras estradas como linhas pretas regulares. Assim, ns fizemos um par de coisas interessantes que usam s funcionalidade de mapserver, mas nossa declarao DATA SQL permaneceu simples. Suponha que o nome da estrada armazenado em outra tabela (por qualquer razo) e ns precisamos fazer um una adquirir isto e etiquetar nossas estradas.

LAYER CONNECTION "user=theuser password=thepass dbname=thedb host=theserver" DATA "the_geom FROM (SELECT roads.oid AS oid, roads.the_geom AS the_geom, road_names.name as name FROM roads LEFT JOIN road_names ON roads.road_name_id = road_names.road_name_id) AS named_roads USING UNIQUE oid USING SRID=-1" MAXSCALE 20000 STATUS ON TYPE ANNOTATION LABELITEM name CLASS LABEL ANGLE auto SIZE 8 COLOR 0 192 0 TYPE truetype FONT arial END END END Esta camada da anotao adiciona etiquetas verdes a todas as estradas quando a escala comea para baixo a 1:20000 ou menos. Demonstra tambm como usar um "join" SQL em uma definio DATA. 4.8. Clientes Java (JDBC) Os clientes de Java podem acessar objetos da "geometria" de PostGIS no banco de dados de PostgreSQL, outros diretamente como representaes de texto ou usam os objetos de extenso JDBC empacotados com PostGIS. A fim usar os objetos de extenso, o arquivo "postgis.jar" deve estar em seu CLASSPATH junto com o pacote JDBC de "postgresql.jar". import java.sql.*; import java.util.*; import java.lang.*; import org.postgis.*; public class JavaGIS { public static void main(String[] args) { java.sql.Connection conn; try { /* * Load the JDBC driver and establish a connection. */ Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://localhost:5432/database"; conn = DriverManager.getConnection(url, "postgres", "");

/* * Add the geometry types to the connection. Note that you * must cast the connection to the pgsql-specific connection * implementation before calling the addDataType() method. */ ((org.postgresql.Connection)conn).addDataType("geometry","org.postgis.PGgeometry"); ((org.postgresql.Connection)conn).addDataType("box3d","org.postgis.PGbox3d"); /* * Create a statement and execute a select query. */ Statement s = conn.createStatement(); ResultSet r = s.executeQuery("select AsText(geom) as geom,id from geomtable"); while( r.next() ) { /* * Retrieve the geometry as an object then cast it to the geometry type. * Print things out. */ PGgeometry geom = (PGgeometry)r.getObject(1); int id = r.getInt(2); System.out.println("Row " + id + ":"); System.out.println(geom.toString()); } s.close(); conn.close(); } catch( Exception e ) { e.printStackTrace(); } } } O objeto "PGgeometry" um objeto "wrapper" que contem um objeto de geometria topolgico especfico (subclasses da classe "geometria") dependendo do tipo: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon. PGgeometry geom = (PGgeometry)r.getObject(1); if( geom.getType() = Geometry.POLYGON ) { Polygon pl = (Polygon)geom.getGeometry(); for( int r = 0; r < pl.numRings(); r++ ) { LinearRing rng = pl.getRing(r); System.out.println("Ring: " + r); for( int p = 0; p < rng.numPoints(); p++ ) { Point pt = rng.getPoint(p); System.out.println("Point: " + p); System.out.println(pt.toString()); }

} } O JavaDoc para os objetos da extenso fornece uma referncia para as vrias funes do assessor dos dados nos objetos geomtricos. 4.9. Clientes C (libpq)

... 4.9.1. Cursores de Texto

... 4.9.2. Cursores Binrios ...

Captulo 5. Tipos de Performance

5.1. Tabelas pequenas de geometrias grandes 5.1.1. Descrio de problemas As verses atuais de PostgreSQL (incluindo 8.0) sofrem de uma fraqueza do otimizador da "query" a respeito das tabelas "TOAST". As tabelas "TOAST" so um tipo "extension room" usado para armazenar (no sentido do tamanho dos dados) os valores que no cabem em pginas de dados normais(como textos longos, imagens ou geometrias complexas com lotes de vertices), vejam http://www.postgresql.org/docs/8.0/static/storagetoast.html, para mais informaes. O problema aparece se acontecer de ter uma tabela com geometrias de preferncia grandes, mas no com muitas linhas (como uma tabela que contem os limites de todos os pases europeus em resoluo elevada). Ento a prpria tabela pequena, mas usa lotes de espao do "TOAST". Neste exemplo, a prpria tabela teve aproximadamente 80 linhas e usa somente 3 pginas de dados, mas a tabela "TOAST" usou 8225 pginas. Agora emita uma "query" onde voc use o operador de geometria && procurar por salto de caixa aqueles s os poucos grupos daquelas linhas. Agora a "query" otimizada v que a tabela tem somente 3 pginas e 80 linhas. Estima que uma varredura seqencial em uma tabela to pequena muito mais rpida do que usando um ndice. E assim decide-se ignorar o ndice de GIST. Geralmente, este estimativa est correta. Mas em nosso caso, o

operador && tem que buscar cada geometria do disco para comparar os saltos de caixa, assim lendo todas as pginas TOAST, tambm. Veja se a permisso deste erro, use o comando "EXPLAIN ANALYZE" do postgresql. Para mais informao e os detalhes tcnicos, voc pode ler a linha na lista de envio de desempenho do postgres: http://archives.postgresql.org/pgsql-performance/2005-02/ msg00030.php

5.1.2. Envolvimento com o trabalho Equipes de PostgreSQL esto tentando resolver esta edio fazendo o estimativa de "queries" TOAST-aware. Agora, esto aqui duas questes a respeito deste trabalho: O primeiro a cerca deste trabalho deve forar o operador da "query" a usar o ndice. Emita "SET enable_seqscan TO off;" ao usurio antes de emitir a "query". Isto fora basicamente o operador da "query" a evitar varreduras seqenciais sempre que possvel. Assim usa o ndice de GIST como usual. Mas este "flag" tem que ser ajustado em cada conexo, e faz com que o operador da "query" faa estimaes em outros casos, assim que voc se "SET enable_seqscan TO on;" depois da "query". O segundo a cerca deste trabalho deve fazer a varredura seqencial to rpida como o operador da "query" pensa. Isto pode ser conseguido criando uma coluna adicional "caches" ao bbox, e agrupar de encontro a este. Em nosso exemplo, os comandos esto como: SELECT addGeometryColumn('myschema','mytable','bbox','4326','GEOMETRY','2'); UPDATE mytable set bbox = Envelope(Force_2d(the_geom)); Agora altere sua "query" para usar o operador do && de encontro ao bbox em vez do geom_column, como: SELECT geom_column FROM mytable WHERE bbox && SetSrid('BOX3D(0 0,1 1)'::box3d,4326); Naturalmente, se voc mudar ou adicionar linhas na tabela, voc tem que manter o bbox "in sync". A maneira mais transparente de fazer isto seria "triggers", mas voc tambm pode modificar sua aplicao para manter a coluna do bbox atual ou rodar uma "query" do UPDATE acima depois de cada modificao.

5.2. CLUSTERing em ndices da geometria Para as tabelas que so na maior parte "read-only", e onde um nico ndice usado para a maioria das "queries", PostgreSQL oferece o comando "CLUSTER". Este comando requisita novamente fisicamente todas as linhas de dados na mesma ordem que os critrios do ndice, rendendo duas vantagens do desempenho: porque a escala do ndice faz a varredura, o nmero das buscas na tabela dos dados reduzido drasticamente. Em segundo, se seu "set" de funcionamento concentrar-se a alguns intervalos pequenos nos

ndices, voc tem "caching" mais eficiente porque as linhas de dados so espalhadas ao longo de poucas pginas dos dados. (procure ler a documentao do comando "CLUSTER" do manual de PostgreSQL.) Entretanto, atualmente PostgreSQL no permite "clustering" em ndices PostGIS GIST porque os ndices de GIST simplesmente ignoram valores NULL, voc obtem uma mensagem de erro como: lwgeom=# CLUSTER my_geom_index ON my_table; ERROR: cannot cluster when index access method does not handle null values HINT: You may be able to work around this by marking column "the_geom" NOT NULL. Porque a mensagem HINT diz, uma pode trabalhar em torno desta deficincia adicionando um constraint "not null" tabela: lwgeom=# ALTER TABLE my_table ALTER COLUMN the_geom SET not null; ALTER TABLE Naturalmente, isto no trabalhar se voc de fato precisar de valores NULL em sua coluna geomtrica. Adicionalmente, voc deve usar o mtodo acima para adicionar o "constraint", usando um CHECK "constraint" como "ALTER TABLE blubb ADD CHECK (geometria no null);" no trabalhar. 5.3. Evitando a converso da dimenso s vezes,acontece de ter os dados 3D ou 4D em sua tabela, mas sempre acessa-a usando as funes asText() ou asBinary() de OpenGIS que s sai geometrias 2D. Fazem isto internamente chamando a funo force_2d(), que introduz um "overhead" significante para geometrias grandes. Para evitar estas "overhead", pode ser praticado "pre-drop" naquelas dimenses adicionais uma vez e para sempre: UPDATE mytable SET the_geom = force_2d(the_geom); VACUUM FULL ANALYZE mytable; Note que se adicionar sua coluna geometrica usando AddGeometryColumn() ter um "constraint" na dimenso da geometria. Para contorn-la necessitar deixar cair o "constraint". Recorde que para atualizar a entrada na tabela geometry_columns e recriar mais tarde o "constraint". No caso de tabelas grandes, pode ser dividido este UPDATE em pores confinando o UPDATE a uma parte da tabela atravs da clusula WHERE e sua chave primria ou uns outros critrios praticveis, e rodar um simples "VACUUM;" entre seus UPDATEs. Isto reduz drasticamente a necessidade para o espao em disco provisrio. Adicionalmente, se misturar dimenses geomtricas, restringindo o UPDATE por "WHERE dimension(the_geom)>2" pula reescrever da geometria que j esto no 2D.

Captulo 6. Referncias PostGIS

As funes descritas abaixo so as quais o usurio de PostGIS utiliza. Existem outras funes que so requeridas como suporte de funes aos objetos de PostGIS que no so de uso para um usurio comum. 6.1. Funes de OpenGIS 6.1.1. Funes de Gerenciamento AddGeometryColumn(varchar, varchar, varchar, integer, varchar, integer) Sintaxe: AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>). Acrescenta uma coluna geomtrica a uma tabela existente de atributos. O dbname o nome do exemplo de banco de dados. O srid devem ser uma referncia de valor inteiro a uma entrada dentro da tabela SPATIAL_REF_SYS. O tipo deve ser uma string maiscula que corresponde ao tipo de geometria , eg, ' POLGONO' ou ' MULTILINESTRING '. DropGeometryColumn(varchar, varchar, varchar) Sintaxe: DropGeometryColumn(<schema_name>, <table_name>, <column_name>). Remove uma coluna geomtrica de uma tabela espacial. Note que o schema_name necessitar combinar o campo do f_schema_name da linha da tabela na tabela dos geometry_columns. SetSRID(geometry) Atribui o SRID em uma geometria para um valor de inteiro particular. utilizado na construo de caixas de salto para "queries". 6.1.2. Funes de Relacionamento da Geometria Distance(geometry,geometry) Retorna a distancia cartesiana entre duas geometrias em unidades projetadas. Equals(geometry,geometry) Retorna1 (VERDADEIRO) se esta geometria que "spatially equal" (espacialmente iguais) a uma outra geometria. Use ' = ' para uma melhor resposta . equals (' LINESTRING(0 0, 10 10) ', ' LINESTRING(0 0, 5 5, 10 10) ') verdade. Executado pelo mdulo de GEOS OGC SPECs2.1.1.2 Disjoint(geometry,geometry) Retorna 1 (VERDADEIRO) se esta Geometria que "spatially disjoint" (desloca espacialmente) de outra geometria. Executado pelo mdulo de GEOS No chame "GeometryCollection" como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean (condio verdadeira ou falsa), e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 - a.Relate(b, ' FF*FF * * * * ') Intersects(geometry,geometry) Retorna 1 (VERDADEIRO) se esta geometria "spatially intersects" (cruza espacialmente) outra geometria.

Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean (condio verdadeira ou falsa), e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 - Intersects(g1, g2)-Not (Disjoint(g1, g2)) Touches(geometry,geometry) Retorna 1 (VERDADEIRO) se esta geometria "spatially touches" (toca espacialmente) de outra geometria. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean (condio verdadeira ou falsa), e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 - a.Touches(b) - (I(a) intersection I(b) = {empty set}) e (a intersection b) no vazio Crosses(geometry,geometry) Retorna 1 (VERDADEIRO) se esta geometria "spatially crosses" de outras geometrias. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean (condio verdadeira ou falsa), e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 - a.Relate(b, ' T*T * * * * * * ') Within(geometry A,geometry B) Retorna 1 (VERDADEIRO) se a geometria A "spatially within" a geometria B. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean, e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 - a.Relate(b, ' T*F**F * * * ') Overlaps(geometry,geometry) Retorna 1 (VERDADEIRO) se Geometria "spatially overlaps" (sobrepe espacialmente). Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean, e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 Contains(geometry A, geometry B) Retorna 1 (VERDADEIRO) se a geometria A "spatially contains" (contem espacialmente) a geometria B. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean, e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 - mesmo como within(geometry,geometry) Intersects(geometry,geometry)

Retorna 1 (VERDADEIRO) se a geometria "spatially intersects". Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean, e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 - NOT disjoint(geometry,geometry) Relate(geometry,geometry, intersectionPatternMatrix) Retorna 1 (VERDADEIRO) se esta geometria espacialmente relatada para outra geometria, testando intereseco entre o interior, o limite e o exterior de duas geometrias como especificado pelos valores em umaintersectionPatternMatrix. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: esta a verso "allowable" (permissvel) que retorna uma boolean, e no um inteiro. OGC SPEC s2.1.1.2 / / s2.1.13.3 - NOT disjoint(geometry,geometry) Relate(geometry,geometry) Retorna o DE-9IM (dimensionally extended nine-intersection matrix) Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento No em especificao OGC, mas sub-entendido. veja s2.1.13.2 6.1.3. Funes de Processamento da Geometria Centroid(geometry) Retorna o identificador de centro da geometria como um ponto. Computao ser mais precisa que se executado pelo mdulo de GEOS (ocorreu em tempo de compilao). Area(geometry) Retorna a rea da geometria, se um polgono ou multi-polgono. Length(geometry) O comprimento desta curva em sua referncia espacial associada. sinnimo para length2d () OGC SPEC 2.1.5.1 PointOnSurface(geometry) Retorna um ponto garantido estar na superfcie Implementado usando GEOS OGC SPEC 3.2.14.2 e 3.2.18.2 Boundary(geometry) Retorna o fechamento do limite combinatorial desta geometria. O limite combinatorial definido como descrito na seo 3.12.3.2 da OGC SPEC. Porque o resultado desta funo um fechamento, e conseqentemente fecharam topologicamente, o limite resultante pode ser representado usando representao de primitivas geomtricas como discutido na OGC SPEC, seo 3.12.2.

Executado pelo mdulo de GEOS OGC SPEC s2.1.1.1 Buffer(geometry,double,[integer]) Retorna uma geometria que represente todos os pontos que distanciam desta geometria menor ou igual a distancia. Clculos esto em um Spacial Reference System desta geometria. O terceiro parametro opcional atribui o nmero de segmentos usados para aproximar um quarto de crculo (padro para 8). Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento OGC SPEC s2.1.1.3 ConvexHull(geometry) Retorna uma geometria que representa a casca convexa desta geometria. Executado pelo mdulo de GEOS OGC SPECs2.1.1.3 Intersection(geometry,geometry) Retorna uma geometria que representa a interseo atribuda do ponto das Geometrias. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento OGC SPEC s2.1.1.3 SymDifference(geometry A, geometry B) Retorna uma geometria que representa a diferena simtrica atribuda do ponto da geometria A com geometria B. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento OGC SPEC s2.1.1.3 Difference(geometry A, geometry B) Retorna uma geometria que representa a diferena atribuda do ponto da geometria A com geometria B. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento OGC SPEC s2.1.1.3 GeomUnion(geometry,geometry) Retorna uma geometria que representa a unio atribuda do ponto das geometrias. Executado pelo mdulo de GEOS No chame GeometryCollection como um argumento NOTA: este renomeado de "union" porque unio uma palavra reservada SQL OGC SPEC s2.1.1.3 GeomUnion(geometry set) Retorna uma geometria que representa a unio atribuda do ponto de todas as geometrias em dado conjunto. Executado pelo mdulo de GEOS No chame GeometryCollection no conjunto de argumento Nada definido em OGC SPEC

MemGeomUnion(geometry set) Mesmo que o anterior, s que com "memory-friendly" (memria-amigvel - usa menos memria e mais tempo de processamento) 6.1.4. Assessores Geomtricos AsText(geometry) Retorna a representao de Well-Known Text (WKT) da geometria. Por exemplo: POLYGON(0 0,0 1,1 1,1 0,0 0) OGC SPEC s2.1.1.1 AsBinary(geometry) Retorna a geometria no OGC formato "well-known-bynary", usando a codificao endian do usurio em que o banco de dados est funcionando. utilizado em cursores binrios para extrair dados do banco de dados sem convert-la a uma representao string. OGC SPEC s2.1.1.1 - also see asBinary(<geometry>,'XDR') and asBinary(<geometry>,'NDR') SRID(geometry) Retornos de nmeros inteiros SRID do sistema de referncia espacial da geometria. OGC SPEC s2.1.1.1 Dimension(geometry) A dimenso inerente deste objeto de geometria, que deve ser menor ou igual dimenso coordenada. OGC SPEC s2.1.1.1 - retorna 0 para pontos, 1 para linhas, 2 para polgonos, e a maior dimenso dos componentes de um GEOMETRYCOLLECTION. select dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0)'); dimension ----------1 Envelope(geometry) Retorna um polgono representando a caixa delimitada da geometria. OGC SPEC s2.1.1.1 - A caixa delimitada mnima para esta geometria, retornou como uma geometria. O polgono est definido por pontos de curva da caixa delimitada ((MINX, MINY), (MAXX, MINY), (MAXX, MAXY), (MINX, MAXY), (MINX, MINY)). NOTA:PostGIS acrescentar uma coordenada de Zmin/Zmax tambm. IsEmpty(geometry) Retorna 1 (VERDADEIRO) se esta geometria a geometria vazia. Se for verdade, ento esta geometria representa o conjunto de ponto vazio-i.e.GEOMETRYCOLLECTION (EMPTY). OGC SPEC s2.1.1.1 IsSimple(geometry) Retorna 1 (VERDADEIRO) se esta geometria no tem nenhum ponto geomtrico anmalo, como interseco prpria ou tangncia prpria. Executado pelo mdulo de GEOS OGC SPECs2.1.1.1

IsClosed(geometry) Retornos verdadeiros do comeo de geometria e pontos finais so coincidentes. IsRing(geometry) Retorna 1 (VERDADEIRO) se esta Curva est fechada (StartPoint () = EndPoint ()) e esta Curva simples (no atravesse o mesmo ponto mais de uma vez). Executado por GEOS OGC spec 2.1.5.1 NumGeometries(geometry) Se geometria um GEOMETRYCOLLECTION (ou MULTI *) retorna o nmero de geometrias. Caso contrrio, retorna NULO. GeometryN(geometry,int) Retorna a ensima geometria se a geometria uma GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING ou MULTIPOLYGON. Caso contrrio, retorna NULO. Nota Indice 1-based como para especificaes OGC desde a verso 0.8.0. As verses anteriores executaram esta como 0-based preferivelmente. NumPoints(geometry) Encontra e Retorna o nmero de pontos na primeira linha na geometria. Retorna NULO se no h nenhuma linha na geometria. PointN(geometry,integer) Retorna o ensimo ponto na primeira linha na geometria. Retorna NULO se no h nenhuma linha na geometria. ExteriorRing(geometry) Retorna o anel exterior do primeiro polgono na geometria. Retorna NULO se no h nenhum polgono na geometria. NumInteriorRings(geometry) Retorna o nmero de anis interiores do primeiro polgono na geometria. Retorna NULO se no h nenhum polgono na geometria. NumInteriorRing(geometry) Sinomimo para NumInteriorRings (geometry). As especificaes OpenGIS so ambiguas sobre o nome da funo exata, assim que fornecemos ambas as escritas. InteriorRingN(geometry, integer) Retorna o ensimo anel interior do polgono na geometria. Retorna NULO se no h nenhum polgono na geometria ou o N dado fora da escala(1 baseado). Nota Indice is 1-based como especificaes para OGC desde a verso 0.8.0. As verses anteriores implementaram esta como 0-based preferivelmente.

EndPoint(geometry) Retorna o ltimo ponto da geometria de "LineString" como um ponto. StartPoint(geometry) Retorna o primeiro ponto da geometria de "LineString" como um ponto. GeometryType(geometry) Retorna o tipo da geometria como uma string. Eg: ' LINESTRING ', ' POLYGON ', ' MULTIPOINT ', etc. OGC SPEC s2.1.1.1 - Retorna o nome do sub-tipo imediato de geometria de qual neste caso de geometria um membro. O nome do sub-tipo imediato de geometria devolvido como uma string. X(geometry) Encontra e retorna a coordenada de X do primeiro ponto na geometria. Retorna NULO se no h nenhum ponto na geometria. Y(geometry) Encontra e retorna a coordenada de Y do primeiro ponto na geometria. Retorna NULO se no h nenhum ponto na geometria. Z(geometry) Encontra e retorna a coordenada de Z do primeiro ponto na geometria. Retorna NULO se no h nenhum ponto na geometria. M(geometry) Retorna uma coordenada M do ponto, ou NULO se no disponvel. A entrada deve ser um ponto. Nota This is not (yet) part of the OGC spec, but is listed here to complete the point coordinate extractor function list. Esta no (ainda) parte das especificaes de OGC, mas listada aqui para completar a lista da funo do extrator da coordenada do ponto. 6.1.5. Construtores Geomtricos GeomFromText(text,[<srid>]) Converte uma geometria de WKT com o dado SRID. OGC SPEC 3.2.6.2 - a opo SRID est de conformidade. PointFromText(text,[<srid>]) Faz uma geometria de WKT com o dado SRID. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um Ponto LineFromText(text,[<srid>])

Faz uma geometria de WKT com o dado SRID. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no uma Linha LinestringFromText(text,[<srid>]) Faz uma geometria de WKT com o dado SRID. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no uma Linha PolyFromText(text,[<srid>]) Faz uma Geometria de WKT com o SRID dado . Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um Polgono PolygonFromText(text,[<srid>]) Faz uma geometria de WKT com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um Polgono MPointFromText(text,[<srid>]) Faz uma geometria de WKT com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um MULTIPOINT MLineFromText(text,[<srid>]) Faz uma geometria de WKT com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um MULTILINESTRING MPolyFromText(text,[<srid>]) Faz uma Geometria de WKT com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um MULTIPOLYGON GeomCollFromText(text,[<srid>]) Faz uma geometria de WKT com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um GEOMETRYCOLLECTION GeomFromWKB(bytea,[<srid>]) Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. GeometryFromWKB(bytea,[<srid>]) Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. PointFromWKB(bytea,[<srid>])

Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um PONTO LineFromWKB(bytea,[<srid>]) Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um LINESTRING LinestringFromWKB(bytea,[<srid>]) Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um LINESTRING PolyFromWKB(bytea,[<srid>]) Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um POLGONO PolygonFromWKB(bytea,[<srid>]) Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. MPointFromWKB(bytea,[<srid>]) Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um MULTIPOINT MLineFromWKB(bytea,[<srid>]) Faz uma geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um MULTILINESTRING MPolyFromWKB(bytea,[<srid>]) Faz uma Geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um MULTIPOLYGON GeomCollFromWKB(bytea,[<srid>]) Faz uma Geometria de WKB com o SRID dado. Caso SRID no der, padroniza-se -1. OGC SPEC 3.2.6.2 - opo SRID est de conformidade. Mostra um erro se o WKT no um GEOMETRYCOLLECTION BdPolyFromText(text WKT, integer SRID) Construir um Polygon dada uma coleo arbitrria de linhas fechadas como uma representao do texto MultiLineString. Lana um erro se WKT no for um MULTILINESTRING. Lana um erro se a sada for um MULTIPOLYGON; usa BdMPolyFromText neste caso ou v BuildArea() para um acesso especfico de postgis.

OGC SFSQL 1.1 - 3.2.6.2 Disponibilidade: 1.1.0 - requer GEOS >= 2.1.0. BdMPolyFromText(text WKT, integer SRID) Construir um MultiPolygon dada uma coleo arbitrria de linha fechada como uma respresentao do texto de MultiLineString. Lana um erro se WKT no for um MULTILINESTRING. Fora sada MULTIPOLYGON mesmo quando o resultado composto somente por um nico POLYGON; usa BdPolyFromText se voc estiver certo que um nico POLYGON resultar da operao ou veja BuildArea() para um acesso especfico de postgis. OGC SFSQL 1.1 - 3.2.6.2 Disponibilidade: 1.1.0 - requer GEOS >= 2.1.0. 6.2. Extenses de Postgis 6.2.1. Funes de Gerenciamento DropGeometryTable([<schema_name>], <table_name>) Destri uma tabela e todas suas referncias nas colunas geomtricas. Nota: usa o current_schema() em instalaes do pgsql schema-aware se o schema no for fornecido. UpdateGeometrySRID([<schema_name>], <table_name>, <column_name>, <srid>) Atualiza o SRID de todas as caractersticas em uma coluna da geometria que atualiza confinamente e referncia nas colunas geomtricas. Nota: usa o current_schema() em instalaes do pgsql schema-aware se o schema no for fornecido. update_geometry_stats([<table_name>, <column_name>]) Atualiza estatisticas sobre tabelas espaciais para o uso pelo operador da seleo. Precisar tambm rodar o "VACUUM ANALYZE [ table_name ] [ column_name ]" para as estatisticas que recolhem o processo para estar completo. Nota: comeando com PostgreSQL 8.0 que analisando estatisticas automaticamente executado rodando "VACUUM ANALYZE". postgis_version() Retorna o nmero de verso de PostGIS e opes de tempo de compilao. Nota: Antes da verso 1.1.0 esta era uma funo procedural, assim possivelmente no estar retornando a informao exata (em caso dos melhoramentos incompletos do banco de dados). postgis_lib_version() Retorna o nmero de verso da biblioteca de PostGIS. Disponvel: 0.9.0 postgis_lib_build_date() Retorna data da construo da biblioteca PostGIS. Disponvel: 1.0.0RC1 postgis_script_build_date()

Retorna data da construo de scripts PostGIS. Disponvel: 1.0.0RC1 postgis_scripts_installed() Retorna a verso do script postgis instalado neste banco de dados. Nota: Se a sada desta funo no combinasse com a sada de postgis_scripts_released() provavelmente faltou promover corretamente um banco de dados existente. Veja a seo Upgrading para mais informaes. Disponibilidade: 0.9.0 postgis_scripts_released() Retorna o nmero da verso do script de lwpostgis.sql liberado com o instalado na biblioteca do postgis. Nota: Comear com verso 1.1.0 esta funo, retorna o mesmo valor do postgis_lib_version(). Conservar para a compatibilidade inversa. Disponvel: 0.9.0 postgis_geos_version() Retorna o nmero da verso da biblioteca de GEOS ou NULO se o suporte a GEOS no for permitida. Disponvel: 0.9.0 postgis_proj_version() Retorna o nmero da verso da biblioteca PROJ4 ou NULo se o suporte a PROJ4 no for permitida. Disponvel: 0.9.0 postgis_uses_stats() Retorna verdadeiro se o uso do STATS for permitido,caso contrrio retorna falso. Disponvel: 0.9.0 postgis_full_version() Retorna a verso postgis completa e constri informaes de configurao. Disponvel: 0.9.0 6.2.2. Operadores A &< B O operador "&<" retorna verdadeiro se a caixa delimitada sobrepor o prprio A ou est esquerda da caixa delimitada do prprio B. A &> B O operador "&>" retorna verdadeiro se a caixa delimitada sobrepor o prprio A ou est direita da caixa delimitada do prprio B. A << B O operador "<<" retorna verdadeiro se a caixa delimitada for estritamente esquerda da caixa delimitada do prprio B. A >> B

O operador ">>" retorna verdadeiro se o salto de caixa do prprio A for estritamente direita do salto de caixa do prprio B. A &<| B O operador "&<|" returna verdadeiro se a caixa delimitada do prprio A for abaixo da caixa delimitada do prprio B. A |&> B O operador "|&>" returna verdadeiro se a caixa delimitada de A for acima da caixa delimitada do prprio B. A <<| B O operador "<<|" retorna verdadeiro se a caixa delimitada de A for estritamente abaixo da caixa delimitada do prprio B. A |>> B O operador "|>>" retorna verdadeiro se a caixa delimitada A for esttritamente acima da caixa delimitada do prprio B. A ~= B O operador "~ = " o operador "same as". Testa igualdade geomtrica atual de duas caractersticas. Assim, se A e B so de mesma caracterstica, o operador retorna verdadeiro. A@B O operador "@ " retorna verdadeiro se a caixa delimitada do prprio A estiver completamente contido na caixa delimitada do prprio B. A~B O operador "~" retorna verdadeiro se a caixa delimitada estiver completamente contida na caixa delimitada do prprio B. A && B O operador "&& " o operador sobreposto. Se a caixa delimitada do prrpio A sobrepor a caixa delimitada do prprio B, o operador retorna verdadeiro. 6.2.3. Funes de Medida area2d(geometry) Retorna a rea da geometria, se um polgono ou multi-polgono. distance_sphere(point, point) Retorna a distncia linear nos medidores entre dois pontos de lat/lon. Usa uma terra e um raio esfricos de 6370986 medidores. Mais rapidamente do que distance_spheroid(), mas menos exato. Atualmente s se implementou para pontos. distance_spheroid(point, point, spheroid) Retorna a distncia linear entre dois pontos latitude/longitude dando um esferide particular. Veja a explicao de esferides dados para length_spheroid(). Atualmente s se implementou para pontos.

length2d(geometry) Retorna o comprimento 2-dimensional da geometria se um linestring ou multi-linestring. length3d(geometry) Retorna o comprimento 3-dimensional da geometria se um linestring ou multi-linestring. length_spheroid(geometry,spheroid) Calcula o comprimento de uma geometria em um ellipsoid. utilizada se as coordenadas da geometria est em latitude/longitude e um comprimento desejado sem reprojeces O ellipsoid um tipo de banco de dados separado e pode ser construdo como segue: SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>] Outra forma: SPHEROID["GRS_1980",6378137,298.257222101] Um exemplo de clculo poderia ser: SELECT length_spheroid( 6378137,298.257222101]' ) FROM geometry_table; geometry_column, 'SPHEROID["GRS_1980",

length3d_spheroid(geometry,spheroid) Calcula o comprimento de uma geometria em um ellipsoid, pegando a elevao dentro da conta. exatamente igual a length_spheroid excluindo as coordenadas verticais (expressado nas mesmas unidades como os spheroid axes) so usados para calcular a soma de deslocamento da distncia extra vertical. distance(geometry, geometry) Retorna a distncia menor entre duas geometrias.. max_distance(linestring,linestring) Retorna a distncia maior entre duas linhas de string. perimeter(geometry) Retorna o permetro da geometria, se um polgono ou multi-polgono. perimeter2d(geometry) Retorna o permetro 2-dimensional da geometria, se um polgono ou multi-polgono. perimeter3d(geometry) Retorna o permetro 3-dimensional da geometria, se um polgono ou multi-polgono. azimuth(geometry, geometry) Retorna o azimuth do segmento definido pelo dado geometrias Point ou o NULO, se os dois pontos forem coincidentes. O valor do retorno est nos radianos. Disponibilidade: 1.1.0 6.2.4. Sadas Geomtricas

AsBinary(geometry,{'NDR'|'XDR'}) Retorna a geometria no formato OGC "well-known-bynary", usando "little-endian" (NDR) ou big-endian (XDR) . utilizado em cursores binrios para extrair dados do banco de dados sem convert-la a uma representao string. AsEWKT(geometry) Retorna uma Geometria em formato EWKT (como texto). AsEWKB(geometry, {'NDR'|'XDR'}) Retorna uma geometria em formato EWKB (como o "bytea") usando outra codificao "little-endian" (NDR) ou "big-endian". AsSVG(geometry, [rel], [precision]) Retorna a geometria como um dado do trajeto de SVG. Usa 1 como segundo argumento e tem o trajeto dos dados implementados nos termos de movimentos relativos, o default (ou 0) usa movimentos absolutos. O terceiro argumento pode ser usado para reduzir o nmero mximo dos dgitos decimais usados na sada ("default" para 15). Pontos de geometrias sero rendidos como cx/cy quando arg 'rel' 0, x/y quando 'rel' 1. AsGML(geometry, [precision]) Retorna a geometria como um elemento GML. O segundo argumento pode ser usado para reduzir o nmero mximo dos dgitos significativos usados na sada (defaults para 15). AsKML(geometry, [precision]) Retorna a geometria como um elemento KML. O segundo argumento pode ser usado para reduzir o nmero mximo de dgitos significativos usados na sada ( defaults para 15).

6.2.5. Construtores Geomtricos GeomFromEWKT(text) Faz a geometria de EWKT. GeomFromEWKB(bytea) Faz a geometria de EWKB. MakePoint(<x>, <y>, [<z>], [<m>]) Cria um ponto 2d,3dz or 4d geomtrico. MakePointM(<x>, <y>, <m>) Cria um ponto 3dm geomtrico. MakeBox2D(<LL>, <UR>) Cria um BOX2D definido dados os pontos geomtricos. MakeBox3D(<LLB>, <URT>) Cria um BOX3D definido dados os pontos geomtricos.

MakeLine(geometry set) Cria um Linestring de um conjunto de pontos de geometrias. Poder usar um subselect para ordenar os pontos antes de aliment-los a este agregado. MakeLine(geometry, geometry) Cria um Linestring dados dois pontos geomtricos. LineFromMultiPoint(multipoint) Cria um LineString de uma geometria MultiPoint. MakePolygon(linestring, [linestring[]]) Cria um polgono formado pela proteo dada e pelo conjunto de regras. Poder construir um conjunto de geometria usando Accum. Entradas geomtricas devem ser LINESTRINGS fechadas (veja IsClosed e GeometryType). BuildArea(geometry) Cria uma geometria areal formada pelo componente de linha de trabalho da geometria dada. O tipo do retorno pode ser um Polygon ou um MultiPolygon, dependendo da entrada. Se a entrada das linhas de trabalho no forem forma de polgonos, NULO retornado. Veja tambm BdPolyFromText e BdMPolyFromText - envoltrios para esta funo com padro de interface OGC. Disponibilidade: 1.1.0 - requer GEOS >= 2.1.0. Polygonize(geometry set) Agregado. Cria um GeometryCollection que contem os polgonos possveis formados de componentes de linhas de trabalho de um conjunto de geometrias. Disponvel 1.0.0RC1 - requer GEOS >= 2.1.0. Collect(geometry set) Esta funo retorna um GEOMETRYCOLLECTION ou um objeto MULTI de um conjunto de geometrias. A funo collect() uma funo "agregada" na terminologia de PostgreSQL. Isso significa que operadores em listas de dados, na mesma maneira de funes de sum() e de mean(). Para o exemplo, "SELECT COLLECT(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN" retornar um GEOMETRYCOLLECTION separado para cada valor distinto de ATTRCOLUMN. Collect(geometry, geometry) Esta funo retorna uma geometria, sendo uma coleo de duas sadas geomtricas. O tipo de sada pode ser um MULTI* ou um GEOMETRYCOLLECTION. Dump(geometry) Esta uma funo de um conjunto de retornos (set-returning function-SRF). Retorna um conjunto de linhas geometry_dump, formada por uma geometria (geom) e por um conjunto de inteiros (path). Quando a entrada geometrica um tipo simples (POINT,LINESTRING,POLYGON) um nico registro ser retornado com um conjunto de caminhos vazios e a entrada geomtrica como geom. Quando a entrada geomtrica uma coleo ou multi retornar um registro para cada um dos componentes da coleo, e o caminho expressar a posio do componente dentro da coleo. Disponibilidade: PostGIS 1.0.0RC1. Requer PostgreSQL 7.3 ou superiores.

DumpRings(geometry) Esta uma funo de um conjunto de retornos (set-returning function-SRF). Retorna um conjunto de linhas geometry_dump, formado por uma geometria (geom) e por uma conjunto de inteiros (path). O campo path carrega o ndice do anel do polgono, contem um nico elemento: 0 para o escudo, nmero do furo para regras. O campo do geom contem o anel correspondente como um polgono. Disponibilidade: PostGIS 1.1.3. Requer PostgreSQL 7.3 ou superiores.

6.2.6. Editores Geomtricos AddBBOX(geometry) Adiciona caixa delimitada geometria. Isto far na caixa delimitada baseada em selees mais rpidas, mas aumentar o tamanho da geometria. DropBBOX(geometry) Destri a caixa delimitada da geometria. Isto reduz o tamanho da geometria, mas as caixa delimitada baseada em selees mais lentas. AddPoint(linestring, point, [<position>]) Adiciona um ponto a um LineString na posio <pos> parmetro pode ser omitido ou ajustado a -1. RemovePoint(linestring, offset) Remove ponto de uma linestring. Offset 0-based. Disponvel: 1.1.0 SetPoint(linestring, N, point) Replace point N of linestring with given point. Index is 0-based. Substitue o ponto N de linestring com o ponto dado. O ndice 0-based. Disponvel: 1.1.0 Force_collection(geometry) Converte a geometria em um GEOMETRYCOLLECTION. utilizado para simplificar a respresentao de WKB. Force_2d(geometry) Fora as geometrias dentro de um "2-dimensional mode" (modo bi-dimensional) de forma que todas as representaes de sada s tero as coordenadas X e Y. utilizado para forar a sada OGC-compliant (desde que OGC especifica somente geometrias 2-D). Force_3dz(geometry), Force_3d(geometry) Fora as geometrias dentro de um modo XYZ. Force_3dm(geometry)

(ndice 0-based). O terceiro

Fora as geometrias dentro de um modo XYM. Force_4d(geometry) Fora as geometrias dentro de um modo XYZM. Multi(geometry) Retorna a geometria como uma geometria MULTI*. Se a geometria j uma MULTI*, esta retornar inalterada. Transform(geometry,integer) Retorna uma nova geometria com suas coordenadas transformadas ao SRID referenciado pelo parmetro inteiro. O destino SRID tem que existir na tabela SPATIAL_REF_SYS. Affine(geometry, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8) Aplica uma trasformao 3d affine para a geometria. A chamada Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff) representa a matriz da transformao / a b c xoff \ | d e f yoff | | g h i zoff | \ 0 0 0 1 / e os vertices so transformados como segue: x' = a*x + b*y + c*z + xoff y' = d*x + e*y + f*z + yoff z' = g*x + h*y + i*z + zoff Todas funes de traduo / escala abaixo so expressados atravs de uma transformao affine. Disponvel: 1.1.2. Affine(geometry, float8, float8, float8, float8, float8, float8) Aplica uma transformao 2d affine para a geometria. A chamada Affine(geom, a, b, d, e, xoff, yoff) representa a matriz da transformao / a b 0 xoff \ / a b xoff \ | d e 0 yoff | rsp. | d e yoff | | 0 0 1 0 | \ 0 0 1 / \ 0 0 0 1 / e os vertices so transformados como segue: x' = a*x + b*y + xoff y' = d*x + e*y + yoff z' = z Este mtodo um subcaso do mtodo 3D acima. Disponvel: 1.1.2. Translate(geometry,float8,float8,float8)

Traduz a geometria a um novo local que usa os parmetros numricos como recompensa. Isto : translate(geom,X,Y,Z). Scale(geometry, float8, float8, float8) Escala a geometria a um novo tamanho, multiplicando as ordenadas com os parmetros. Isto : scale (geom, Xfactor, Yfactor, Zfactor). Disponvel: 1.1.0 RotateZ(geometry, float8), RotateX(geometry, float8), RotateY(geometry, float8), Gira a geometria em torno da linha central de Z, X ou Y por dado ngulo dado nos radianos. Seguir a regra right-hand. Disponvel: 1.1.2. TransScale(geometry, float8, float8, float8, float8) First, translates the geometry using the first two floats, then scales it using the second two floats, working in 2D only. Using transscale(geom, X, Y, XFactor, YFactor) internally calls affine(geom, XFactor, 0, 0, 0, YFactor, 0, 0, 0, 1, X*XFactor, Y*YFactor, 0). Primeiro, traduz a geometria usando os primeiros dois floats, a seguir escala-o, usando os segundos dois floats, trabalhando somente em 2D. Usando transscale(geom, X, Y, XFactor, YFactor) internamente chama affine(geom, XFactor, 0, 0, 0, YFactor, 0, 0, 0, 1, X*XFactor, Y*YFactor, 0). Disponvel: 1.1.0. Reverse(geometry) Retorna a geometria com a ordem do vrtice invertida. ForceRHR(geometry) Fora polgono da coleo a obedecer Right-Hand-Rule. Simplify(geometry, tolerance) Retorna uma verso "simplified" da geometria dada usando o algoritmo de DouglasPeuker. Desta forma, far realmente algo com (multi)linhas e (multi)polgonos, mas voc pode estar seguro de chama-lo com qualquer tipo da geometria. Desde que a simplificao ocorra em uma base "object-by-object" e voc pode tambm alimentar um GeometryCollection a esta funo. Note que a geometria retornada pode perder sua simplicidade. (veja IsSimple) SnapToGrid(geometry, originX, originY, sizeX, sizeY), SnapToGrid(geometry, sizeX, sizeY), SnapToGrid(geometry, size) Pega todos os pontos de entrada da geometria definio de grade por seu tamanho de origem e de clula. Remove os pontos consecutivos que caem na mesma clula, retornando eventualmente o NULO, se os pontos da sada no forem bastante para definir uma geometria do tipo dado. As geometrias derrubadas em uma coleo so desfeitas dela. Nota

A geometria retornada pode perder sua simplicidade (veja IsSimple). Nota

Antes da liberao 1.1.0 esta funo retornou sempre uma geometria 2d . Comeando por 1.1.0 a geometria retornada ter mesmo dimensionalidade que a entrada, uma com dimenso mais elevada valor no tocado. Usar a verso pegando um segundo argumento de geometria para definir todas as dimenses da grade. Disponvel: 1.0.0RC1 SnapToGrid(geometry, geometry, sizeX, sizeY, sizeZ, sizeM) Pega todos os pontos de entrada da geometria a definio de grade por seu tamanho de origem (o segundo argumento, deve ser um ponto) e por seu tamanho de clula. Especificar 0 como tamanho para alguma dimenso que voc no quiser pegar para uma grade. Disponvel: 1.1.0 Segmentize(geometry, maxlength) Retorna uma geometria modificada que no tem nenhum segmento mais por muito tempo ento distncia dada. Os pontos interpolados tero os valores de Z e de M (se necessrio) ajustados a 0. A computao da distncia executada em somente em 2d. LineMerge(geometry) Retorna um (ou conjunto) LineString(s) formado por unindo a linha de trabalho (linework) constituinte da entrada. Disponvel: 1.1.0 - requer GEOS >= 2.1.0 6.2.7. Referncia Linear line_interpolate_point(linestring, location) Retorna um ponto interpolado ao longo de uma linha. O primeiro argumento deve ser um LINESTRING. O segundo argumento um float8 entre 0 e 1 representando frao do total 2d length o ponto tem que ser encontrado. Veja line_locate_point() para computar a posio da linha o mais prximo a um Point. Nota Desde a liberao 1.1.1 esta funo tambem interpola valores M e Z (quando presente), quando que as liberaes anteriores ajustam-nas para 0.0. Disponvel: 0.8.2 line_substring(linestring, start, end)

Retorna um linestring sendo um substring da entrada uma que comea e que termina nas fraes do total 2d length. Os segundo e terceiro argumentos so os valores float8 entre 0 e 1. Se o 'start' e 'end' tiverem o mesmo valor, este equivalente ao line_interpolate_point(). Veja line_locate_point() para computar a posio da linha o mais prximo a um ponto. Nota Desde a liberao 1.1.1 esta funo tambm interpola valores M e Z (quando presente), quando que as liberaes anteriores ajustam-nas aos valores no especificados. Disponvel: 1.1.0 line_locate_point(LineString, Point) Retorna um float entre 0 e 1 que representam a posio do ponto o mais prximo em LineString para o dado Point, como uma frao do total tamanho 2d line. Voc pode usar a posio retornada para extrair um Point (line_interpolate_point) ou um substring (line_substring). Disponvel: 1.1.0 locate_along_measure(geometry, float8) Retorna um valor derivado da coleo da geometria com elementos que combinam a medida especificada. Os elementos Polygonal no so suportados. Semntica especificado por: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing Meeting Disponvel: 1.1.0 locate_between_measures(geometry, float8, float8) Retorna um valor derivado da coleo da geometria com elementos que combinam a escala especificada das medidas inclusive. Os elementos Polygonal no so suportados. Semntica especificado por: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing Meeting Disponvel: 1.1.0 6.2.8. Variado Summary(geometry) Retorna um resumo de texto dos contedos da geometria. box2d(geometry) Retorna um BOX2D representando as extenses mximas da geometria. box3d(geometry)

Retorna um BOX3D representando as extenses mximas da geometria. extent(geometry set) A funo extent() uma funo "aggregate" (agregada) na terminologia de PostgreSQL. Isso significa que os operadores em listas de dados, fazem o mesmo caminho que as funes sum() e mean(). Por exemplo, "SELECT EXTENT(GEOM) FROM GEOMTABLE" retornar um BOX3D dando a extenso mxima de todas as caractersticas na tabela. Semelhantemente, "SELECT EXTENT(GEOM) FROM GEOMTABLE GROUP BY CATEGORY" retornar um resultado de extenso para cada categoria. zmflag(geometry) Returna ZM (semntica da dimenso) flag de geometrias como um inteiro.Valores so: 0=2d, 1=3dm, 2=3dz, 3=4d. HasBBOX(geometry) Retorna VERDADEIRO se o bbox desta geometria armazenada, FALSO caso contrrio.Usa addBBOX() e dropBBOX() para armazenamento. ndims(geometry) Retorna o nmero das dimenses da geometria como um inteiro. Valores so: 2,3 ou 4. nrings(geometry) Se a geometria for um polgono ou um multi-polgono, retorna o nmero de anis. npoints(geometry) Retorna o nmero de pontos na geometria. isvalid(geometry) Retorna verdadeiro se esta geometria for vlida. expand(geometry, float) Esta funo retorna uma caixa delimitada expandida em todos os sentidos da caixa delimitada da entrada da geometria, por uma quantidade especificada no segundo argumento. Muito usada para selecionar distance() , para adicionar um filtro do ndice seleo. estimated_extent([schema], table, geocolumn) Retorna a extenso estimada da tabela espacial dada. O estimado feito de estatisticas de colunas geomtricas. O "schema" atual ser usado se no especificado. Para estatstica PostgreSQL>=8.0.0 so recolhidos por VACUUM ANALYZE e a extenso resultante ser aproximadamente 95% do real. Para estatstica PostgreSQL<8.0.0 so recolhidos por update_geometry_stats() e a extenso resultante ser exata. find_srid(varchar,varchar,varchar) A sintaxe find_srid(<db/schema>, <tabela>, <coluna>) e a funo retorna o inteiro SRID da coluna especificada procurando atravs da tabela GEOMETRY_COLUMNS. Se a coluna da geometria no for adicionada corretamente com a funo de AddGeometryColumns(), esta funo no trabalhar tampouco.

mem_size(geometry) Retorna a quantia de espaos (em bytes) encontrados na geometria. numb_sub_objects(geometry) Retorna o nmero dos objetos armazenados na geometria. Isto utilizado para MULTIgeometrias e GEOMETRYCOLLECTIONs. point_inside_circle(geometry,float,float,float) A sintaxe para esta funo point_inside_circle (<geometry>, <circle_center_x>, <circle_center_y>, <radius>). Retorna verdadeiro se a geometria um ponto e est dentro do crculo. Caso contrrio, retorna falso. xmin(box3d) ymin(box3d) zmin(box3d) Retorna o mnimo solicitado de uma caixa delimitada. xmax(box3d) ymax(box3d) zmax(box3d) Retorna o mximo solicitado de uma caixa delimitada. Accum(geometry set) Agregado. Constri um conjunto de geometrias.

6.2.9. Suporte a grandes transaes (Long Transactions) Este mdulo e funes associadas de pl/pgsql foram implementados para fornecer suporte a grandes bloqueios requerido por especificao Web Feature Service. Nota Os usurios devem usar serializable transaction level que caso contrrio o mecanismo de bloqueio quebraria. EnableLongTransactions() Permite suporte a transaes grandes. Esta funo cria as tabelas requeridas dos metadados, necessita ser chamada uma vez antes de usar as outras funes nesta seo. Cham-la duas vezes inofensivo. Disponvel: 1.1.3 DisableLongTransactions() Desabilita suporte a transaes grandes. Esta funo remove as tabelas metadados de suporte a transaes grandes, e apaga todos os gatilhos s tabelas lock-checked. Disponvel: 1.1.3 CheckAuth([<schema>], <table>, <rowid_col>) Verifica atualizaes e delees das linhas em dada tabela, sendo autorizada. Identifica linhas usando a coluna <rowid_col>.

Disponvel: 1.1.3 LockRow([<schema>], <table>, <rowid>, <authid>, [<expires>]) Ajuste de bloqueio/autorizao para linha especfica na tabela <authid> um valor de texto, <expires> um timestamp padronizado para now() +1hour. Retorna 1 se o bloqueio for assinado, 0 caso contrrio (j bloqueado pelo outro auth) Disponvel: 1.1.3 UnlockRows(<authid>) Remove todos os bloqueios carregados por id de autorizao especificada. Retorna o nmero dos bloqueios liberados. Disponvel: 1.1.3 AddAuth(<authid>) Adiciona um smbolo da autorizao a ser usado na transao atual. Disponvel: 1.1.3

6.3. Funes SQL-MM Esta uma listagem das funes definidas SQL-MM que PostGIS suporta atualmente. As implementaes destas funes seguem a implementao ArcSDE e assim desviar-se um pouco das especificaes. Estes desvios sero notados. As of version 1.2.0, these functions have been implemented by wrapping existing PostGIS functions. As a result, full support for curved geometries may not be in place for many functions. At data da verso 1.2.0, estas funes foram implementadas envolvendo funes existentes no PostGIS. Em conseqncia, o suporte cheio para geometrias curvadas para muitas funes no pode estar no lugar. Nota SQL-MM define o padro SRID de todos construtores de geometrias como 0. PostGIS usa um padro SRID de -1. ST_Area Return the area measurement of an ST_Surface or ST_MultiSurface value. Retorna a medida da rea de um valor ST_Surface ou ST_MultiSurface. SQL-MM 3: 8.1.2, 9.5.3 ST_AsBinary Retorna a representao binria well-known de um valor ST_Geometry.

SQL-MM 3: 5.1.37 ST_AsText Retorna a representao de texto well-known de um valor ST_Geometry. SQL-MM 3: 5.1.25 ST_Boundary Retorna o limite do valor ST_Geometry. SQL-MM 3: 5.1.14 ST_Buffer Retorna um buffer em torno do valor ST_Geometry. SQL-MM 3: 5.1.17 ST_Centroid Retorna centroid matemtico do valor ST_Surface ou ST_MultiSurface. SQL-MM 3: 8.1.4, 9.5.5 ST_Contains Testa se um valor ST_Geometry espacialmente contem um outro valor ST_Geometry. SQL-MM 3: 5.1.31 ST_ConvexHull Retorna o hull convexo do valor ST_Geometry. SQL-MM 3: 5.1.16 ST_CoordDim Returna a dimenso da coordenada do valor ST_Geometry. SQL-MM 3: 5.1.3 ST_Crosses Testa se um valor ST_Geometry espacialmente atravessa outro valor ST_Geometry. SQL-MM 3: 5.1.29 ST_Difference Returna um valor ST_Geometry que representa a diferena do conjunto de pontos de dois valores ST_Geometry. SQL-MM 3: 5.1.20 ST_Dimension

Returna a dimenso do valor ST_Geometry. SQL-MM 3: 5.1.2 ST_Disjoint Testa se um valor ST_Geometry espacialmente desconecta de outro valor ST_Geometry. SQL-MM 3: 5.1.26 ST_Distance Returna a distancia entre duas geometrias. SQL-MM 3: 5.1.23 ST_EndPoint Returna um valor ST_Point que o ponto final de um valor ST_Curve. SQL-MM 3: 7.1.4 ST_Envelope Returna o retngulo delimitado para o valor ST_Geometry. SQL-MM 3: 5.1.15 ST_Equals Testa se um valor ST_Geometry espacialmente igual a outro valor ST_Geometry. SQL-MM 3: 5.1.24 ST_ExteriorRing Returna o anel exterior de um ST_Surface. SQL-MM 3: 8.2.3, 8.3.3 ST_GeometryN Returna a indicao do valor ST_Geometry de um ST_GeomCollection. SQL-MM 3: 9.1.5 ST_GeometryType Returna o tipo geomtrico do valor ST_Geometry. SQL-MM 3: 5.1.4 ST_GeomFromText Returna uma especificao do valor ST_Geometry. SQL-MM 3: 5.1.40

ST_GeomFromWKB Returna uma especificao do valor ST_Geometry. SQL-MM 3: 5.1.41 ST_InteriorRingN Returna o anel interior especificado de um valor ST_Surface. SQL-MM 3: 8.2.6, 8.3.5 ST_Intersection Returna um valor ST_Geometry que representa a interseo do conjunto de pontos de dois valores ST_Geometry. SQL-MM 3: 5.1.18 ST_Intersects Testa se um valor ST_Geometry intercepta espacialmente outro valor ST_Geometry. SQL-MM 3: 5.1.27 ST_IsClosed Testa se um valor ST_Curve ou um valor ST_MultiCurve est fechado. Nota SQL-MM define o resultado de ST_IsClosed(NULL) para ser 0, quando PostGIS returna NULO. SQL-MM 3: 7.1.5, 9.3.3 ST_IsEmpty Testa se um valor ST_Geometry corresponde um conjunto vazio. Nota SQL-MM define o resultado de ST_IsEmpty(NULL) para ser 0, quando PostGIS returna NULO. SQL-MM 3: 5.1.7 ST_IsRing Testa se um valor ST_Curve um anel. Nota SQL-MM define o resultado de ST_IsRing(NULL) para ser 0, quando PostGIS returna NULO.

SQL-MM 3: 7.1.6 ST_IsSimple Testa se um valor ST_Geometry no tem pontos geomtricos anomalos, como prpria interseo ou prpria tangncia. Nota SQL-MM define o resultado de ST_IsSimple(NULL) para ser 0, qunado PostGIS returna NULO. SQL-MM 3: 5.1.8 ST_IsValid Testa se um valor ST_Geometry est bem formado. Nota SQL-MM define o resultado de ST_IsValid(NULL) para ser 0, quando PostGIS returna NULO. QL-MM define o resultado de ST_IsValid(NULL) para ser 1. SQL-MM 3: 5.1.9 ST_Length Returna a medida do comprimento de um valor ST_Curve ou um valor ST_MultiCurve. SQL-MM 3: 7.1.2, 9.3.4 ST_LineFromText Returna uma especificao do valor ST_LineString. SQL-MM 3: 7.2.8 ST_LineFromWKB Returna uma especificao de valor ST_LineString. SQL-MM 3: 7.2.9 ST_MLineFromText Returna uma espeficiao de valor ST_MultiLineString. SQL-MM 3: 9.4.4 ST_MLineFromWKB Returna uma especificao de valor ST_MultiLineString. SQL-MM 3: 9.4.5

ST_MPointFromText Returna uma especificao de valor ST_MultiPoint. SQL-MM 3: 9.2.4 ST_MPointFromWKB Returna uma especificao de valor ST_MultiPoint. SQL-MM 3: 9.2.5 ST_MPolyFromText Returna uma especificao de valor ST_MultiPolygon. SQL-MM 3: 9.6.4 ST_MPolyFromWKB Returna uma especificao de valor ST_MultiPolygon. SQL-MM 3: 9.6.5 ST_NumGeometries Returna o nmero de geometrias em um ST_GeomCollection. SQL-MM 3: 9.1.4 ST_NumInteriorRing Returna o nmero de asnis interiores em um ST_Surface. SQL-MM 3: 8.2.5 ST_NumPoints Returna o nmero de pontos em um valor ST_LineString ou um valor ST_CircularString. SQL-MM 3: 7.2.4 ST_OrderingEquals ST_OrderingEquals compara duas geometrias e t (TRUE) se as geometrias so iguais e as coordenadas esto na mesma ordem; caso contrrio retorna f (FALSE). Nota Esta implementao feita como especificao ArcSDE SQL melhor que SQL-MM. http:// edndoc.esri.com/arcsde/9.1/sql_api/sqlapi3.htm#ST_OrderingEquals SQL-MM 3: 5.1.43 ST_Overlaps Testa se um valor ST_Geometry sobrepe camadas espacialmente a outro valor ST_Geometry.

SQL-MM 3: 5.1.32 ST_Perimeter Returna a medida do comprimento do limite de um valor ST_Surface ou de um valor ST_MultiRSurface. SQL-MM 3: 8.1.3, 9.5.4 ST_Point Returna um ST_Point com os valores de coordenadas dadas. SQL-MM 3: 6.1.2 ST_PointFromText Returna uma especificao de valor ST_Point. SQL-MM 3: 6.1.8 ST_PointFromWKB Returna uma especificao de valor ST_Point. SQL-MM 3: 6.1.9 ST_PointN Returna uma especificao de valor ST_Point em um ST_LineString ou ST_CircularString. SQL-MM 3: 7.2.5, 7.3.5 ST_PointOnSurface Returna um valor ST_Point garantido para interseo espacialmente do valor ST_Surface ou ST_MultiSurface. SQL-MM 3: 8.1.5, 9.5.6 ST_PolyFromText Returna uma especificao de valor ST_Polygon. SQL-MM 3: 8.3.6 ST_PolyFromWKB Returna uma especificao de valor ST_Polygon. SQL-MM 3: 8.3.7 ST_Polygon Returna uma construo de polgono de uma linestring especificada e SRID. SQL-MM 3: 8.3.2

ST_Relate Testa se um valor ST_Geometry relatado espacialmente outro valor ST_Geometry. SQL-MM 3: 5.1.25 ST_SRID Returna o identificador de sistema de referncia espacial do valor ST_Geometry. SQL-MM 3: 5.1.5 ST_StartPoint Returna um valor ST_Point que o ponto inicial de um valor ST_Curve. SQL-MM 3: 7.1.3 ST_SymDifference Returna um valor ST_Geometry que representa a diferena simtrica de um conjunto de pontos de dois valores ST_Geometry. SQL-MM 3: 5.1.21 ST_Touches Testa se um valor ST_Geometry tocado espacialmente por outro valor ST_Geometry. SQL-MM 3: 5.1.28 ST_Transform Returna um valor ST_Geometry transformado para sistema de referncia espacial especificado. SQL-MM 3: 5.1.6 ST_Union Returna um valor ST_Geometry que representa a unio de um conjunto de pontos de dois valores ST_Geometry. SQL-MM 3: 5.1.19 ST_Within Testa se um valor ST_Geometry espacialmente dentro de outro valor ST_Geometry. SQL-MM 3: 5.1.30 ST_WKBToSQL Returna um valor ST_Geometry para uma dada representao binria well-known. SQL-MM 3: 5.1.36 ST_WKTToSQL

Returna um valor ST_Geometry para uma dada representao de texto well-known. SQL-MM 3: 5.1.34 ST_X Returna o valor da coordenada x de um valor ST_Point. SQL-MM 3: 6.1.3 ST_Y Returna o valor da coordenada y de um valoST_Point. SQL-MM 3: 6.1.4 6.4. Funes ArcSDE As funes adicionais foram acrescidas para melhorar o suporte a uma interface de estilo ArcSDE. SE_EnvelopesIntersect Returna t (TRUE) se os envelopes de duas intersees de geometrias; contrrio, returna f (FALSE). SE_Is3d Testa se um valor de geometria tem valores de coordenada z. SE_IsMeasured Testa se um valor de geometria tem valores de coordenada m. SE_LocateAlong Returna um valor de coleo de geometria derivada com elementos que combinam a medida especificada. SE_LocateBetween Returna um valor de coleo de geometria derivada com escala especificada das medidas inclusive. SE_M Returna o valor da coordenada m de um valor ST_Point. SE_Z Returna o valor da coordenada z de um valor ST_Point.

caso

elementos que combinam a

Captulo 7. Relatando Erros Relatar erros uma maneira fundamental de ajudar no desenvolvimento de PostGIS. O relatrio mais eficaz de erro aquele que permite desenvolvedores PostGIS reproduzi-lo, assim conteria um script engatilhando-o e cada informao a respeito do ambiente em que foi detectada. Uma boa e completa informao pode ser extrada rodando SELECT postgis_full_version() [for postgis] e SELECT version() [for postgresql]. Se voc no estiver usando a liberao anterior, vale a pena dar uma olhada primeiro no release changelog, para verificar se seu erro j foi corrigido. Usar o PostGIS bug tracker assegurar que seus relatrios no sero rejeitados, e o manter informado estando com um processo seguro. Antes de relatar um erro novo, pesquise no banco de dados para ver se este erro j conhecido, e se for adicione toda informao nova que tiver sobre ele. Voc poder ler o papel de Simon Tatham sobre How to Report Bugs Effectively antes de arquivar um relatrio novo. Apendice A. Apendice ndice A.1.Notas de Verso A.1.1. Verso 1.2.1 A.1.2. Verso 1.2.0 A.1.3. Verso 1.1.6 A.1.4. Verso 1.1.5 A.1.5. Verso 1.1.4 A.1.6. Verso 1.1.3 A.1.7. Verso 1.1.2 A.1.8. Verso 1.1.1 A.1.9. Verso 1.1.0 A.1.10. Verso 1.0.6 A.1.11. Verso 1.0.5 A.1.12. Verso 1.0.4 A.1.13. Verso 1.0.3 A.1.14. Verso 1.0.2 A.1.15. Verso 1.0.1 A.1.16. Verso 1.0.0 A.1.17. Verso 1.0.0RC6 A.1.18. Verso 1.0.0RC5 A.1.19. Verso 1.0.0RC4 A.1.20. Verso 1.0.0RC3 A.1.21. Verso 1.0.0RC2 A.1.22. Verso 1.0.0RC1 A.1. Notas da Verso A.1.1. Verso 1.2.1 Data da verso: 11/01/2007

Esta verso fornece erro fixo no suporte PostgreSQL 8.2 e em alguns pequenos aumentos de desempenho. A.1.1.1. Mudanas Fixado erro de atalho point-in-polygon em Within(). Fixado PostgreSQL 8.2 NULO na manipulao para ndices. Atualizados arquivos de especificao RPM. Adicionado short-circuit para transform() dentro do case no-op. JDBC: Fixado JTS manipulando para geometrias multi-dimensional (agradecimentos a Thomas Marti pela sugesto e a colaborao parcial). Adicionalmente, agora JavaDoc compilado e empacotado. Fixados problemas do classpath com GCJ. Fixados compatibilidade do pgjdbc 8.2, perdendo suporte para JDK 1.3 e anteriores. A.1.2. Verso 1.2.0 Data da verso: 08/12/ 2006 Esta verso fornece definies de tipo junto com potencialidades da serializao/ deserializao para geometrias curvadas definidas SQL-MM, assim como aumentos de desempenho. A.1.2.1. Mudanas Adicionado suporte ao tipo de geometria curvada para serializao/deserializao. Adicionado um curto circuito point-in-polygon para as funes Contains e Within para melhorar o desempenho para estes casos. A.1.3. Verso 1.1.6 Data da verso: 02/11/2006 Esta uma verso de fixao de erro, em particular que fixa um erro crtico com interface GEOS nos sistemas 64bit. Inclui uma atualizao dos parmetros SRS e de uma melhoria nas reprojees (tome Z na considerao). Melhoria incentivada. A.1.3.1. Melhorias Se voc estiver promovendo da verso 1.0.3 ou posteriores siga este procedimento soft upgrade. Se voc estiver promovendo de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e querer realmente um melhoramento vivo leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior 1.0.0RC6 requer um hard upgrade. A.1.3.2. Correes

Fixada mudana CAPI que quebrou plataforma 64-bit. carregador/descarregador: fixado testes de regresso e uso de sada. Fixado erro setSRID() em JDBC, agradecimento Thomas Marti. A.1.3.3. Outras Mudanas uso ordenada Z nas reprojees. spatial_ref_sys.sql alterado para EPSG 6.11.1 para uso de um pacote simples de variveis de verso para todos. Inclue a Version.config no carregador/descarregador de mensagens USAGE. Substitue o hand-made, analizador de verso JDBC frgil com Properties. A.1.4. Verso 1.1.5 Data da verso: 13/10/2006 Esta uma verso de correes, incluindo um padro de segmento crtico no win32. Melhorias so incentivadas. A.1.4.1. Melhorias Se quiser melhorias da verso 1.0.3 ou posteriores siga o procedimento soft upgrade. Se quiser melhorias da verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.4.2. Correes Fixado erro de link MingW que foi causado pgsql2shp para segmento padro em Win32 quando compilado por PostgreSQL 8.2. fixado nullpointer Exception no mtodo Geometry.equals() em Java. Adicionado EJB3Spatial.odt para cumprir a exigncia de distribuio GPL preferred form of modification. Removido sincronizao obsoleta JDBC do cdigo Jts. Atualizado pesadamente os antiquados arquivos README para shp2pgsql/pgsql2shp fundindo-o com as pginas principais. Fixada etiqueta verso no cdigo jdbc que ainda diz 1.1.3 na verso 1.1.4. A.1.4.3. Novas Caractersticas Adicionada opo -S option para geometrias non-multi para shp2pgsql. A.1.5. Verso 1.1.4 Data da verso: 27/09/2006

Esta uma verso de fixao de erro incluindo algumas melhorias na interface Java. Melhorias so incentivadas. A.1.5.1. Melhorias Se quiser melhorias da verso 1.0.3 ou posteriores siga o procedimento soft upgrade. Se quiser melhorias de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.5.2. Correes Fixado suporte para PostgreSQL 8.2. Fixado erro na funo collect() descartando SRID de entrada. Adicionado SRID que verifica a combinao em MakeBox2d e MakeBox3d. Fixado regresso de testes para passar com GEOS-3.0.0. Improved pgsql2shp run concurrency. Melhorada a concorrncia de execuo pgsql2shp. A.1.5.3. Mudanas Java Retrabalhado o suporte JTS para refletir novos upstream atitudes de desenvolvedores prprios JTS para manipulao do SRID. Simplifica o cdigo e a apaga a construo que depende de GNU Trove. Adicionado o suporte EJB2 doado pela "Geodetix s.r.l. Company" http://www.geodetix.it/ . Adicionado tutorial/exemplos EJB3 doados por Norman Barker <nbarker@ittvis.com>. Reorganizado um pouco o leiaute do diretrio java. A.1.6. Verso 1.1.3 Data da verso: 30/062006 Esta uma verso de fixao de erro incluindo tambm algumas funcionalidades novas (mais notavelmente suporta a grandes transaes) e aumento de portabilidade. Melhorias so incentivadas. A.1.6.1. Melhorias Se quiser melhorias da verso 1.0.3 ou posteriores siga o procedimento soft upgrade.Se quiser melhorias de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.6.2. Correes/exatido CORREAO em distance(poly,poly) dando resultados errados. CORREAO em pgsql2shp cdigo de retorno bem sucedido. CORREAO em shp2pgsql manipulando MultiLine WKT.

CORREAO em affine() falha na atualizao da caixa delimitada. WKT analisador: construo proibida das multigeometrias com elementos EMPTY (suportados ainda para GEOMETRYCOLLECTION). A.1.6.3. Novas Funcionalidades NOVO suporte a grandes Transaes. NOVO funo DumpRings(). NOVO funo AsHEXEWKB(geom, XDR|NDR). A.1.6.4. Mudanas JDBC Testes de regresso melhorados: MultiPoint e ordenadas cientficas. Fixado alguns erros menores em cdigo code. Adicionada as funes acessor apropriado que funciona para todos os campos na preparao de fazer aqueles campos privados mais tarde. A.1.6.5. Outras Mudanas NOVO suporte de teste de regresso para carregador/descarregador. Adicionado --with-proj-libdir e --with-geos-libdir para configurar interruptores (switches). Suporte para contruir Tru64 build. Usar Jade para gerar documentao. Sem link pgsql2shp para mais libs ento requerida. Suporte inicial para PostgreSQL 8.2. A.1.7. Verso 1.1.2 Data da verso: 30/03/2006 Esta uma verso de fixao de erro incluindo algumas funes e novos aumentos de portabilidade. Melhorias so incentivadas. A.1.7.1. Melhorias Se quiser melhorias da verso 1.0.3 ou posteriores siga o procedimento soft upgrade. Se quiser melhorias de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.7.2. Correes CORREAO em SnapToGrid() computao da sada da caixa delimitada. CORREAO em EnforceRHR(). jdbc2 SRID manipulando reparos no cdigo JTS. Fixado suporte para arquitetura 64bit. A.1.7.3. Novas Funcionalidades

Testes de regresso agora podem ser executados *before* instalao postgis. Novas funes de transformao de matriz affine(). Nova funo rotate{,X,Y,Z}(). Antigas funes translating e scaling agora usam internamente affine(). Controle de acesso enfileirado estimated_extent() para construo com pgsql >= 8.0.0. A.1.7.4. Outras Mudanas script ./configure mais portvel. Alterado o script ./run_test para ter um comportamento padro mais sensato. A.1.8. Verso 1.1.1 Data da verso: 23/01/2006 Esta uma verso importante de correes, melhorias altamente recomendada. A verso precedente conteve um erro em postgis_restore.pl que impede o procedimento hard upgrade de completar-se e um erro no conector GEOS-2.2+ que impede os objetos GeometryCollection a serem usados em operaes topolgicas. A.1.8.1. Melhorias Se quiser melhorias da verso 1.0.3 ou posteriores siga o procedimento soft upgrade.Se quiser melhorias de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.8.2. Correes Fixado uma sada prematura em postgis_restore.pl. Fixao de erro no geometrycollection manipulando conector GEOS-CAPI. Solaris 2.7 e melhorias de suporte MingW. Fixao de erro no line_locate_point(). Fixado manipulao de caminho postgresql. Fixao de erro no line_substring(). Adicionado suporte para conjunto localizado no verificador de regresso. A.1.8.3. Novas Funcionalidades Nova interpolao Z e M no line_substring(). Nova interpolao Z e M no line_interpolate_point(). Adicionado NumInteriorRing() alis devido a ambiguidade OpenGIS. A.1.9. Verso 1.1.0 Data da verso: 21/12/2005 Esta uma verso menor, contendo muitas melhorias e coisas novas. O mais notavel: o procedimento da construo extremamente simplificada; transform() desempenho

melhorado drasticamente; mais estabilidade na conectividade GEOS (suporte CAPI); muitas novas funes; suporte da topologia do esboo. altamente recomendado melhoria para antes de GEOS-2.2.x instalando PostGIS, isto assegurar futuros melhoramentos GEOS no requerer uma reconstruo da biblioteca de PostGIS. A.1.9.1. Crditos Esta verso inclui o cdigo de Mark Cave Ayland para esconder objetos proj4. Markus Schaber adicionou muitas melhorias em seu cdigo JDBC2. Alex Bodnaru ajudou com fonte PostgreSQL relevo da dependncia e fornece especificao de arquivos Debian. Michael Fuhr testou coisas novas na arquitetura Solaris. David Techer e Gerald Fenoy ajudaram testar conector GEOS C-API. Hartmut Tschauner forneceu o cdigo para a funo azimuth(). Devrim GUNDUZ forneceu especificao de arquivos RPM. Carl Anderson ajudou com a nova rea de construo das funes. Veja a seo credits para consultar mais nomes. A.1.9.2. Melhorias Se quiser melhorias de uma verso 1.0.3 ou anterior NO precisa descarregar/recarregar. Simplesmente o fonte trabalhar um novo roteiro lwpostgis_upgrade.sql em todos seus bancos de dados existentes. Veja o captulo soft upgrade para mais informao. Se quiser melhorias de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.9.3. Novas Funes mtodos companheiros scale() e transscale() para translate(). line_substring(). line_locate_point(). M(point). LineMerge(geometry). shift_longitude(geometry). azimuth(geometry). locate_along_measure(geometry, float8). locate_between_measures(geometry, float8, float8). SnapToGrid by point offset (up to 4d support). BuildArea(any_geometry). OGC BdPolyFromText(linestring_wkt, srid). OGC BdMPolyFromText(linestring_wkt, srid). RemovePoint(linestring, offset). ReplacePoint(linestring, offset, point). A.1.9.4. Correes Escape da memria fixado no polygonize(). Corrigidas funes cast lwgeom_as_anytype.

Fixados elementos USE_GEOS, USE_PROJ e USE_STATS da sada postgis_version() para refletir sempre em estado de biblioteca. A.1.9.5. Mudanas de Semntica de Funo SnapToGrid no rejeita dimenses mais elevadas. Funo changed Z() retorna NULO se a dimenso pedida no est disponvel. A.1.9.6. Melhorias de Desempenho Muito mais rapida a funo transform(), objetos escondidos proj4. Chamada automtica removida para fix_geometry_columns () em AddGeometryColumns () e update_geometry_stats (). A.1.9.7. JDBC2 works Melhorias no Makefile. Melhorias no suporte JTS. Sistema de teste de regresso melhorado. Mtodo de verificao de consistncia bsica para colees da geometria. Suporte para (Hex)(E)wkb. Auto investigao DriverWrapper para interruptores HexWKB / EWKT. problemas para compilar fixo em ValueSetter para antigas versos JDK. Construtores EWKT fixos para aceitar representao SRID=4711; Adicionada preliminar suporte read-only para geometrias java2d. A.1.9.8. Outras Novas Funes Configurao autoconf-based completa, com relevo da dependncia da fonte PostgreSQL. Suporte GEOS C-API (2.2.0 e mais elevada). Suporte inicial para modelagem de topologia. Especificao de arquivos Debian e RPM. Novo script lwpostgis_upgrade.sql. A.1.9.9. Outras Mudanas Melhorias no suporte JTS. Stricter mapping between DBF and SQL integer and string attributes Mapeamento mais estrito entre o inteiro DBF e SQL e atributos de string. Wider and cleaner regression test suite Suite de teste de regresso mais largo e mais limpo. Antigo cdigo jdbc removido da Verso. Obsoleto uso direto de postgis_proc_upgrade.pl. Verso unificada de scripts com verso Verso. A.1.10. Verso 1.0.6

Data da verso: 2005/12/06 Contem algumas correes e melhorias. A.1.10.1. Melhorias Se quiser melhorias de uma verso 1.0.3 ou anterior NO precisa descarregar/recarregar. Se quiser melhorias de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.10.2. Correes Fixada chamada palloc(0) na coleo deserializadora (s d problema com --enablecassert). Fixado cache bbox de manipulao de erros. Fixada falha de segmento geom_accum(NULL, NULL). Fixada falha de segmento em addPoint(). Fixado short-allocation em lwcollection_clone(). Fixado erro em segmentize(). Fixada computao bbox de sada SnapToGrid. A.1.10.3. Improvements Suporte inicial para postgresql 8.2. Adicionado o faltante da m combinao SRID que verifica ops GEOS. A.1.11. Verso 1.0.5 Data da verso: 25/11/2005 Contem memory-alignment fixa na biblioteca, uma falta de segmento fixo no seu carregador manipulando atributos de UTF8 e algumas melhorias e limpezas. Nota Retorna cdigo shp2pgsql alterado de Versos anteriores para conformar-se aos padres unix (retorna 0 no sucesso). A.1.11.1. Melhorias

Se quiser melhorias de uma verso 1.0.3 ou anterior NO precisa descarregar/ recarregar.Se quiser melhorias de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.11.2. Mudanas de Bibliotecas

Fixada problemas de alinhamento de memria. Fixada computao de frao de valores nulos no analisador. Fixado um pequeno erro na funo getPoint4d_p() low-level. Velocidade alta das funes do serializador. Fixado um erro em force_3dm(), force_3dz() e force_4d(). A.1.11.3. Mudanas de Carregador Fixado return code de shp2pgsql. Fixado ttulo back-compatibility no carregador (carga de shapefiles nulos). Fixado manipulao de pontos arrastando em atributos numricos dbf. Falha no segmento fixo em shp2pgsql (utf8 encoding). A.1.11.4. Outras Mudana Esquema postgis_proc_upgrade.pl ciente, suporte para pgsql 7.2+. Novo captulo no manual "Relatando Erros". A.1.12. Verso 1.0.4 Data da verso: 09/09/2005 Contem correes importantes e algumas melhorias. Em particular, fixa um escape da memria que impede a construo bem sucedida de ndices GiST para tabelas espacial grandes. A.1.12.1. Melhorias Se quiser melhorias de uma verso 1.0.3 ou anterior NO precisa descarregar/recarregar. Se quiser melhorias de uma verso entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do captulo notas da verso 1.0.3. Melhorias de alguma verso anterior para 1.0.0RC6 requer um hard upgrade. A.1.12.2. Correes Escape de memria conectado na indexao GiST. Falta de segmento fixo no transform() com manipulaao de erros proj4. Fixado alguns textos proj4 no spatial_ref_sys (perdido +proj). Carregador: fixada uso da funo string, retrabalhado verificao de objetos NULO, fixada falta de segmento na entrada MULTILINESTRING. Corrigidos em manipulao de dimenso do MakeLine. Corrigidos em translate() corrupo de sada da caixa delimitada. A.1.12.3. Melhorias Melhorias na documentao. Estimador de seletividade mais robusto. Menor velocidade alta em distance().

Menor limpeza. Limpeza em ndices GiST. Aceitao de sintaxe mais solto no analisador box3d. A.1.13. Verso 1.0.3 Data da verso: 2005/08/08 Contem algumas correes - incluindo um severo afeio exata de geometries armazenados - e algumas melhorias. A.1.13.1. Melhorias Devido a um erro em uma rotina computacional de caixa delimitada, a melhoria do procedimento requer ateno especial, porque as caixas delimitadas armazenadas no banco de dados poderiam estar incorretas. Um procedimento (descarrega/recarrega) hard upgrade forar a recomputao de todas as caixas delimitadas (no includas nos descarregadores). Isto requerido se melhorias em Versos anteriores 1.0.0RC6. Se voc tiver melhorias das verses 1.0.0RC6 ou posteriores, esta Verso inclui um script perl (utils/rebuild_bbox_caches.pl) para forar a recomputao das caixas delimitadas de suas geometrias e para invocar todas as operaes requeridas propagar mudanas eventuais nelas (atualizao das estatisticas da geometria, reindexao). Invocar o script depois de um make install (executar sem argumentos para ajuda da sintaxe). Opcionalmente executar utils/postgis_proc_upgrade.pl para atualizao de procedimentos do postgis e assinaturas das funes (veja Soft upgrade). A.1.13.2. Correes Correo severa em lwgeom's 2d computao de caixa delimitada. Correo no WKT (-w) POINT manipulando no carregador. Correo no descarregador em mquinas 64bit. Correo na manipulao das selees user-defined. Correo no script create_undef.pl. A.1.13.3. Melhorias Melhorias de pequenos desempenhos na funo de entrada canonica. Menor limpeza no carregador. Suporte para nome de campo multibyte no carregador. Melhorias no script no postgis_restore.pl. Novo script util rebuild_bbox_caches.pl. A.1.14. Verso 1.0.2 Data da verso: 04/07/2005 Contem algumas correes e melhorias.

A.1.14.1. Melhorias Se quiser melhorias de uma verso 1.0.0RC6 ou superior NO precisa descarregar/ recarregar. Melhorias de verses anteriores requer um descarrega/recarrega. Veja o captulo upgrading para mais informaes. A.1.14.2. Correes Falha tolerante do btree ops. Memria de escape plugada em pg_error. ndice fixo Rtree. Scripts mais limpos na construo (mistura evitada de CFLAGS e CXXFLAGS). A.1.14.3. Melhorias Potencialidade na nova criao de ndice no carregador (-I switch). Suporte inicial para postgresql 8.1dev. A.1.15. Verso 1.0.1 Data da verso: 24/05/2005 Contem algumas correes e melhorias. A.1.15.1. Melhorias Se quiser melhorias de uma verso 1.0.0RC6 ou superior NO precisa descarregar/ recarregar. Melhorias de verses anteriores requer um descarrega/recarrega. Veja o captulo upgrading para mais informaes. A.1.15.2. Mudanas da Bibliotecas CORREO na computao 3d de length_spheroid(). CORREO no estimador de seletividade agrupado. A.1.15.3. Outras Mudanas/Adies CORREO na funo escape shp2pgsql. Melhor suporte para concorrente postgis em esquemas mltiplos. Documentaes fixas. jdbc2: compilar com "-target 1.2 -source 1.2" por padro. NOVO -k comutar para pgsql2shp. NOVO suporte para opes createdb em postgis_restore.pl. CORREO em nomes de atributos pgsql2shp cumprimento de unicidade.

CORREO em definies de projees Paris. limpezas postgis_restore.pl. A.1.16. Verso 1.0.0 Data da verso: 19/04/2005 Verso final 1.0.0. Contem algumas correes, algumas melhorias no carregador (o mais notavel suporte para verses postgis mais antigas) e mais documentaes. A.1.16.1. Melhorias Se quiser melhorias de uma verso 1.0.0RC6 NO precisa descarregar/recarregar. Melhorias de algumas verses anteriores requer um descarrega/recarrega. Veja o captulo upgrading para mais informaes. A.1.16.2. Mudanas de Bibliotecas CORREO no transform() liberando o endereo de memria aleatrio. CORREO no force_3dm() alocando menos memria ento requerida. CORREO no estimator de seletividade agrupado (defaults, leaks, tuplecount, sd). A.1.16.3. Outras Mudanas/Adies CORREO no escape de valores shp2pgsql comeando com "tab" ou "single-quote". NOVO pginas manuais para carregador/descarregador. NOVO suporte shp2pgsql para antigas verses postgis (HWGEOM). NOVO - p (prepare) flag para shp2pgsql. NOVO captulo manual sobre cumprimento de conformidade OGC. NOVO suporte a autoconfigurao (autoconf) para biblioteca JTS. CORREO nos verificadores do estimador (suporte para LWGEOM e esquema analisador). A.1.17. Verso 1.0.0RC6 Data da verso: 30/03/2005 Sexta Verso candidata para 1.0.0. Contem algumas correes e limpezas. A.1.17.1. Melhorias Voc precisa descarregar/recarregar para melhoria das verses precedentes. Veja o captulo upgrading para mais informaes. A.1.17.2. Mudanas de Bibliotecas CORREO em multi(). pronto return [when noop] do multi(). A.1.17.3. Mudanas de Scripts funes dropped {x,y}{min,max}(box2d)

A.1.17.4. Outras Mudanas CORREO no script postgis_restore.pl. CORREO no seu descarregador de suporte 64bit. A.1.18. Verso 1.0.0RC5 Data da verso: 25/03/2005 Quinta Verso candidata para 1.0.0. Contem algumas correes e melhorias. A.1.18.1. Melhorias Se quiser melhorias de uma verso 1.0.0RC4 NO precisa descarregar/recarregar. Melhorias de algumas verses anteriores requer um descarrega/recarrega. Veja o captulo upgrading para mais informaes. A.1.18.2. Mudanas de Bibliotecas CORREO (segmento padro) em computao box3d (sim, outros!). CORREO (segmento padro) em estimated_extent().

A.1.18.3. Outras Mudanas Construes pequenas de scripts e refinamentos de utilidades. Adicionais desempenho de tipos documentados. A.1.19. Verso 1.0.0RC4 Data da verso: 18/03/2005 Quarta Verso candidata para 1.0.0. Contem correes e poucas melhorias. A.1.19.1. Melhorias Voc precisa descarregar/recarregar para melhoria das verses precedentes. Veja o captulo upgrading para mais informaes. A.1.19.2. Mudanas de Bibliotecas CORREO (segmento padro) em geom_accum(). CORREO no suporte a arquitetura 64bit. CORREO no funo da computao box3d com colees. NOVO suporte a subselects em estimador de seletividade. Retorno rpido da force_collection. Verificao de consistncia fixa em SnapToGrid(). Sada retroagida Box2d para 15 dgitos significativos. Box2d output changed back to 15 significant digits.

A.1.19.3. Mudanas de Scripts NOVO funo distance_sphere(). Alterada implementao get_proj4_from_srid para usar PL/PGSQL em vez do SQL.

A.1.19.4. Outras Mudanas CORREO na manipulao do carregador e descarregador das formas MultiLine. CORREO no carregador, saltando tudo com exceo da primeira regra de polgonos. jdbc2: limpeza de cdigos, melhorias no Makefile. Variveis FLEX e YACC atribui *after* pgsql Makefile.global que includo e s se a verso pgsql *stripped* determina string vazia.J adicionado analisador gerado na verso. Refinamentos de scripts construdos. Manipulao de verso melhorada, Version.config central. melhorias em postgis_restore.pl. A.1.20. Verso 1.0.0RC3 Data da verso: 24/02/2005 Terceira Verso candidata para 1.0.0. Contem muitas correes e melhorias. A.1.20.1. Melhorias Voc precisa descarregar/recarregar para melhoria das verses precedentes. Veja o captulo upgrading para mais informaes. A.1.20.2. Mudanas de Bibliotecas CORREO no transform(): faltando SRID, manipulao melhor de erro. CORREO na manipulao do alinhamento da memria. CORREO no force_collection() causando falhas do conector do mapserver em tipos de geometria simples. CORREO no GeometryFromText() faltando adicionar uma memria bbox. Preciso reduzida da sada box2d. Macros DEBUG pr-fixados com PGIS_ para evitar o choque com um pgsql. Ligado um escape no conversor GEOS2POSTGIS. Uso de memria reduzido mais cedo liberando um "query-context" de um palloc. A.1.20.3. Mudanas de Scripts CORREO em 72 ndices sujeitantes. CORREO no probe_geometry_columns() para trabalhar com PG72 e para suportar colunas da geometria mltiplas em uma tabela simples. NOVO cast bool::text Feitas algumas funes IMMUTABLE de STABLE, para melhorar o desempenho. A.1.20.4. Mudanas JDBC

jdbc2: Caminhos pequenos, testes box2d/3d, documentos e licena revisados. jdbc2: Correes e o caso de teste para o tipo autoregistro pgjdbc 8.0. jdbc2: Uso removido de jdk1.4 s caractersticas para permitir construo com verses mais antigas JDK. jdbc2: Adicionado suporte para construo com pg72jdbc2.jar. jdbc2: Atualizao e limpeza do makefile. jdbc2: Adicionado suporte BETA para classes geometricas jts. jdbc2: Pulo de testes known-to-fail contra servidores mais antigos PostGIS. jdbc2: Fixado manipulao de medidas geomtricas em EWKT. A.1.20.5. Outras Mudanas Novo desempenho vira o captulo no manual. Atualizaes da documentao: exigncia pgsql72, lwpostgis.sql. Poucas mudanas no autoconf. A extrao de BUILDDATE feito mais portvel. Fixado spatial_ref_sys.sql para evitar limpeza no banco de dados inteiro. spatial_ref_sys: alteradas entradas Paris para combinar alguns distribudos com o 0.x. A.1.21. Verso 1.0.0RC2 Data da verso: 26/01/2005 Segunda Verso candidata para 1.0.0 contendo correes e algumas melhorias. A.1.21.1. Melhorias Voc precisa descarregar/recarregar para melhoria das verses precedentes. Veja o captulo upgrading para mais informaes. A.1.21.2. Mudanas em bibliotecas CORREO na computao box3d pointarray. CORREO na definio distance_spheroid. CORREO no transform() faltando atualizar memria bbox. NOVO jdbc driver (jdbc2). GEOMETRYCOLLECTION(EMPTY) suporte de sintaxe para a compatibilidade inversa. Sadas binrias mais rpidas. Construtores mais estritos OGC WKB/WKT. A.1.21.3. Mudanas em Scripts Usos mais corretos STABLE, IMMUTABLE, STRICT em lwpostgis.sql. construtores mais estritos OGC WKB/WKT. A.1.21.4. Outras Mudanas Carregador mais rpido e mais robusto (ambos i18n e no). script inicial do autoconf.

A.1.22. Verso 1.0.0RC1 Data da verso: 13/01/2005 Este o primeiro candidato da principal verso postgis, com armazenamento interno dos tipos postgis redesenhado para ser menor e mais rpido em selees posicionadas. A.1.22.1. Melhorias Voc precisa descarregar/recarregar para melhoria das verses precedentes. Veja o captulo upgrading para mais informaes. A.1.22.2. Mudanas Entrada cannica mais rpida. Sada cannica de pouca perda. EWKB binrio cannico IO com PG>73. Suporte para at coordenadas 4d, fornecendo a sem perda da converso shapefile>postgis->shapefile. Novas funes: UpdateGeometrySRID(), AsGML(), SnapToGrid(), ForceRHR(), estimated_extent(), accum(). Posicionamento vertical de operadores indexados. JOIN funo de seletividade. Mais geometrias construtores / editores. API de extenso Postgis. Suporte UTF8 no carregador.

Você também pode gostar