89
Manual PostGIS

Manual PostGIS

Embed Size (px)

Citation preview

Manual PostGIS

Sumário

1. Introdução1.1. Créditos1.2. Mais Informações2. Instalação2.1. Exigências2.2. PostGIS2.2.1. Criando PostGIS habilitando espacialmente um banco de dados de modelo de construção2.2.2. Melhorias2.2.3. Problemas Comuns2.3. JDBC2.4. Carregador/Descarregador3. Perguntas Mais Frequentes4. Usando PostGIS4.1. Objetos GIS4.1.1. Padrões de OpenGIS WKB e WKT4.1.2. Padrões de PostGIS EWKB, EWKT e Forma Canônica4.1.3. SQL-MM Parte 34.2. Usando Padrões de OpenGIS4.2.1. Tabela de Sistemas de Referências Espacial (SPATIAL_REF_SYS)4.2.2. Tabela de Colunas Geométricas (GEOMETRY_COLUMNS)4.2.3. Criando uma Tabela de espacial4.2.4. Assegurando-se conforme a geometria de OpenGIS4.3. Carregando Dados de GIS4.3.1. Usando SQL4.3.2. Usando o Carregador4.4. Recuperando Dados de GIS4.4.1. Usando SQL4.4.2. Usando o Descarregador4.5. Construindo Índices4.5.1. Índices GiST4.5.2. Usando Índices4.6. Queries Complexas4.6.1. Vantagens no Uso de Índices4.6.2. Exemplos de SQL Espacial4.7. Usando Servidor de Mapas4.7.1. Uso básico4.7.2. Perguntas Mais Frequentes4.7.3. Uso Avançado4.7.4. Exemplos4.8. Clientes de Java (JDBC)4.9. Clientes de C (libpq)4.9.1. Cursores de Texto4.9.2. Cursores Binários5. Tipos de Performance5.1. Tabelas Pequenas de Geometrias Grandes5.1.1. Descrição de problemas5.1.2. Envolvimento com o trabalho5.2. CLUSTERing em índices da geometria5.3. Evitando a conversão da dimensão

6. Referência PostGIS6.1. Funções de OpenGIS6.1.1. Funções de Gerenciamento6.1.2. Funções de Relacionamento da Geometria6.1.3. Funções de Processamento da Geometria6.1.4. Assessores Geométricos6.1.5. Construtores Geométricos6.2. Extensões PostGIS6.2.1. Funções de Gerenciamento6.2.2. Operadores6.2.3. Funções de Medida6.2.4. Saída Geométricas6.2.5. Construtores Geométricos6.2.6. Editores Geométricos6.2.7. Referência Linear6.2.8. Variado6.2.9. Suporte a grandes transações (Long Transactions)6.3. Funções SQL-MM6.4. Funções ArcSDE7. Relatando ErrosA. ApendiceA.1. Notas de VersãoA.1.1. Versão 1.2.1A.1.2. Versão 1.2.0A.1.3. Versão 1.1.6A.1.4. Versão 1.1.5A.1.5. Versão 1.1.4A.1.6. Versão 1.1.3A.1.7. Versão 1.1.2A.1.8. Versão 1.1.1A.1.9. Versão 1.1.0A.1.10. Versão 1.0.6A.1.11. Versão 1.0.5A.1.12. Versão 1.0.4A.1.13. Versão 1.0.3A.1.14. Versão 1.0.2A.1.15. Versão 1.0.1A.1.16. Versão 1.0.0A.1.17. Versão 1.0.0RC6A.1.18. Versão 1.0.0RC5A.1.19. Versão 1.0.0RC4A.1.20. Versão 1.0.0RC3A.1.21. Versão 1.0.0RC2A.1.22. Versão 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 integração 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, construção de topologia avançada (coberturas, superfícies, redes), ferramentas de interface do usuário de mesa visando e editando dados de GIS, e ferramentas de acesso baseadas na web.

1.1. Créditos

Sandro Santilli <[email protected]>Coordena todos os erros (bugs) fixando e mantendo o esforço, a integração de novas funcionalidades GEOS, e novas funções.

Chris Hodgson <[email protected]>Mantem novos funções e suporte ao índice 7.2.

Paul Ramsey <[email protected]>Conserva a trilha da documentação e empacotamento.

Jeff Lounsbury <[email protected]>Mantém o desenvolvimento original do Shape no programa de carga/descarga.

Dave Blasby <[email protected]>Dave, o principal desenvolvedor de PostGIS, mantém o lado de servidor de objetos e suporte a índice, o lado de servidor de funções analíticas.

Outros contribuidoresEm ordem alfabética: 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 Cave-Ayland, Mark Sondheim, Markus Schaber, Michael Fuhr, Nikita Shulga, Norman Vine, Olivier Courtin, Ralph Mason, Steffen Macke.

Bibliotecas de suportes importanteA biblioteca das operações geométricas GEOS e o trabalho algorítmico de Martin Davis <[email protected]> de Vivid Solutions em fazê-la todas trabalharem.

A biblioteca de projeção cartográfica Proj4 e o trabalho de Gerald Evenden and Frank Warmerdam em criá-la e mantê-la.

1.2. Mais Informações

• O software, a documentação e as novidades mais recentes do PostGIS estão disponíveis no site, http://postgis.refractions.net.

• Mais informações sobre a biblioteca de operações geométricas GEOS está disponível em http://geos.refractions.net.

• Mais informações sobre a biblioteca de reprojeção Proj4 está disponível em http://www.remotesensing.org/proj.

• Mais informações sobre o servidor da banco de dados PostgreSQL está disponível no site principal de PostgreSQL, http://www.postgresql.org.

• Mais in formações sobre índice GiST está d isponível no s i te de desenvolvimento PostgreSQL GiST,http://www.sai.msu.su/~megera/postgres/gist.

• Mais informações sobre servidor de mapas na internet Mapserver está disponível em http://mapserver.gis.umn.edu/.

• As "características simples para especificação do SQL " está disponível no Consórcio de OpenGIS no site: http://www.opengis.org/.

Capítulo 2. Instalação

2.1. Exigências

PostGIS tem as seguintes exigências para construção e uso:

• Uma instalação completa do PostgreSQL (incluindo servidor de headers). PostgreSQL está disponível em http://www.postgresql.org/. Versão 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 versão default que faz falta. Para saber a versão, utilizar make -v. Outras versões de make não podem processar o PostGIS Makefile corretamente.

• (Opcional) Biblioteca de reprojeção Proj4. A biblioteca Proj4 é usada para fornecer suporte a reprojeções coordenadas dentro de PostGIS. Proj4 está disponível 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 operações (Buffer(), GeomUnion(), Difference()) com PostGIS. GEOS está disponível para baixa em http://geos.refractions.net/.

2.2. PostGIS

O módulo de PostGIS é uma extensão ao PostgreSQL servidor de retaguarda. Assim, PostGIS 1.2.1 requer um acesso completo do servidor de headers PostgreSQL organizado em diretório para compilar. O código fonte PostgreSQL está disponível em http://www.postgresql.org/.

PostGIS 1.2.1 pode ser construído com versões de PostgreSQL 7.2.0 ou posteriores. As versões de PostgreSQL anteriores não são suportadas.

1. Antes de você compilar os módulos do servidor de PostGIS, terá que compilar e instalar o pacote PostgreSQL.NotaSe você planeja usar funcionalidade de GEOS precisará unir PostgreSQL à biblioteca de C++ padrão:

2. LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE] 3. Este é um trabalho voltado para exceções em C++ interando com ferramentas de

desenvolvimento mais antigas. Se você perceber problemas estranhos (inesperadamente fechar uma retaguarda ou algo semelhante), faça esta tentativa. Isso fará com que corra o risco de compilar o PostgreSQL.

4. Para recuperar o arquivo fonte PostGIS faça nova baixa em http://postgis.refractions.net/postgis-1.2.1.tar.gz. Descomprima o arquivo no diretório "contrib" do fonte PostgreSQL, organizando assim, os fontes no diretório.

5. # cd [postgresql source tree]/contrib 6. # gzip -d -c postgis-1.2.1.tar.gz | tar xvf - 7. Entrar no diretório "postgis-1.2.1" e rodar: 8. # ./configure 9. • Se quiser dar suporte a reprojeção de coordenada, deverá ter a biblioteca de

Proj4 instalada. Se ./configure não encontrá-la, tente usar --with-proj=PATH para ajustar para um diretório específico da instalação Proj4.

• Se quiser usar funcionalidades GEOS, terá que ter instalada a biblioteca de GEOS. Se ./configure não encontrá-la, tente usar --with-geos=PATH para especificar o path completo para o programa geos-config path completo.

10. 11. Rodar o compilador e instalar comandos. 12. # make 13. # make install 14. Todos os arquivos são instalados usando informações fornecidas por pg_config.

• Bibliotecas são instaladas [pkglibdir]/lib/contrib.

• Arquivos de suporte importantes como lwpostgis.sql são instalados em prefix]/share/contrib.

• Carregador e binários livres são instalados em [bindir]/. 15. 16. PostGIS requer para o PL/pgSQL extensão 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 funções no banco de dados, carregando

definições de arquivo lwpostgis.sql.

19. # psql -d [yourdatabase] -f lwpostgis.sql 20. Extensões de servidor de PostGIS agora estão carregadas e prontas para uso.

21. Para um completo uso de coordenada de identificadores de definição de sistemas EPSG, poderá tambem carregar o arquivo de definições spatial_ref_sys.sql e conteúdos de tabela SPATIAL_REF_SYS.

22. # psql -d [yourdatabase] -f spatial_ref_sys.sql 2.2.1. Criando PostGIS habilitando espacialmente um modelo de construção de banco de dados

Algumas distribuições empacotadas de PostGIS (em particular os instaladores Win32 para o PostGIS >= 1.1.5) carregam as funções de PostGIS dentro de um banco de dados chamado template_postgis. Se o banco de dados template_postgis existir em sua instalação de PostgreSQL, então é possível para usuários e/ou as aplicações, criarem bancos de dados espacialmente habilitados, usando um único comando. Note que em ambos os casos, o usuário do banco de dados terá um grande privilégio 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. Atualização

Atualizando bancos de dados espacial existente pode ser complicado como requer a recolocação ou a introdução de novas definições de objeto de PostGIS.

Infelizmente nem todas as definições podem ser substituídas facilmente em um banco de dados vivo, assim às vezes sua melhor aposta são um processo de descarregar/carregar (dump/reload).

PostGIS fornece uma proceduce SOFT UPGRADE para liberações menores ou de pequenas correções (bugfix) e uma procedure HARD UPGRADE para liberações maiores.

Antes de tentar atualizar o postgis, é sempre válido fazer uma cópia 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_databaseSe um soft upgrade não for possível, o script abortará e será advertido sobre o HARD UPGRADE que esá sendo requerido, assim não hesite tentar primeiro um soft upgrade.

Se um melhoramento macio não for possível o certificado abortar e você estará advertido sobre o MELHORAMENTO DURO que está sendo requerido, assim que não hesitate tentar primeiramente um melhoramento macio.

Note

Se você não encontrar o arquivo lwpostgis_upgrade.sql, estará usando uma versão 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.sql2.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 não for possível. O apêndice Notas de Versão reportará para cada versão 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 utilitário para restaurar uma descarga produzida com o comando pg_dump -Fc. Assim, é experimental redirecionar sua saída 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.dumpRestaurar a descarga atualizando contextualmente postgis em um banco de dados novo. O novo banco de dados não pode existir. postgis_restore aceita parâmetros createdb depois da descarga de um nome de arquivo (file name) e isso pode por instância 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.logCertificar-se de que todo objeto de descarga restaurado realmente tenha que ser restaurado dda descarga e não entrar em conflito com esses definidos em lwpostgis.sql

$ grep ^KEEPING restore.log | lessSe 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 não é mais necessário. Mantê-los não 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 são recuperadas da descarga, para assegurar seus costumes adicionais são mantidos, mas a distribuição pôde conter modificação como voce recupera suas entradas, apagar a tabela e a fonte de uma nova. Se fizer adições, supomos que conheça como recuperá-las antes de atualizar a tabela. Substituí-la com a nova é feita desta forma:

$ psql newdbnewdb=> delete from spatial_ref_sys;DROPnewdb=> \i spatial_ref_sys.sql 2.2.3. Problemas Comuns

Existem várias coisas para conferir quando sua instalação ou atualização não acontece como você espera.

1. Será mais fácil se você descomprimir os arquivos de PostGIS no diretório "contrib" do fonte PostgreSQL em árvore. Porém, se isto não for possível por alguma razão, você poderá criar uma variável de desenvolvimento PGSQL_SRC para o caminho do diretório 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 executáveis para os seus locais apropriados você.

2. Verifique se você instalou PostgreSQL 7.2 ou mais novo, e então você estará compilando mesma versão de fonte de PostgreSQL contra a versão de PostgreSQL que está executando. Confusões podem ocorrer quando sua distribuição (Linux) já instalou PostgreSQL, caso contrário, voce pode ter instalado PostgreSQL antes e se esquecido disto. PostGIS só trabalhará com versões PostgreSQL 7.2 ou mais novas. Mensagens de erros estranhas e inesperadas resultarão se você usar uma versão mais velha. Para conferir a versão de PostgreSQL que está executando, conecte-se ao banco de dados, usando psql e execute o comando:

3. SELECT version(); 4. Se rodar uma distribuição baseada RPM, voce pode verificar a existência de

pacotes pré-instaladores usando o comando rpm como segue: rpm -qa | grep postgresql

Também verifique se fez qualquer alteração necessária do Makefile.config. Isto inclui: 1. Se quiser pode fazer reprojeções coordenadas, deverá instalar a biblioteca de

Proj4 em seu sistema, atribuir 1 a variável USE_PROJ e para seu prefixo de instalação PROJ_DIR dentro de Makefile.config.

2. Se você quer estar hábil para usar funções de GEOS, deverá instalar a biblioteca de GEOS em seu sistema, e atribuir 1 a variável USE_GEOS e para sua instalação GEOS_DIR dentro de Makefile.config.

2.3. JDBC

As extensões de JDBC provêem 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 cálculos em dados de GIS em PostGIS. 1. Entrar no sub-diretório de distribuição de PostGIS jdbc.

2. Editar Makefile para prover os caminhos corretos de seu compilador de java (JAVAC) e interprete (JAVA).

3. Executar o comando make. Copiar o arquivo postgis.jar onde quer que mantenha suas bibliotecas de java.

2.4. Carregador/Descarregador

Os dados para o carregador e descarregador são construídos e instalados automaticamente, como parte da construção de PostGIS. Para construí-los e os instalá-los manualmente, execute os comandos, conforme abaixo descritos:

# cd postgis-1.2.1/loader# make# make installO 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.

Capítulo 3. Perguntas Mais Frequentes

3.1. Que tipo de objetos geométricos eu posso armazenar?

Você pode armazenar point, linestring, polygon, multipoint, multiline, multipolygon, e coleções geométricas. Estes são especificados Open GIS Well Known Text (com extensões 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 adição de coluna de geometria falhar, você provavelmente não carregou as funções e objetos de PostGIS dentro do banco de dados. Veja as instruções de instalação.

Então, você pode inserir uma geometria na tabela, usando inserção de declaração do SQL . O próprio 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 informação sobre outros objetos GIS, veja referência 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 seleção espacial?

É o mesmo caminho que constrói outras seleções de banco de dados, como uma combinação SQL de retornos de valores, funções e teste verdadeiro ou falso.

Para fazer uma seleção espacial, existem dois caminhos que são importantes de se manter em mente ao construir sua pergunta: pode fazer um índice espacial; e você faz cálculos enormes em um grande número geometries.

No geral, se quiser usar operadores de interseção (&&) que testa se salto de caixa é de interseção característica.O uso do operador && é útil porque se um índice espacial está disponível à velocidade acima do teste, o operador && fará uso disto. Isto pode fazer as seleções muito mais rápida.

Note que o salto de caixas usou a seleção que deve ser declarada explicitamente como um box3d que usa o ":: box3d" que lança a operação.

Poderá também fazer uso de funções espaciais, como Distance(), Intersects(), Contains() e Within(), entre outros, e obterá resultados abaixo de suas buscas.

A maior seleção espatial incluem ambos um teste posicionado e um teste de função spatial. O teste do índice serve para limitar o número de retornos, somente eles que podem se encontrar com a condição do interesse. As funções espaciais são então para uso de teste de condição exata.

SELECT id, the_geom FROM thetableWHERE 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 seleção espacial rápida em tabelas grandes?

Seleções rápidas em tabelas grandes é uma finalidade da existência propriamente de bancos de dados espaciais (junto com suporte transacional), tendo assim, a importância de um bom índice.

Para construir um índice espacial em uma tabela com uma coluna geometrica, use a função "CREATE INDEX" como segue:

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] );A opção "USING GIST" informa ao servidor para usar um índice GiST (Generalized Searche Tree).

Nota

Índices GiST são assumidos para quem não 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á também assegurar-se de que se a seleção de PostgreSQL tiver muita informação sobre seu índice para fazer decisões racionais, quando usá-lo. Para fazer isto, você tem que pegar estatísticas em suas tabelas geométricas.

Para versões de PostgreSQL 8.0.x e superiores, rode o comando VACUUM ANALYZE.

Para versões de PostgreSQL 7.4.x e inferiores, rode o comando SELECT UPDATE_GEOMETRY_STATS().

3.5.Porque são descartados os índices PostgreSQL R-Tree?

Versões anteriores de PostGIS usaram os índices PostgreSQL R-Tree. Porém, PostgreSQL R-Trees tem sido descartado completamente desde a versão 0.6, e índices espaciais são proporcionados com esquema R-Tree-over-GiST.

Nossos testes mostraram velocidade de procura para R-Tree nativa e GiST serem comparáveis. PostgreSQL R-Trees nativo tem duas limitações que os fazem indesejáveis para o uso com características GIS (nota-se que estas limitações são devido a atual implementação de PostgreSQL R-Tree nativa, não o conceito de R-Tree em geral):

• índices R-Tree em PostgreSQL não podem controlar características que são de tamanhos maiores que 8K. Índices GiST podem, usando-se o "lossy" de substituição a caixa delimitada para característica própria.

• índices R-Tree em PostgreSQL não são nenhuma "null safe" (sem segurança), assim construindo um índice em uma coluna de geometria que contenha geometrias nulas falharão.

3.6.Porque usar a função AddGeometryColumn () e todas as funções restante de OpenGIS?

Se você não quer usar funções de suporte OpenGIS, não use. Simplesmente crie tabelas com versões mais velhas dentro, definindo suas colunas de geometria na declaração do CREATE . Todas suas geometrias terão SRIDs de valor -1, e os meta-dados de tabelas OpenGIS não serão preenchidas corretamente. Porém, isto vai causar falhas na maioria das aplicações baseadas em PostGIS, e geralmente é sugerido que você use AddGeometryColumn () para criar tabelas de geometrias.

Mapserver é uma aplicação que faz uso dos meta-dados de geometry_columns. Especificamente, Mapserver pode usar o SRID da coluna de geometria para fazer características de reprojeções rápidas dentro da correta projeção de mapa.

3.7.Qual é o melhor caminho para achar todos os objetos dentro de outro objeto de rádio?

Para se usar o banco de dados eficientemente, é melhor fazer uma seleção de rádio com qual combina o teste de rádio com um teste de caixa de salto: o teste de caixa delimitada usa o índice espacial, enquanto um subconjunto de dados de acesso rápido, com o qual o teste de rádio é aplicado.

A função Expand() é uma maneira acessível de ampliar um salto de caixa para permitir uma busca do índice de uma região do interesse. A combinação de uma cláusula do índice do acesso rápido e de um teste exato mais lento da distância, fornece a melhor combinação da velocidade e da precisão para esta seleção.

Por exemplo, procurar todos os objetos com 100 metros de POINT(1000 1000) a seleção 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 reprojeção coordenada como parte de uma seleção?

Para executar uma reprojeção, a fonte e sistemas de coordenada de destino devem ser definidos dentro da tabela SPATIAL_REF_SYS, e as geometrias que são reprojetadas já devem ser usadas em atribuição do SRID. Uma vez isso terminado, uma reprojeçãoé tão simples quanto recorrer ao destino desejado SRID.

SELECT Transform(GEOM,4269) FROM GEOTABLE;

Capítulo 4. Usando PostGIS

4.1. Objetos de GIS

Suporte PostGIS a objetos de GIS são "Simple Features" (Características Simples) definidas pelo OpenGIS Consortium (OGC). Note que PostGIS suporta atualmente as características e a representação de APIs, mas não as várias comparações e operadores de convolução cedidos na especificação OGC "Simple Features for SQL".

PostGIS estende o padrão com suport para coordenadas 3DZ, 3DM e 4D.

4.1.1. Padrões de OpenGIS WKB e WKT

A especificação OpenGIS define dois caminhos padrões de objeto espacial de expressão: a forma Well-Known Text (WKT) e a forma Well-Known Binary (WKB). Ambos, WKT and WKB, incluem informação sobre o tipo do objeto e as coordenadas a qual forma o objeto.

Exemplos das representações de texto das características são 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 especificação de OpenGIS requer também 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 inserção no banco de dados.

Input/Output desses formatos está disponível usando as seguintes relações:

bytea WKB = asBinary(geometry); text WKT = asText(geometry); geometry = GeomFromWKB(bytea WKB, SRID); geometry = GeometryFromText(text WKT, SRID); Por exemplo, uma declaração válida de inserção 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 Padrões EWKB, EWKT e Formas Canônicas

Somente o formato OGC suporta geometria 2d, e o SRID associado *nunca* faz parte das respresentações do input/output.

Formatos de extensão Postgis são atualmente superset de um OGC(cada WKB/WKT válido é um EWKB/EWKT válido), mas mas isto pôde variar no futuro, especificamente se OGC saísse com um formato novo que opõe a nossas extensões. Assim você NÃO DEVE confiar nesta característica!

Postgis EWKB/EWKT soma o suport a coordenadas 3dm,3dz,4d e faz parte das informações SRID.

Exemplos das representações do texto (EWKT) dos objetos espaciais estendidos das características são 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 são 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 declaração válida de inserção 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 canônica ) de um tipo PostgreSQL são as representações que pega com uma simples "query" (sem uma chamada de função) e no qual é garantido para ser aceito com uma inserção simples, atualização ou cópia. Para o postgis tipo 'geometry' são esses:

- Output - binary: EWKB ascii: HEXEWKB (EWKB in hex form)

- Input - binary: EWKB ascii: HEXEWKB|EWKT Para o exemplo esta indicação lê EWKT e retorna HEXEWKB no processo do input/output canônico do ascii:

=# SELECT 'SRID=4;POINT(0 0)'::geometry; geometry ---------------------------------------------------- 01010000200400000000000000000000000000000000000000 (1 row)

4.1.3. SQL-MM Part 3

A especificação Espacial de Aplicações de Multimedia do SQL estende as simples características para especificações do SQL, definindo um número de curvas inseridas circularmente.As definições SQL-MM incluem coordenadas 3dm, 3dz e 4d, mas não permite embutir informação SRID.The well-known text extensions are not yet fully supported. Examples of some simple curved geometries are shown below:As extensões de texto conhecidas não são suportadas ainda por completo. Os exemplos de algumas geometrias curvadas simples são 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 não pode suportar o uso de curvas compostas (Compound Curves) em um polígono curvo (Curve Polygon).

Nota

Todas as comparações do ponto flutuante dentro da implementação de SQL-MM são executadas para uma tolerância especificada, atualmente 1E-8.4.2. Usando Padrões de OpenGIS

O OpenGIS "Simple Features Specification for SQL" define tipos de objetos padrão GIS, as funções requeridas para manipulá-las e uma especificação de tabela de meta-dados. Para asse- gurar que os meta-dados permaneçam consistentes, operações como criar e remover uma coluna espacial são carregadas fora através da definição procedures especiais por OpenGIS.Existem duas tabelas de meta-dados OpenGIS: SPATIAL_REF_SYS e GEOMETRY_COLUMNS. A tabela SPATIAL_REF_SYS carrega os identificadores numéricos e descrições textuais de sistemas de coordenada usadas no banco de dados espacial.4.2.1. Tabela de Sistemas de Referências Espacial (SPATIAL_REF_SYS)

A definição da Tabela de Sistemas de Referências 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 são como segue:

SRIDUm valor inteiro que exclusivamente identifica o Sistema de Referência Espacial (Spacial Referencing System - SRS) dentro do banco de dados.

AUTH_NAMENome do padrão ou corpo de padrões que estão sendo citados para este sistema de referência. Por exemplo, "EPSG" seria um AUTH_NAME válido.

AUTH_SRIDO ID do Sistema de Referência Espacial (SRID) como definido pela autoridade citada no AUTH_NAME. No caso de EPSG, é onde o código de projeção EPSG ficaria.

SRTEXTRepresentação de Well-Known Text do Sistema de Referência Espacial (WKT SRS). Um exemplo de uma representação 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 códigos de projeção Grupo de Exame Europeu do Petróleo (EPSG - European Petroleum Survey Group) e suas correspondentes representações, veja http://www.opengis.org/techno/interop/EPSG2WKT.TXT. Para uma discussão de WKT em geral, veja OpenGIS "Coordinate Transformation Services Implementation Specification" em http://www.opengis.org/techno/specs.htm. Para informações do Grupo de Exame Europeu do Petróleo (EPSG - European Petroleum Survey Group) e seu banco de dados de sistemas de referência espacial, veja: http://epsg.org/.

PROJ4TEXT

P o s t G I S u s a a b i b l i o t e c a P r o j 4 p a r a f o r n e c e r p o t e n c i a l i d a d e s d e transformaçãocoordenadas . A coluna de PROJ4TEXT contem a string de definição de coordenada Proj4 para um SRID particular. Por exemplo:

+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=mPara mais informações a respeito, veja a página de Proj4 em http: / /www.remotesensing.org/proj. O arquivo spatial_ref_sys.sql contém ambas definições, SRTEXT and PROJ4TEXT,para todas as projeções.

4.2.2. Tabela de Colunas Geométricas (GEOMETRY_COLUMNS)

A definição de Tabela de Colunas Geométricas (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 são como segue:

F_TABLE_CATALOG, F_TABLE_SCHEMA, F_TABLE_NAMENome completamente qualificado da característica tabela contendo a coluna geométrica. Note que as condições "catalog" e "schema" são Oracle-ish. Não existe análogo de "catalog" PostgreSQL de forma que a coluna é espaço em branco a esquerda - para "schema" o nome de banco de dados PostgreSQL é usado. (public é o default).

F_GEOMETRY_COLUMNO nome da coluna geométrica na tabela característica

COORD_DIMENSIONDimensão de espaço (2, 3 ou 4 dimensional) da coluna.

SRIDIdentificador do sistema de referência espacial usado para a coordenada geométrica nesta tabela. É uma chave de referência estrangeira para o SPATIAL_REF_SYS.

TYPETipo 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, POLYGONM, MULTIPOINTM, MULTIL INESTRINGM, MULTIPOLYGONM, GEOMETRYCOLLECTIONM. Para coleções heterogêneas (mixed-type), você pode usar "GEOMETRY" como tipo.

Nota

Este atributo não é (provavelmente) parte da especificação OpenGIS, mas é requerido para homogeneidade de tipo assegurado.

4.2.3. Criando uma Tabela Espacial

Criação 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 função 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" genérico 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 funções executadas pela biblioteca de GEOS confiam na suposição que suas geometrias são válidas como especificadas pela Especificação de Característica Simples de OpenGIS (OpenGIS Simple Feature Specification). Para verificar a validade das geometrias você pode usar a função IsValid():

gisdb=# select isvalid('LINESTRING(0 0, 1 1)'), isvalid('LINESTRING(0 0,0 0)'); isvalid | isvalid

---------+--------- t | fPor default, PostGIS não aplica esta verificação de validade na entrada da geometria, porque testar a validade necessita lotes de tempo do processador central (CPU) para geometrias complexas, especialmente poligonos. Se não confiar em suas fontes de dados, pode manualmente reforçar tal verificação a suas tabelas, adicionando um confinamento da verificação:

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 funções PostGIS com entrada de geometrias válidas, 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 função de PostGIS retornar uma geometria inválida para a entrada válida.

Note

Estritamente as geometrias de OGC não podem ter valores de Z ou de M. A função válida IsValid() não considerará geometrias altamente calculadas as dimensões inválidas! Invocações de AddGeometryColumn() adicionará confinamente, verificando dimensões 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 declarações de SQL formatadas ou usando o carregador/descarregador de arquivo Shape.

4.3.1. Usando SQL

Se você pode converter dados de uma representação de texto, então usando SQL formatado poderia ser o modo mais fácil 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 declarações 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 R T I N T O R O A D S _ G E O M ( I D , G E O M , N A M E ) V A L U E S (1,GeomFromText('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd');I N S E R T I N T O R O A D S _ G E O M ( I D , G E O M , N A M E ) V A L U E S (2,GeomFromText('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd');I N S E R T I N T O R O A D S _ G E O M ( I D , G E O M , N A M E ) V A L U E S (3,GeomFromText('LINESTRING(192783 228138,192612 229814)',-1),'Paul St');I N S E R T I N T O R O A D S _ G E O M ( I D , G E O M , N A M E ) V A L U E S (4,GeomFromText('LINESTRING(189412 252431,189631 259122)',-1),'Graeme Ave');

I N S E R T I N T O R O A D S _ G E O M ( I D , G E O M , N A M E ) V A L U E S (5,GeomFromText('LINESTRING(190131 224148,190871 228134)',-1),'Phil Tce');I N S E R T I N T O R O A D S _ G E O M ( I D , G E O M , N A M E ) V A 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.sql4.3.2. Usando o Carregador

O carregador de dados shp2pgsql converte arquivos ESRI Shape dentro do SQL de maneira correta para inserção em um banco de dados de PostGIS/PostgreSQL. O carregador tem vários modos operacionais distinguidos em linha de comando por parametro:-dExclui a tabela do banco de dados antes de criar uma nova tabela com os dados no arquivo Shape.

-aAcrescenta dados do arquivo Shape na tabela de banco de dados. Note que, para usar esta opção para carregar arquivos múltiplos, os arquivos têm que ter os mesmos atributos e mesmos tipos de dados.

-cCria uma nova tabela e insere dados do arquivo Shape. Este parametro é o modo padrão.

-pProduz somente o código do SQL da criação da tabela, sem adicionar nenhum dado real. Isto pode ser usado se você necessitar separar completamente as etapas da criação da tabela e do carregamento dos dados.

-DCria uma nova tabela e insere dados do arquivo Shape. Este parametro usa o "dump" formato PostgreSQL para os dados de produção e é muito mais rápido carregar que o padrão "insert" formato SQL. Use isto para quantidades grandes de dados. Use o formato do "dump" de PostgreSQL para os dados da saída. Isto pode ser combinado com - a, - o c e - d. É muito mais rápido carregar do que o default de inserção do formato SQL. Use isto para séries de dados muito grandes.

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

-kConserva identificadores de caso (coluna, schema e atributos). Note que os atributos em Shapefile são todos UPPERCASE.

-iConserva identificadores de caso (coluna, schema e atributos). Note que os atributos em Shapefile são todos UPPERCASE.

-wFormato de saída WKT, para o uso com versões de PostGISanteriores (0.x). Note que isto introduzirá trações 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 são convertidos da codificação especificada para UTF8. A saída resultante do SQL conterá um comando SET CLIENT_ENCODING para UTF8, de modo que o retorno estará apto para uma conversão de UTF8 para qualquer codificação de banco de dados que é configurado para usar internamente.Note que - a, - c, - d e - p é mutuamente exclusivo.

Uma sessão 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.sqlPodem ser feitos uma conversão e carga de tudo em um único comando, usando caminhos (pipes) como no UNIX:

# shp2pgsql shaperoads myschema.roadstable | psql -d roadsdb4.4. Recuperando Dados de GIS

Podem ser extraídos dados do banco de dados usando outro SQL ou o arquivo carregador/descarregador Shape. No item SQL discutiremos alguns dos operadores disponível para fazer comparações e selecionar tabelas espaciais.

4.4.1. Usando SQL

Os meios mais diretos de extrair dados do banco de dados são 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)

Porém, haverá restrições que será necessário reduzir o número de campos devolvido. No caso de restrições atributos-baseados, usar exatamente a mesma sintaxe de SQL como normal com uma tabela não espacial. No caso de restrições espaciais, os operadores seguintes são habilitados/completos:

&&Este operador diz se caixa delimitada de uma geometria sobrepõe caixa delimitada de outra.

~=Estes operadores testam se duas geometrias são geometricamente idênticas. 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 ingênuo, só testa se as caixas delimitadas para geometrias é o mesmo.

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

SELECT ID, NAMEFROM ROADS_GEOMWHERE 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 característica de comparação ou um GEOMETRY. Porém, quando você especifica um GEOMETRY que sua caixa delimitada será usada para a comparação.

SELECT ID, NAMEFROM ROADS_GEOMWHERE GEOM && GeomFromText('POLYGON((191232 243117,191232 243119,191234 243117,191232 243117))',-1);A "query" anterior usará a caixa delimitada do polígono para propósitos de comparação.

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 exibição. Usando um objeto "BOX3D" para a visualização, como demonstrado como segue:

SELECT AsText(GEOM) AS GEOMFROM ROADS_GEOMWHERE

GEOM && GeomFromText('BOX3D(191232 243117,191232 243119)'::box3d,-1);Note que o uso do SRID, especifica a projeção 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 básica é:

pgsql2shp [<options>] <database> [<schema>.]<table>pgsql2shp [<options>] <database> <query>As opções de linha de comando são:

-f <filename>Escreva uma saída 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 conexão do banco de dados.

-u <user>O nome do usuário para usar a conexão do banco de dados.

-g <geometry column>No caso de tabelas com colunas de geometria múltiplas, usar a coluna de geometria quando escrever o arquivo Shape.

-bUse um cursor binário. Isto fará a operação mais rápida, mas não trabalhará se qualquer atributo da NON-geometry na tabela faltar um molde ao texto.

-rModalidade pura. Não destrua o campo "gid", ou nomes da coluna "escape".

-dPara a compatibilidade inversa: escrever um arquivo shape 3-dimensional, quando descarregar do banco de dados de postgis anteriores (pre-1.0.0) - o padrão é escrever um arquivo Shape 2- dimensional neste caso). Inicie de postgis-1.0.0+, as dimensões são codificadas inteiramente.

4.5. Construindo Índices

Índice é o que faz usando um banco de dados espacial para um possível bancos de dados grandes. Sem indexação, nenhuma busca por característica 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 apóia três tipos de índices através do padrão: Índices B-Trees, índices R-Trees e Índices GiST.

• B-Trees são usadas para dados que podem ser ordenados ao longo de um eixo; por exemplo, números, cartas, datas. Dados de GIS não podem ser racionalmente ordenados ao longo de um eixo (o qual é maior, (0,0) ou (0,1) ou (1,0)?) assim indexação B-Tree é inútil para nós.

• R-Trees abre dados em retângulos, sub-retângulos, e sub-sub retângulos, etc. R-Trees são usados por alguns bancos de dados espaciais para indexar dados de GIS, mas uma implementação R-Tree PostgreSQL não é como uma implementação 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 estão 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. Além da da indexação de GIS, GiST é usada para acelerar buscas em todos os tipos de estruturas de dados irregulares (arranjos de números inteiros, dados espectrais, etc) que não são amenos a indexação 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 exercício computacionalmente intensivo: em tabelas ao redor de 1 milhão de linhas, em uma máquina de 300MHz Solaris, achamos que com a construção de um índice GiST leva aproximadamente 1 hora. Depois de construir um índice, é importante forçar PostgreSQL a coletar estatísticas de tabela que são usadas para otimizar planos de "query":

VACUUM ANALYZE [table_name] [column_name];

-- This is only needed for PostgreSQL 7.4 installations and belowSELECT UPDATE_GEOMETRY_STATS([table_name], [column_name]);

Índices GiST têm duas vantagens em relação a índices R-Tree em PostgreSQL. Em primeiro lugar, índices GiST são "null safe" (segurança nula), significando que eles podem indexar colunas que incluem valores nulos. Em segundo lugar, indices GiST apóiam o conceito de "lossiness" que é importante quando lidado com objetos de GIS com páginas 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 causarão índices R-Tree para falhar no processo de ser construído.

4.5.2. Usando Índices

Índices aceleram o acesso de dados: uma vez que o índice é construído, a transparência de planejamento de queries decide quando usar informação de índice para acelerar um plano de "query". Infelizmente, a "query" PostgreSQL não planeja otimizar bem o uso de índices de GiST, às vezes buscas que deveriam usar um índice espacial ao invés do padrão para uma busca sequencial da tabela inteira.

Se você acha que seus índices espaciais não estão 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 são coletadas sobre o número e distribuições dos valores em uma tabela, proporcionando para o operador de "query", melhor informação de tomada de decisões em torno do uso de índices P a r a i n s t a l a ç õ e s P o s t g r e S Q L 7 . 4 e a n t e r i o r e s , é r o d a d o : update_geometry_stats([table_name, column_name]) (agrupa estatísticas distribuições de valores em uma tabela) e VACUUM ANALYZE [table_name] [column_name] (agrupa estatísticas a respeito do número de valores em uma tabela). Começando com PostgreSQL 8.0 rodando VACUUM ANALYZE fará ambas as operações. Você deveria limpar regularmente seus bancos de dados - muitos DBAs PostgreSQL têm rodado "VACUUM" (vazio) com a carga máxima de trabalho "cron" desligada em bases regulares.

• Se não limpar seus trabalhos, você pode forçar o operador a usar informação 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 situação ENABLE_SEQSCAN atrás ligado, de maneira que outras queries o operador utilizará como normal. NotaA partir de versão 0.6, não deveria ser necessário forçar 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 parâmetro é 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 existência 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 funções espaciais estão disponíveis, e assegura-se que índices apropriados estão em lugar que aprovam bom desempenho.4.6.1. Vantagens dos Índices

Na construção de uma "query" é importante lembrarmos que os operadores baseados em saltos de caixa tal como &&, pode tirar proveito do índice espacial de GiST. Funções como distance () não pode usar o índice para otimizar suas operações. Por exemplo, a "query" seguinte seria bastante lenta em uma tabela grande:

SELECT the_geom FROM geom_tableWHERE distance( the_geom, GeomFromText( 'POINT(100000 200000)', -1 ) ) < 100Esta "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 distância 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 número de cálculos de distância requerido:

SELECT the_geom FROM geom_tableWHERE the_geom && 'BOX3D(90900 190900, 100100 200100)'::box3d AND distance( the_geom, GeomFromText( 'POINT(100000 200000)', -1 ) ) < 100Esta "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 número de linhas antes de calcular o resultado da função distance (). Note que a geometria de BOX3D que é usada dentro da operação && é uma caixa quadrada centrada no ponto original unidade 200 - esta é nossa "query box". O operador && usa o índice para reduzir rapidamente o resultado atribuído a essas geometrias, que têm salto de caixas que sobrepõem a "query box". Supondo que nossa "query box" é muito menor que as extensões da tabela de geometria inteira, isto reduzirá drasticamente o número de distância de cálculos que precisam ser feitos.

4.6.2. Exemplos de SQL Espacial

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

Column | Type | Description------------+-------------------+------------------- gid | integer | Unique ID name | character varying | Road Name the_geom | geometry | Location Geometry (Linestring)A definição 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 quilômetros?4.6.2.2. Qual é a área da cidade de São Paulo, em hectares?4.6.2.3. Qual é a maior municipalidade na província, por área?4.6.2.4. Qual é o tamanho completo das estradas contidas inteiramente dentro de cada municipalidade?4.6.2.5. Críe uma nova tabela com todas as estradas dentro da cidade de São Paulo.4.6.2.6. Qual é o tamanho em quilômetros, da Avenida dos Autonomistas, em OSASCO?4.6.2.7. Qual é o maior polígono da municipalidade que tem uma regra?

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

Voce pode responder esta questão 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 São Paulo, em hectares?

Esta "query" combina uma condição do atributo (no nome da municipalidade) com um cálculo espacial (da área):

postgis=# SELECT area(the_geom)/10000 AS hectares FROM bc_municipality WHERE name = 'SÃO PAULO'------------------ 32657.9103824927(1 row) 4.6.2.3.Qual é a maior municipalidade na província, por área?

Esta "query" traz uma medida espacial na condição 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", nós temos que calcular a área de cada polígono. Se nós fizéssemos isto muito, teria sentido acrescentar uma coluna da área à tabela, que nós poderíamos separadamente posicionar para o desempenho. Requisitando os resultados em um sentido descendente, e por eles que usam o comando de PostgreSQL "LIMIT", nós podemos facilmente extrair o maior valor, sem usar uma função 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 nós estamos trazendo junto dados de duas tabelas (que fazem juntar), mas estamos usando uma condição de interação espacial ("contained") como a melhor condição de juntar do que a aproximação 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 ráapida.

4.6.2.5.Crie uma nova tabela com todas as estradas dentro da cidade de São Paulo.

Este é um exemplo de um "overlay", que examina em duas tabelas e saídas em uma nova tabela, que consiste espacialmente "clipped" ou do corte de resultados. Ao contrário 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 análise:

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 = 'SÃO PAULO';4.6.2.6.Qual é o tamanho em quilômetros, 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 polígono 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 especificação do Servidor de Mapas na Internet OpenGIS .

• A homepage do Mapserver está em http://mapserver.gis.umn.edu/.

• A especificação de Web Map OpenGIS está em http://www.opengis.org/techno/specs/01-047r2.pdf.

4.7.1. Uso Básico

Usar PostGIS com Mapserver, você precisará conhecer como configurar o Mapserver que está além da extensão desta documentação. Esta seção cobrirá distribuição e detalhes de configuração de PostGIS específico.

Usar PostGIS com Mapserver, você precisará:

• Versão 0.6 ou posterior de PostGIS.

• Versão 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 máquina 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 opções que você deseje, inclusive a

opção de configuração "-with-postgis"

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

3. LAYER 4. CONNECTIONTYPE postgis 5. NAME "widehighways" 6. # Connect to a remote spatial database 7. CONNECTION "user=dbuser dbname=gisdatabase host=bigserver" 8. # Get the lines from the 'geom' column of the 'roads' table 9. DATA "geom from roads" 10. STATUS ON 11. TYPE LINE 12. # Of the lines in the extents, only render the wide highways 13. FILTER "type = 'highway' and numlanes >= 4" 14. CLASS 15. # Make the superhighways brighter and 2 pixels wide 16. EXPRESSION ([numlanes] >= 6) 17. COLOR 255 22 22 18. SYMBOL "solid" 19. SIZE 2 20. END 21. CLASS 22. # All the rest are darker and only 1 pixel wide 23. EXPRESSION ([numlanes] < 6) 24. COLOR 205 92 82 25. END 26. END 27. No exemplo acima, as diretivas de especificação do PostGIS são como segue:

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

CONNECTION A conexão de banco de dados é governada por uma 'connection string' do qual é um padrão de coleção de chaves e valores como este (com os valores padrões em <>):u s e r = < u s e r n a m e > p a s s w o r d = < p a s s w o r d > d b n a m e = < u s e r n a m e > hostname=<server> port=<5432>Um fio de conexão vazio ainda é válido, e nenhum dos pares de chave/valor podem ser omitido. No mínimo você se proverá do nome e usuário do banco de dados com c conexão.

DATA A forma deste parâmetro é "< column> from <tablename>" onde a coluna é a coluna espacial a ser traduzida no mapa.

FILTER O filtro deve ser uma string SQL válida correspondendo à lógica 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) construídos para qualquer das camadas que você estará desenhando.

29. CREATE INDEX [indexname] 30. ON [tablename] 31. USING GIST ( [geometrycolumn] GIST_GEOMETRY_OPS ); 32. Se você estivesse examinando suas camadas usando Mapserver você também

precisaria de um "oid index." Mapserver requer identificadores únicos para cada registro espacial ao fazer queries, e o módulo de Mapserver PostGIS usa o valor oid PostgreSQL para prover estes identificadores únicos. Um efeito colateral disto é que para fazer acesso randômico rápido de registros durante queries, um "oid index" é necessário. 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 EXPRESSÃO em meu arquivo de mapa, a condição 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 não está trabalhando para minha tabela de PostGIS de mesmos dados.4.7.2.3. A extração da camada de PostGIS é muito mais lenta do que a camada do arquivo Shape, é este normal?4.7.2.4. A extração da camada de PostGIS é fina, mas as queries são realmente lentas. O que está errado?

4.7.2.1.Quando eu uso uma EXPRESSÃO em meu arquivo de mapa, a condição nunca retorna como verdadeira, mesmo que eu saiba os valores existentes em minha tabela.

Ao contrário dos arquivos Shape, os nomes de campo de PostGIS têm que ser referenciado nas expressões usando um caso mais baixo.

EXPRESSION ([numlanes] >= 6)4.7.2.2.O FILTRO que eu me uso para meus arquivos Shape não está trabalhando para minha tabela de PostGIS de mesmos dados.

Ao contrário dos arquivos Shape, filtros para camadas de PostGIS usa a sintaxe SQL (são adicionados à declaração do SQL o conector de PostGIS que extrai camadas em Mapserver).

FILTER "type = 'highway' and numlanes >= 4"4.7.2.3.A extração 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 conexões do banco de dados, em transformações de dados e trânsito de dados entre o banco de dados e o Mapserver.

Se você estiver encontrando problemas substanciais de desempenho, é provável que você não tem a configuração, um índice espacial em sua tabela.

postgis# CREATE INDEX geotable_gix ON geotable USING GIST ( geocolumn );postgis# SELECT update_geometry_stats(); -- For PGSQL < 8.0postgis# VACUUM ANALYZE; -- For PGSQL >= 8.04.7.2.4.A extração da camada de PostGIS é fina, mas as queries são realmente lentas. O que está errado?

Para que as "queries" sejam rápidas, 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 cláusula "USING UNIQUE" em sua linha de dados:

DATA "the_geom FROM geotable USING UNIQUE gid"Se sua tabela não tiver uma coluna original explícita, 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ê não declarar um, assim que reforçar sua velocidade da "query", um problema de construção em índice no valor "oid" de sua tabela espacial.

postgis# CREATE INDEX geotable_oid_idx ON geotable (oid);4.7.3. Uso Avançado

A cláusula USING pseudo-SQL é usada para acrescentar alguma informação para ajudar a entender os resultados mapserver de maior complexidade das queries. Mais especificamente, quando uma visão ou um subselect é usado como tabela fonte (a uso certo de "FROM" em uma definição de DATA) é mais difícil para mapserver que automaticamente determina um identifi- cador único para cada linha e também o SRID para a tabela. A cláusula USING pode proporcionar para mapserver estes dois tipos de informação 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 esboça queries. Normalmente, usaria o oid como identificador único, mas views e subselects não 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 própria tabela para este propósito, ou nenhuma coluna que é garantido ser único para o resultado final.

A declaração USING também pode ser muito útil para declarações de dados simples, se você esboçando "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. Porém, com a cláusula USING, é possível dizer que para o mapserver usa chave primária em suas próprias tabelas como o identificador de "queries" de mapa, e então necessariamente não ter o mais longo índice adicional.

Nota

Examinando um mapa (Quering a Map) é a ação de "clicking" em um mapa e questionar informações a respeito de características de mapa naquele local. Não confunda "map queries" com o "query" SQL em uma definição 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 atrás do mapserver. Normalmente é possível encontrar esta informação dentro da tabela "geometry_columns" no banco de dados de PostGIS, porém, isto não é possível para tabelas que são criadas superficialmente como "view"s e "subselects". Assim o USING SRID= opção que permite o correto SRID ser especificado na definição DATA.

Aviso

O parceiro para camadas de PostGIS Mapserver é razoavelmente primitivo, e é caso sensível em algumas áreas. Tenha cuidado para assegurar-se de que todos as palavras chaves do SQL e todas suas cláusulas USING estejam em caso superior, e que sua cláusula USING UNIQUE precede sua cláusula "USING SRID.

4.7.4. Exemplos

Começamos com um exemplo simples e que levanta nosso trabalho. Considere a seguir a definição 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 ENDENDEsta camada exibirá todas as geometrias de estrada na tabela de estradas com linhas pretas.

Agora dizemos que nós queremos mostrar só as rodovias até que nós conseguirmos fechar a câmara em pelo menos 1:100000 balança – as próximas duas camadas obterão 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 ENDEND

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 ENDENDA primeira camada é usada quando a balança é maior que 1:100000, e exibe só as estradas de tipo "highway" (rodovia) com linhas pretas. A opção FILTER causa só estradas de TIPO "highway" (rodovia) a ser exibida.

A segunda camada é usada quando a balança é menos que 1:100000, e exibirá rodovias como linhas vermelhas grossas, e outras estradas como linhas pretas regulares.

Assim, nós fizemos um par de coisas interessantes que usam só funcionalidade de mapserver, mas nossa declaração DATA SQL permaneceu simples. Suponha que o nome da estrada é armazenado em outra tabela (por qualquer razão) e nós 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 F R O M r o a d s L E F T J O I N r o a d _ n a m e s O N r o a d s . r o a d _ n a m e _ i d = 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 ENDENDEsta camada da anotação adiciona etiquetas verdes a todas as estradas quando a escala começa para baixo a 1:20000 ou menos. Demonstra também como usar um "join" SQL em uma definição 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 representações de texto ou usam os objetos de extensão JDBC empacotados com PostGIS. A fim usar os objetos de extensão, 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 topológico específico (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 extensão fornece uma referência para as várias funções do assessor dos dados nos objetos geométricos.

4.9. Clientes C (libpq)

...

4.9.1. Cursores de Texto

...

4.9.2. Cursores Binários

...

Capítulo 5. Tipos de Performance

5.1. Tabelas pequenas de geometrias grandes

5.1.1. Descrição de problemas

As versões atuais de PostgreSQL (incluindo 8.0) sofrem de uma fraqueza do otimizador da "query" a respeito das tabelas "TOAST". As tabelas "TOAST" são um tipo "extension room" usado para armazenar (no sentido do tamanho dos dados) os valores que não cabem em páginas de dados normais(como textos longos, imagens ou geometrias complexas com lotes de vertices), vejam http://www.postgresql.org/docs/8.0/static/storage-toast.html, para mais informações.

O problema aparece se acontecer de ter uma tabela com geometrias de preferência grandes, mas não com muitas linhas (como uma tabela que contem os limites de todos os países europeus em resolução elevada). Então a própria tabela é pequena, mas usa lotes de espaço do "TOAST". Neste exemplo, a própria tabela teve aproximadamente 80 linhas e usa somente 3 páginas de dados, mas a tabela "TOAST" usou 8225 páginas.

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 páginas e 80 linhas. Estima que uma varredura seqüencial em uma tabela tão pequena é muito mais rápida 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 páginas TOAST, também.

Veja se a permissão deste erro, use o comando "EXPLAIN ANALYZE" do postgresql. Para mais informação e os detalhes técnicos, 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 estão tentando resolver esta edição fazendo o estimativa de "queries" TOAST-aware. Agora, estão aqui duas questões a respeito deste trabalho:

O primeiro a cerca deste trabalho deve forçar o operador da "query" a usar o índice. Emita "SET enable_seqscan TO off;" ao usuário antes de emitir a "query". Isto força basicamente o operador da "query" a evitar varreduras seqüenciais sempre que possível. Assim usa o índice de GIST como usual. Mas este "flag" tem que ser ajustado em cada conexão, e faz com que o operador da "query" faça estimações 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 seqüencial tão rápida 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 estão 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ê também pode modificar sua aplicação para manter a coluna do bbox atual ou rodar uma "query" do UPDATE acima depois de cada modificação.

5.2. CLUSTERing em índices da geometria

Para as tabelas que são 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 critérios do índice, rendendo duas vantagens do desempenho: porque a escala do índice faz a varredura, o número 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 são espalhadas ao longo de poucas páginas dos dados. (procure ler a documentação do comando "CLUSTER" do manual de PostgreSQL.)

Entretanto, atualmente PostgreSQL não 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 valuesHINT: 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 deficiência adicionando um constraint "not null" à tabela:

lwgeom=# ALTER TABLE my_table ALTER COLUMN the_geom SET not null;ALTER TABLENaturalmente, isto não trabalhará se você de fato precisar de valores NULL em sua coluna geométrica. Adicionalmente, você deve usar o método acima para adicionar o "constraint", usando um CHECK "constraint" como "ALTER TABLE blubb ADD CHECK (geometria não é null);" não trabalhará.

5.3. Evitando a conversão da dimensão

Às vezes,acontece de ter os dados 3D ou 4D em sua tabela, mas sempre acessa-a usando as funções asText() ou asBinary() de OpenGIS que só sai geometrias 2D. Fazem isto internamente chamando a função force_2d(), que introduz um "overhead" significante para geometrias grandes. Para evitar estas "overhead", pode ser praticado "pre-drop" naquelas dimensões 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 dimensão 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 porções confinando o UPDATE a uma parte da tabela através da cláusula WHERE e sua chave primária ou uns outros critérios praticáveis, e rodar um simples "VACUUM;" entre seus UPDATEs. Isto reduz drasticamente a necessidade para o espaço em disco provisório. Adicionalmente, se misturar dimensões geométricas, restringindo o UPDATE por "WHERE dimension(the_geom)>2" pula reescrever da geometria que já estão no 2D.

Capítulo 6. Referências PostGIS

As funções descritas abaixo são as quais o usuário de PostGIS utiliza. Existem outras funções que são requeridas como suporte de funções aos objetos de PostGIS que não são de uso para um usuário comum.

6.1. Funções de OpenGIS

6.1.1. Funções de Gerenciamento

AddGeometryColumn(varchar, varchar, varchar, integer, varchar, integer)Sintaxe: AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>). Acrescenta uma coluna geométrica a uma tabela existente de atributos. O dbname é o nome do exemplo de banco de dados. O srid devem ser uma referência de valor inteiro a uma entrada dentro da tabela SPATIAL_REF_SYS. O tipo deve ser uma string maiúscula que corresponde ao tipo de geometria , eg, ' POLÍGONO' ou ' MULTILINESTRING '.

DropGeometryColumn(varchar, varchar, varchar)Sintaxe: DropGeometryColumn(<schema_name>, <table_name>, <column_name>). Remove uma coluna geométrica 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 construção de caixas de salto para "queries".

6.1.2. Funções 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 módulo de GEOSOGC SPECs2.1.1.2

Disjoint(geometry,geometry)Retorna 1 (VERDADEIRO) se esta Geometria é que "spatially disjoint" (desloca espacialmente) de outra geometria. Executado pelo módulo de GEOS Não chame "GeometryCollection" como um argumento NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean (condição verdadeira ou falsa), e não 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 módulo de GEOS Não chame GeometryCollection como um argumento NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean (condição verdadeira ou falsa), e não 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 módulo de GEOS Não chame GeometryCollection como um argumento NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean (condição verdadeira ou falsa), e não 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) não vazio

Crosses(geometry,geometry)Retorna 1 (VERDADEIRO) se esta geometria "spatially crosses" de outras geometrias. Executado pelo módulo de GEOS Não chame GeometryCollection como um argumento

NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean (condição verdadeira ou falsa), e não 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 módulo de GEOSNão chame GeometryCollection como um argumento NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean, e não 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" (sobrepõe espacialmente).Executado pelo módulo de GEOS Não chame GeometryCollection como um argumento NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean, e não 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 módulo de GEOS Não chame GeometryCollection como um argumento NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean, e não 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 módulo de GEOS Não chame GeometryCollection como um argumento NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean, e não 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 interesecção entre o interior, o limite e o exterior de duas geometrias como especificado pelos valores em umaintersectionPatternMatrix. Executado pelo módulo de GEOS Não chame GeometryCollection como um argumento NOTA: esta é a versão "allowable" (permissível) que retorna uma boolean, e não 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 módulo de GEOS Não chame GeometryCollection como um argumento Não em especificação OGC, mas sub-entendido. veja s2.1.13.2

6.1.3. Funções de Processamento da Geometria

Centroid(geometry)Retorna o identificador de centro da geometria como um ponto. Computação será mais precisa que se executado pelo módulo de GEOS (ocorreu em tempo de compilação).

Area(geometry)Retorna a área da geometria, se é um polígono ou multi-polígono.

Length(geometry)O comprimento desta curva em sua referência espacial associada. sinônimo para length2d () OGC SPEC 2.1.5.1

PointOnSurface(geometry)Retorna um ponto garantido estar na superfície 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 seção 3.12.3.2 da OGC SPEC. Porque o resultado desta função é um fechamento, e conseqüentemente fecharam topologicamente, o limite resultante pode ser representado usando representação de primitivas geométricas como discutido na OGC SPEC, seção 3.12.2.

Executado pelo módulo de GEOSOGC 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. Cálculos estão em um Spacial Reference System desta geometria. O terceiro parametro opcional atribui o número de segmentos usados para aproximar um quarto de círculo (padrão para 8).Executado pelo módulo de GEOS Não 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 módulo de GEOS OGC SPECs2.1.1.3

Intersection(geometry,geometry)Retorna uma geometria que representa a interseção atribuída do ponto das Geometrias. Executado pelo módulo de GEOS Não chame GeometryCollection como um argumento OGC SPEC s2.1.1.3

SymDifference(geometry A, geometry B)Retorna uma geometria que representa a diferença simétrica atribuída do ponto da geometria A com geometria B.Executado pelo módulo de GEOS Não chame GeometryCollection como um argumento OGC SPEC s2.1.1.3

Difference(geometry A, geometry B)Retorna uma geometria que representa a diferença atribuída do ponto da geometria A com geometria B. Executado pelo módulo de GEOS Não chame GeometryCollection como um argumento OGC SPEC s2.1.1.3

GeomUnion(geometry,geometry)Retorna uma geometria que representa a união atribuída do ponto das geometrias.Executado pelo módulo de GEOS Não chame GeometryCollection como um argumentoNOTA: este é renomeado de "union" porque união é uma palavra reservada SQL OGC SPEC s2.1.1.3

GeomUnion(geometry set)Retorna uma geometria que representa a união atribuída do ponto de todas as geometrias em dado conjunto. Executado pelo módulo de GEOS Não chame GeometryCollection no conjunto de argumentoNada definido em OGC SPEC

MemGeomUnion(geometry set)Mesmo que o anterior, só que com "memory-friendly" (memória-amigável - usa menos memória e mais tempo de processamento)

6.1.4. Assessores Geométricos

AsText(geometry)Retorna a representação 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 codificação endian do usuário em que o banco de dados está funcionando. É utilizado em cursores binários para extrair dados do banco de dados sem convertê-la a uma representação string.O G C S P E C s 2 . 1 . 1 . 1 - a l s o s e e a s B i n a r y ( < g e o m e t r y > , ' X D R ' ) a n d asBinary(<geometry>,'NDR')

SRID(geometry)Retornos de números inteiros SRID do sistema de referência espacial da geometria. OGC SPEC s2.1.1.1

Dimension(geometry)A dimensão inerente deste objeto de geometria, que deve ser menor ou igual à dimensão coordenada. OGC SPEC s2.1.1.1 - retorna 0 para pontos, 1 para linhas, 2 para polígonos, e a maior dimensão dos componentes de um GEOMETRYCOLLECTION.

select dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0)');dimension-----------1 Envelope(geometry)Retorna um polígono representando a caixa delimitada da geometria. OGC SPEC s2.1.1.1 - A caixa delimitada mínima para esta geometria, retornou como uma geometria. O polígono 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 também.

IsEmpty(geometry)Retorna 1 (VERDADEIRO) se esta geometria é a geometria vazia. Se for verdade, então 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 não tem nenhum ponto geométrico anômalo, como intersecção própria ou tangência própria.Executado pelo módulo de GEOS OGC SPECs2.1.1.1

IsClosed(geometry)Retornos verdadeiros do começo de geometria e pontos finais são coincidentes.

IsRing(geometry)Retorna 1 (VERDADEIRO) se esta Curva está fechada (StartPoint () = EndPoint ()) e esta Curva é simples (não 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 número de geometrias. Caso contrário, retorna NULO.

GeometryN(geometry,int)Retorna a enésima geometria se a geometria é uma GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING ou MULTIPOLYGON. Caso contrário, retorna NULO.

Nota

Indice é 1-based como para especificações OGC desde a versão 0.8.0. As versões anteriores executaram esta como 0-based preferivelmente.

NumPoints(geometry)Encontra e Retorna o número de pontos na primeira linha na geometria. Retorna NULO se não há nenhuma linha na geometria.

PointN(geometry,integer)Retorna o enésimo ponto na primeira linha na geometria. Retorna NULO se não há nenhuma linha na geometria.

ExteriorRing(geometry)Retorna o anel exterior do primeiro polígono na geometria. Retorna NULO se não há nenhum polígono na geometria.

NumInteriorRings(geometry)Retorna o número de anéis interiores do primeiro polígono na geometria. Retorna NULO se não há nenhum polígono na geometria.

NumInteriorRing(geometry) Sinomimo para NumInteriorRings (geometry). As especificações OpenGIS são ambiguas sobre o nome da função exata, assim que fornecemos ambas as escritas.InteriorRingN(geometry, integer)Retorna o enésimo anel interior do polígono na geometria. Retorna NULO se não há nenhum polígono na geometria ou o N dado é fora da escala(1 baseado).

Nota

Indice is 1-based como especificações para OGC desde a versão 0.8.0. As versões 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 não há nenhum ponto na geometria.

Y(geometry)Encontra e retorna a coordenada de Y do primeiro ponto na geometria. Retorna NULO se não há nenhum ponto na geometria.

Z(geometry)Encontra e retorna a coordenada de Z do primeiro ponto na geometria. Retorna NULO se não há nenhum ponto na geometria.

M(geometry)Retorna uma coordenada M do ponto, ou NULO se não disponível. 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 não é (ainda) parte das especificações de OGC, mas é listada aqui para completar a lista da função do extrator da coordenada do ponto.

6.1.5. Construtores Geométricos

GeomFromText(text,[<srid>])Converte uma geometria de WKT com o dado SRID.OGC SPEC 3.2.6.2 - a opção SRID está de conformidade.

PointFromText(text,[<srid>])Faz uma geometria de WKT com o dado SRID. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um Ponto

LineFromText(text,[<srid>])

Faz uma geometria de WKT com o dado SRID. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é uma Linha

LinestringFromText(text,[<srid>])Faz uma geometria de WKT com o dado SRID. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é uma Linha

PolyFromText(text,[<srid>])Faz uma Geometria de WKT com o SRID dado . Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um Polígono

PolygonFromText(text,[<srid>])Faz uma geometria de WKT com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um Polígono

MPointFromText(text,[<srid>])Faz uma geometria de WKT com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um MULTIPOINT

MLineFromText(text,[<srid>])Faz uma geometria de WKT com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um MULTILINESTRING

MPolyFromText(text,[<srid>])Faz uma Geometria de WKT com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um MULTIPOLYGON

GeomCollFromText(text,[<srid>])Faz uma geometria de WKT com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um GEOMETRYCOLLECTION

GeomFromWKB(bytea,[<srid>])Faz uma geometria de WKB com o SRID dado. Caso SRID não der,padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade.

GeometryFromWKB(bytea,[<srid>])Faz uma geometria de WKB com o SRID dado. Caso SRID não der,padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade.

PointFromWKB(bytea,[<srid>])

Faz uma geometria de WKB com o SRID dado. Caso SRID não der,padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um PONTO

LineFromWKB(bytea,[<srid>])Faz uma geometria de WKB com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um LINESTRING

LinestringFromWKB(bytea,[<srid>])Faz uma geometria de WKB com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um LINESTRING

PolyFromWKB(bytea,[<srid>])Faz uma geometria de WKB com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um POLÍGONO

PolygonFromWKB(bytea,[<srid>])Faz uma geometria de WKB com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade.

MPointFromWKB(bytea,[<srid>])Faz uma geometria de WKB com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um MULTIPOINT

MLineFromWKB(bytea,[<srid>])Faz uma geometria de WKB com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um MULTILINESTRING

MPolyFromWKB(bytea,[<srid>])Faz uma Geometria de WKB com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um MULTIPOLYGON

GeomCollFromWKB(bytea,[<srid>])Faz uma Geometria de WKB com o SRID dado. Caso SRID não der, padroniza-se -1.OGC SPEC 3.2.6.2 - opção SRID está de conformidade. Mostra um erro se o WKT não é um GEOMETRYCOLLECTION

BdPolyFromText(text WKT, integer SRID)Construir um Polygon dada uma coleção arbitrária de linhas fechadas como uma representação do texto MultiLineString. Lança um erro se WKT não for um MULTILINESTRING. Lança um erro se a saída for um MULTIPOLYGON; usa BdMPolyFromText neste caso ou vê BuildArea() para um acesso específico de postgis.

OGC SFSQL 1.1 - 3.2.6.2Disponibilidade: 1.1.0 - requer GEOS >= 2.1.0.

BdMPolyFromText(text WKT, integer SRID)Construir um MultiPolygon dada uma coleção arbitrária de linha fechada como uma respresentação do texto de MultiLineString. Lança um erro se WKT não for um MULTILINESTRING. Força saída MULTIPOLYGON mesmo quando o resultado é composto somente por um único POLYGON; usa BdPolyFromText se você estiver certo que um único POLYGON resultará da operação ou veja BuildArea() para um acesso específico de postgis.OGC SFSQL 1.1 - 3.2.6.2Disponibilidade: 1.1.0 - requer GEOS >= 2.1.0.

6.2. Extensões de Postgis

6.2.1. Funções de Gerenciamento

DropGeometryTable([<schema_name>], <table_name>)Destrói uma tabela e todas suas referências nas colunas geométricas. Nota: usa o current_schema() em instalações do pgsql schema-aware se o schema não for fornecido.

UpdateGeometrySRID([<schema_name>], <table_name>, <column_name>, <srid>)Atualiza o SRID de todas as características em uma coluna da geometria que atualiza confinamente e referência nas colunas geométricas. Nota: usa o current_schema() em instalações do pgsql schema-aware se o schema não for fornecido.

update_geometry_stats([<table_name>, <column_name>])Atualiza estatisticas sobre tabelas espaciais para o uso pelo operador da seleção. Precisará também rodar o "VACUUM ANALYZE [ table_name ] [ column_name ]" para as estatisticas que recolhem o processo para estar completo. Nota: começando com PostgreSQL 8.0 que analisando estatisticas é automaticamente executado rodando "VACUUM ANALYZE".

postgis_version()Retorna o número de versão de PostGIS e opções de tempo de compilação. Nota: Antes da versão 1.1.0 esta era uma função procedural, assim possivelmente não estará retornando a informação exata (em caso dos melhoramentos incompletos do banco de dados).

postgis_lib_version()Retorna o número de versão da biblioteca de PostGIS.Disponível: 0.9.0

postgis_lib_build_date()Retorna data da construção da biblioteca PostGIS.Disponível: 1.0.0RC1

postgis_script_build_date()

Retorna data da construção de scripts PostGIS.Disponível: 1.0.0RC1

postgis_scripts_installed()Retorna a versão do script postgis instalado neste banco de dados. Nota: Se a saída desta função não combinasse com a saída de postgis_scripts_released() provavelmente faltou promover corretamente um banco de dados existente. Veja a seção Upgrading para mais informações. Disponibilidade: 0.9.0

postgis_scripts_released()Retorna o número da versão do script de lwpostgis.sql liberado com o instalado na biblioteca do postgis. Nota: Começar com versão 1.1.0 esta função, retorna o mesmo valor do postgis_lib_version(). Conservar para a compatibilidade inversa. Disponível: 0.9.0

postgis_geos_version()Retorna o número da versão da biblioteca de GEOS ou NULO se o suporte a GEOS não for permitida.Disponível: 0.9.0

postgis_proj_version()Retorna o número da versão da biblioteca PROJ4 ou NULo se o suporte a PROJ4 não for permitida.Disponível: 0.9.0

postgis_uses_stats()Retorna verdadeiro se o uso do STATS for permitido,caso contrário retorna falso.Disponível: 0.9.0

postgis_full_version()Retorna a versão postgis completa e constrói informações de configuração.Disponível: 0.9.0

6.2.2. Operadores

A &< BO operador "&<" retorna verdadeiro se a caixa delimitada sobrepor o próprio A ou está à esquerda da caixa delimitada do próprio B.

A &> BO operador "&>" retorna verdadeiro se a caixa delimitada sobrepor o próprio A ou está à direita da caixa delimitada do próprio B.

A << BO operador "<<" retorna verdadeiro se a caixa delimitada for estritamente à esquerda da caixa delimitada do próprio B.

A >> B

O operador ">>" retorna verdadeiro se o salto de caixa do próprio A for estritamente à direita do salto de caixa do próprio B.

A &<| BO operador "&<|" returna verdadeiro se a caixa delimitada do próprio A for abaixo da caixa delimitada do próprio B.

A |&> BO operador "|&>" returna verdadeiro se a caixa delimitada de A for acima da caixa delimitada do próprio B.

A <<| BO operador "<<|" retorna verdadeiro se a caixa delimitada de A for estritamente abaixo da caixa delimitada do próprio B.

A |>> BO operador "|>>" retorna verdadeiro se a caixa delimitada A for esttritamente acima da caixa delimitada do próprio B.

A ~= BO operador "~ = " é o operador "same as". Testa igualdade geométrica atual de duas características. Assim, se A e B são de mesma característica, o operador retorna verdadeiro.

A @ BO operador "@ " retorna verdadeiro se a caixa delimitada do próprio A estiver completamente contido na caixa delimitada do próprio B.

A ~ BO operador "~" retorna verdadeiro se a caixa delimitada estiver completamente contida na caixa delimitada do próprio B.

A && BO operador "&& " é o operador sobreposto. Se a caixa delimitada do prórpio A sobrepor a caixa delimitada do próprio B, o operador retorna verdadeiro.

6.2.3. Funções de Medida

area2d(geometry)Retorna a área da geometria, se é um polígono ou multi-polígono.

distance_sphere(point, point)Retorna a distância linear nos medidores entre dois pontos de lat/lon. Usa uma terra e um raio esféricos 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 distância linear entre dois pontos latitude/longitude dando um esferóide particular. Veja a explicação de esferóides 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 reprojecções O ellipsoid é um tipo de banco de dados separado e pode ser construído como segue:

SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>]

Outra forma:

SPHEROID["GRS_1980",6378137,298.257222101]

Um exemplo de cálculo poderia ser:

SELECT length_spheroid( geometry_column, 'SPHEROID["GRS_1980",6378137,298.257222101]' )FROM geometry_table;

length3d_spheroid(geometry,spheroid)Calcula o comprimento de uma geometria em um ellipsoid, pegando a elevação dentro da conta. É exatamente igual a length_spheroid excluindo as coordenadas verticais (expressado nas mesmas unidades como os spheroid axes) são usados para calcular a soma de deslocamento da distância extra vertical.

distance(geometry, geometry)Retorna a distância menor entre duas geometrias..

max_distance(linestring,linestring)Retorna a distância maior entre duas linhas de string.

perimeter(geometry)Retorna o perímetro da geometria, se é um polígono ou multi-polígono.

perimeter2d(geometry)Retorna o perímetro 2-dimensional da geometria, se é um polígono ou multi-polígono.

perimeter3d(geometry)Retorna o perímetro 3-dimensional da geometria, se é um polígono ou multi-polígono.

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. Saídas Geométricas

AsBinary(geometry,{'NDR'|'XDR'})Retorna a geometria no formato OGC "well-known-bynary", usando "little-endian" (NDR) ou big-endian (XDR) . É utilizado em cursores binários para extrair dados do banco de dados sem convertê-la a uma representação 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 codificação "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 número máximo dos dígitos decimais usados na saída ("default" para 15). Pontos de geometrias serão 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 número máximo dos dígitos significativos usados na saída (defaults para 15).

AsKML(geometry, [precision])Retorna a geometria como um elemento KML. O segundo argumento pode ser usado para reduzir o número máximo de dígitos significativos usados na saída ( defaults para 15).

6.2.5. Construtores Geométricos

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 geométrico.

MakePointM(<x>, <y>, <m>)Cria um ponto 3dm geométrico.

MakeBox2D(<LL>, <UR>)Cria um BOX2D definido dados os pontos geométricos.

MakeBox3D(<LLB>, <URT>)Cria um BOX3D definido dados os pontos geométricos.

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 geométricos.

LineFromMultiPoint(multipoint)Cria um LineString de uma geometria MultiPoint.

MakePolygon(linestring, [linestring[]])Cria um polígono formado pela proteção dada e pelo conjunto de regras. Poderá construir um conjunto de geometria usando Accum. Entradas geométricas 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 não forem forma de polígonos, NULO é retornado. Veja também BdPolyFromText e BdMPolyFromText - envoltórios para esta função com padrão de interface OGC. Disponibilidade: 1.1.0 - requer GEOS >= 2.1.0.

Polygonize(geometry set)Agregado. Cria um GeometryCollection que contem os polígonos possíveis formados de componentes de linhas de trabalho de um conjunto de geometrias. Disponível 1.0.0RC1 - requer GEOS >= 2.1.0.

Collect(geometry set)Esta função retorna um GEOMETRYCOLLECTION ou um objeto MULTI de um conjunto de geometrias. A função collect() é uma função "agregada" na terminologia de PostgreSQL. Isso significa que operadores em listas de dados, na mesma maneira de funções 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 função retorna uma geometria, sendo uma coleção de duas saídas geométricas. O tipo de saída pode ser um MULTI* ou um GEOMETRYCOLLECTION.

Dump(geometry)Esta é uma função 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 geométrica como geom. Quando a entrada geométrica é uma coleção ou multi retornará um registro para cada um dos componentes da coleção, e o caminho expressará a posição do componente dentro da coleção.

Disponibilidade: PostGIS 1.0.0RC1. Requer PostgreSQL 7.3 ou superiores.

DumpRings(geometry)Esta é uma função 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 polígono, contem um único elemento: 0 para o escudo, número do furo para regras. O campo do “geom” contem o anel correspondente como um polígono.

Disponibilidade: PostGIS 1.1.3. Requer PostgreSQL 7.3 ou superiores.

6.2.6. Editores Geométricos

AddBBOX(geometry)Adiciona caixa delimitada à geometria. Isto fará na caixa delimitada baseada em seleções mais rápidas, mas aumentará o tamanho da geometria.

DropBBOX(geometry)Destrói a caixa delimitada da geometria. Isto reduz o tamanho da geometria, mas as caixa delimitada baseada em seleções mais lentas.

AddPoint(linestring, point, [<position>])Adiciona um ponto a um LineString na posição <pos> (índice 0-based). O terceiro parâmetro pode ser omitido ou ajustado a -1.

RemovePoint(linestring, offset)Remove ponto de uma linestring. Offset é 0-based.

Disponível: 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.

Disponível: 1.1.0

Force_collection(geometry)Converte a geometria em um GEOMETRYCOLLECTION. É utilizado para simplificar a respresentação de WKB.

Force_2d(geometry)Força as geometrias dentro de um "2-dimensional mode" (modo bi-dimensional) de forma que todas as representações de saída só terão as coordenadas X e Y. É utilizado para forçar a saída OGC-compliant (desde que OGC especifica somente geometrias 2-D).

Force_3dz(geometry), Force_3d(geometry)Força as geometrias dentro de um modo XYZ.

Force_3dm(geometry)

Força as geometrias dentro de um modo XYM.

Force_4d(geometry)Força 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 parâmetro 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 trasformação 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 transformação

/ a b c xoff \ | d e f yoff | | g h i zoff | \ 0 0 0 1 / e os vertices são 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 funções de tradução / escala abaixo são expressados através de uma transformação affine.

Disponível: 1.1.2.

Affine(geometry, float8, float8, float8, float8, float8, float8)Aplica uma transformação 2d affine para a geometria. A chamada

Affine(geom, a, b, d, e, xoff, yoff) representa a matriz da transformação

/ 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 são transformados como segue:

x' = a*x + b*y + xoff y' = d*x + e*y + yoff z' = z Este método é um subcaso do método 3D acima.

Disponível: 1.1.2.

Translate(geometry,float8,float8,float8)

Traduz a geometria a um novo local que usa os parâmetros numéricos 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 parâmetros. Isto é: scale (geom, Xfactor, Yfactor, Zfactor).

Disponível: 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.

Disponível: 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).

Disponível: 1.1.0.

Reverse(geometry)Retorna a geometria com a ordem do vértice invertida.

ForceRHR(geometry)Força polígono da coleção a obedecer Right-Hand-Rule.

Simplify(geometry, tolerance)Retorna uma versão "simplified" da geometria dada usando o algoritmo de Douglas-Peuker. Desta forma, fará realmente algo com (multi)linhas e (multi)polígonos, mas você pode estar seguro de chama-lo com qualquer tipo da geometria. Desde que a simplificação ocorra em uma base "object-by-object" e você pode também alimentar um GeometryCollection a esta função. 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 à definição de grade por seu tamanho de origem e de célula. Remove os pontos consecutivos que caem na mesma célula, retornando eventualmente o NULO, se os pontos da saída não forem bastante para definir uma geometria do tipo dado. As geometrias derrubadas em uma coleção são desfeitas dela.

Nota

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

Nota

Antes da liberação 1.1.0 esta função retornou sempre uma geometria 2d . Começando por 1.1.0 a geometria retornada terá mesmo dimensionalidade que a entrada, uma com dimensão mais elevada valor não tocado. Usar a versão pegando um segundo argumento de geometria para definir todas as dimensões da grade.

Disponível: 1.0.0RC1

SnapToGrid(geometry, geometry, sizeX, sizeY, sizeZ, sizeM)Pega todos os pontos de entrada da geometria a definição de grade por seu tamanho de origem (o segundo argumento, deve ser um ponto) e por seu tamanho de célula. Especificar 0 como tamanho para alguma dimensão que você não quiser pegar para uma grade.

Disponível: 1.1.0

Segmentize(geometry, maxlength)Retorna uma geometria modificada que não tem nenhum segmento mais por muito tempo então à distância dada. Os pontos interpolados terão os valores de Z e de M (se necessário) ajustados a 0. A computação da distância é executada em somente em 2d.

LineMerge(geometry)Retorna um (ou conjunto) LineString(s) formado por unindo a linha de trabalho (linework) constituinte da entrada.

Disponível: 1.1.0 - requer GEOS >= 2.1.0

6.2.7. Referência 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 fração do total 2d length o ponto tem que ser encontrado.Veja line_locate_point() para computar a posição da linha o mais próximo a um Point.

Nota

Desde a liberação 1.1.1 esta função tambem interpola valores M e Z (quando presente), quando que as liberações anteriores ajustam-nas para 0.0.

Disponível: 0.8.2

line_substring(linestring, start, end)

Retorna um linestring sendo um substring da entrada uma que começa e que termina nas frações do total 2d length. Os segundo e terceiro argumentos são 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 posição da linha o mais próximo a um ponto.

Nota

Desde a liberação 1.1.1 esta função também interpola valores M e Z (quando presente), quando que as liberações anteriores ajustam-nas aos valores não especificados.

Disponível: 1.1.0

line_locate_point(LineString, Point)

Retorna um float entre 0 e 1 que representam a posição do ponto o mais próximo em LineString para o dado Point, como uma fração do total tamanho 2d line. Você pode usar a posição retornada para extrair um Point (line_interpolate_point) ou um substring (line_substring). Disponível: 1.1.0

locate_along_measure(geometry, float8)

Retorna um valor derivado da coleção da geometria com elementos que combinam a medida especificada. Os elementos Polygonal não são suportados. Semântica é especificado por: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing Meeting Disponível: 1.1.0

locate_between_measures(geometry, float8, float8)Retorna um valor derivado da coleção da geometria com elementos que combinam a escala especificada das medidas inclusive. Os elementos Polygonal não são suportados.Semântica é especificado por: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing MeetingDisponível: 1.1.0

6.2.8. Variado

Summary(geometry)Retorna um resumo de texto dos conteúdos da geometria.

box2d(geometry)Retorna um BOX2D representando as extensões máximas da geometria.

box3d(geometry)

Retorna um BOX3D representando as extensões máximas da geometria.

extent(geometry set)A função extent() é uma função "aggregate" (agregada) na terminologia de PostgreSQL. Isso significa que os operadores em listas de dados, fazem o mesmo caminho que as funções sum() e mean(). Por exemplo, "SELECT EXTENT(GEOM) FROM GEOMTABLE" retornará um BOX3D dando a extensão máxima de todas as características na tabela. Semelhantemente, "SELECT EXTENT(GEOM) FROM GEOMTABLE GROUP BY CATEGORY" retornará um resultado de extensão para cada categoria.

zmflag(geometry)Returna ZM (semântica da dimensão) flag de geometrias como um inteiro.Valores são: 0=2d, 1=3dm, 2=3dz, 3=4d.

HasBBOX(geometry)Retorna VERDADEIRO se o bbox desta geometria é armazenada, FALSO caso contrário.Usa addBBOX() e dropBBOX() para armazenamento.

ndims(geometry)Retorna o número das dimensões da geometria como um inteiro. Valores são: 2,3 ou 4.

nrings(geometry)Se a geometria for um polígono ou um multi-polígono, retorna o número de anéis.

npoints(geometry)Retorna o número de pontos na geometria.

isvalid(geometry)Retorna verdadeiro se esta geometria for válida.

expand(geometry, float)Esta função 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 à seleção.

estimated_extent([schema], table, geocolumn)Retorna a extensão estimada da tabela espacial dada. O estimado é feito de estatisticas de colunas geométricas. O "schema" atual será usado se não especificado.Para estatística PostgreSQL>=8.0.0 são recolhidos por VACUUM ANALYZE e a extensão resultante será aproximadamente 95% do real.Para estatística PostgreSQL<8.0.0 são recolhidos por update_geometry_stats() e a extensão resultante será exata.

find_srid(varchar,varchar,varchar)A sintaxe é find_srid(<db/schema>, <tabela>, <coluna>) e a função retorna o inteiro SRID da coluna especificada procurando através da tabela GEOMETRY_COLUMNS. Se a coluna da geometria não for adicionada corretamente com a função de AddGeometryColumns(), esta função não trabalhará tampouco.

mem_size(geometry)Retorna a quantia de espaços (em bytes) encontrados na geometria.

numb_sub_objects(geometry)Retorna o número dos objetos armazenados na geometria. Isto é utilizado para MULTI-geometrias e GEOMETRYCOLLECTIONs.

point_inside_circle(geometry,float,float,float)A sintaxe para esta função é point_inside_circle (<geometry>, <circle_center_x>, <circle_center_y>, <radius>).Retorna verdadeiro se a geometria é um ponto e está dentro do círculo. Caso contrário, retorna falso.

xmin(box3d) ymin(box3d) zmin(box3d)Retorna o mínimo solicitado de uma caixa delimitada.

xmax(box3d) ymax(box3d) zmax(box3d)Retorna o máximo solicitado de uma caixa delimitada.

Accum(geometry set)Agregado. Constrói um conjunto de geometrias.

6.2.9. Suporte a grandes transações (Long Transactions)

Este módulo e funções associadas de pl/pgsql foram implementados para fornecer suporte a grandes bloqueios requerido por especificação Web Feature Service.

Nota

Os usuários devem usar serializable transaction level que caso contrário o mecanismo de bloqueio quebraria.

EnableLongTransactions()Permite suporte a transações grandes. Esta função cria as tabelas requeridas dos metadados, necessita ser chamada uma vez antes de usar as outras funções nesta seção. Chamá-la duas vezes é inofensivo.

Disponível: 1.1.3

DisableLongTransactions()Desabilita suporte a transações grandes. Esta função remove as tabelas metadados de suporte a transações grandes, e apaga todos os gatilhos às tabelas lock-checked.

Disponível: 1.1.3

CheckAuth([<schema>], <table>, <rowid_col>)Verifica atualizações e deleções das linhas em dada tabela, sendo autorizada. Identifica linhas usando a coluna <rowid_col>.

Disponível: 1.1.3

LockRow([<schema>], <table>, <rowid>, <authid>, [<expires>])Ajuste de bloqueio/autorização para linha específica na tabela <authid> é um valor de texto, <expires> é um timestamp padronizado para now() +1hour. Retorna 1 se o bloqueio for assinado, 0 caso contrário (já bloqueado pelo outro auth)

Disponível: 1.1.3

UnlockRows(<authid>)Remove todos os bloqueios carregados por id de autorização especificada. Retorna o número dos bloqueios liberados.

Disponível: 1.1.3

AddAuth(<authid>)Adiciona um símbolo da autorização a ser usado na transação atual.

Disponível: 1.1.3

6.3. Funções SQL-MM

Esta é uma listagem das funções definidas SQL-MM que PostGIS suporta atualmente. As implementações destas funções seguem a implementação ArcSDE e assim desviar-se um pouco das especificações. Estes desvios serão 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 versão 1.2.0, estas funções foram implementadas envolvendo funções existentes no PostGIS. Em conseqüência, o suporte cheio para geometrias curvadas para muitas funções não pode estar no lugar.

Nota

SQL-MM define o padrão SRID de todos construtores de geometrias como 0. PostGIS usa um padrão SRID de -1.

ST_AreaReturn 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_AsBinaryRetorna a representação binária well-known de um valor ST_Geometry.

SQL-MM 3: 5.1.37

ST_AsTextRetorna a representação de texto well-known de um valor ST_Geometry.

SQL-MM 3: 5.1.25

ST_BoundaryRetorna o limite do valor ST_Geometry.

SQL-MM 3: 5.1.14

ST_BufferRetorna um buffer em torno do valor ST_Geometry.

SQL-MM 3: 5.1.17

ST_CentroidRetorna centroid matemático do valor ST_Surface ou ST_MultiSurface.

SQL-MM 3: 8.1.4, 9.5.5

ST_ContainsTesta se um valor ST_Geometry espacialmente contem um outro valor ST_Geometry.

SQL-MM 3: 5.1.31

ST_ConvexHullRetorna o hull convexo do valor ST_Geometry.

SQL-MM 3: 5.1.16

ST_CoordDimReturna a dimensão da coordenada do valor ST_Geometry.

SQL-MM 3: 5.1.3

ST_CrossesTesta se um valor ST_Geometry espacialmente atravessa outro valor ST_Geometry.

SQL-MM 3: 5.1.29

ST_DifferenceReturna um valor ST_Geometry que representa a diferença do conjunto de pontos de dois valores ST_Geometry.

SQL-MM 3: 5.1.20

ST_Dimension

Returna a dimensão do valor ST_Geometry.

SQL-MM 3: 5.1.2

ST_DisjointTesta se um valor ST_Geometry é espacialmente desconecta de outro valor ST_Geometry.

SQL-MM 3: 5.1.26

ST_DistanceReturna a distancia entre duas geometrias.

SQL-MM 3: 5.1.23

ST_EndPointReturna um valor ST_Point que é o ponto final de um valor ST_Curve.

SQL-MM 3: 7.1.4

ST_EnvelopeReturna o retângulo delimitado para o valor ST_Geometry.

SQL-MM 3: 5.1.15

ST_EqualsTesta se um valor ST_Geometry é espacialmente igual a outro valor ST_Geometry.

SQL-MM 3: 5.1.24

ST_ExteriorRingReturna o anel exterior de um ST_Surface.

SQL-MM 3: 8.2.3, 8.3.3

ST_GeometryNReturna a indicação do valor ST_Geometry de um ST_GeomCollection.

SQL-MM 3: 9.1.5

ST_GeometryTypeReturna o tipo geométrico do valor ST_Geometry.

SQL-MM 3: 5.1.4

ST_GeomFromTextReturna uma especificação do valor ST_Geometry.

SQL-MM 3: 5.1.40

ST_GeomFromWKBReturna uma especificação do valor ST_Geometry.

SQL-MM 3: 5.1.41

ST_InteriorRingNReturna o anel interior especificado de um valor ST_Surface.

SQL-MM 3: 8.2.6, 8.3.5

ST_IntersectionReturna um valor ST_Geometry que representa a interseção do conjunto de pontos de dois valores ST_Geometry.

SQL-MM 3: 5.1.18

ST_IntersectsTesta se um valor ST_Geometry intercepta espacialmente outro valor ST_Geometry.

SQL-MM 3: 5.1.27

ST_IsClosedTesta 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_IsEmptyTesta 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_IsRingTesta 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_IsSimpleTesta se um valor ST_Geometry não tem pontos geométricos anomalos, como própria interseção ou própria tangência.

Nota

SQL-MM define o resultado de ST_IsSimple(NULL) para ser 0, qunado PostGIS returna NULO.

SQL-MM 3: 5.1.8

ST_IsValidTesta 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_LengthReturna a medida do comprimento de um valor ST_Curve ou um valor ST_MultiCurve.

SQL-MM 3: 7.1.2, 9.3.4

ST_LineFromTextReturna uma especificação do valor ST_LineString.

SQL-MM 3: 7.2.8

ST_LineFromWKBReturna uma especificação de valor ST_LineString.

SQL-MM 3: 7.2.9

ST_MLineFromTextReturna uma espeficiação de valor ST_MultiLineString.

SQL-MM 3: 9.4.4

ST_MLineFromWKBReturna uma especificação de valor ST_MultiLineString.

SQL-MM 3: 9.4.5

ST_MPointFromTextReturna uma especificação de valor ST_MultiPoint.

SQL-MM 3: 9.2.4

ST_MPointFromWKBReturna uma especificação de valor ST_MultiPoint.

SQL-MM 3: 9.2.5

ST_MPolyFromTextReturna uma especificação de valor ST_MultiPolygon.

SQL-MM 3: 9.6.4

ST_MPolyFromWKBReturna uma especificação de valor ST_MultiPolygon.

SQL-MM 3: 9.6.5

ST_NumGeometriesReturna o número de geometrias em um ST_GeomCollection.

SQL-MM 3: 9.1.4

ST_NumInteriorRingReturna o número de asnéis interiores em um ST_Surface.

SQL-MM 3: 8.2.5

ST_NumPointsReturna o número de pontos em um valor ST_LineString ou um valor ST_CircularString.

SQL-MM 3: 7.2.4

ST_OrderingEqualsST_OrderingEquals compara duas geometrias e t (TRUE) se as geometrias são iguais e as coordenadas estão na mesma ordem; caso contrário retorna f (FALSE).

Nota

Esta implementação é feita como especificação 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_OverlapsTesta se um valor ST_Geometry sobrepõe camadas espacialmente a outro valor ST_Geometry.

SQL-MM 3: 5.1.32

ST_PerimeterReturna 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_PointReturna um ST_Point com os valores de coordenadas dadas.

SQL-MM 3: 6.1.2

ST_PointFromTextReturna uma especificação de valor ST_Point.

SQL-MM 3: 6.1.8

ST_PointFromWKBReturna uma especificação de valor ST_Point.

SQL-MM 3: 6.1.9

ST_PointNReturna uma especificação de valor ST_Point em um ST_LineString ou ST_CircularString.

SQL-MM 3: 7.2.5, 7.3.5

ST_PointOnSurfaceReturna um valor ST_Point garantido para interseção espacialmente do valor ST_Surface ou ST_MultiSurface.

SQL-MM 3: 8.1.5, 9.5.6

ST_PolyFromTextReturna uma especificação de valor ST_Polygon.

SQL-MM 3: 8.3.6

ST_PolyFromWKBReturna uma especificação de valor ST_Polygon.

SQL-MM 3: 8.3.7

ST_PolygonReturna uma construção de polígono de uma linestring especificada e SRID.

SQL-MM 3: 8.3.2

ST_RelateTesta se um valor ST_Geometry é relatado espacialmente à outro valor ST_Geometry.

SQL-MM 3: 5.1.25

ST_SRIDReturna o identificador de sistema de referência espacial do valor ST_Geometry.

SQL-MM 3: 5.1.5

ST_StartPointReturna um valor ST_Point que é o ponto inicial de um valor ST_Curve.

SQL-MM 3: 7.1.3

ST_SymDifferenceReturna um valor ST_Geometry que representa a diferença simétrica de um conjunto de pontos de dois valores ST_Geometry.

SQL-MM 3: 5.1.21

ST_TouchesTesta se um valor ST_Geometry tocado espacialmente por outro valor ST_Geometry.

SQL-MM 3: 5.1.28

ST_TransformReturna um valor ST_Geometry transformado para sistema de referência espacial especificado.

SQL-MM 3: 5.1.6

ST_UnionReturna um valor ST_Geometry que representa a união de um conjunto de pontos de dois valores ST_Geometry.

SQL-MM 3: 5.1.19

ST_WithinTesta se um valor ST_Geometry é espacialmente dentro de outro valor ST_Geometry.

SQL-MM 3: 5.1.30

ST_WKBToSQLReturna um valor ST_Geometry para uma dada representação binária well-known.

SQL-MM 3: 5.1.36

ST_WKTToSQL

Returna um valor ST_Geometry para uma dada representação de texto well-known.

SQL-MM 3: 5.1.34

ST_XReturna o valor da coordenada x de um valor ST_Point.

SQL-MM 3: 6.1.3

ST_YReturna o valor da coordenada y de um valoST_Point.

SQL-MM 3: 6.1.4

6.4. Funções ArcSDE

As funções adicionais foram acrescidas para melhorar o suporte a uma interface de estilo ArcSDE.

SE_EnvelopesIntersectReturna t (TRUE) se os envelopes de duas interseções de geometrias; caso contrário, returna f (FALSE).

SE_Is3dTesta se um valor de geometria tem valores de coordenada z.

SE_IsMeasuredTesta se um valor de geometria tem valores de coordenada m.

SE_LocateAlongReturna um valor de coleção de geometria derivada com elementos que combinam a medida especificada.

SE_LocateBetweenReturna um valor de coleção de geometria derivada com elementos que combinam a escala especificada das medidas inclusive.

SE_MReturna o valor da coordenada m de um valor ST_Point.

SE_ZReturna o valor da coordenada z de um valor ST_Point.

Capítulo 7. Relatando Erros

Relatar erros é uma maneira fundamental de ajudar no desenvolvimento de PostGIS. O relatório mais eficaz de erro é aquele que permite desenvolvedores PostGIS reproduzi-lo, assim conteria um script engatilhando-o e cada informação a respeito do ambiente em que foi detectada. Uma boa e completa informação pode ser extraída rodando SELECT postgis_full_version() [for postgis] e SELECT version() [for postgresql].

Se você não estiver usando a liberação 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 relatórios não serão 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 informação nova que tiver sobre ele.

Você poderá ler o papel de Simon Tatham sobre How to Report Bugs Effectively antes de arquivar um relatório novo.

Apendice A. Apendice

Índice

A.1.Notas de VersãoA.1.1. Versão 1.2.1A.1.2. Versão 1.2.0A.1.3. Versão 1.1.6A.1.4. Versão 1.1.5A.1.5. Versão 1.1.4A.1.6. Versão 1.1.3A.1.7. Versão 1.1.2A.1.8. Versão 1.1.1A.1.9. Versão 1.1.0A.1.10. Versão 1.0.6A.1.11. Versão 1.0.5A.1.12. Versão 1.0.4A.1.13. Versão 1.0.3A.1.14. Versão 1.0.2A.1.15. Versão 1.0.1A.1.16. Versão 1.0.0A.1.17. Versão 1.0.0RC6A.1.18. Versão 1.0.0RC5A.1.19. Versão 1.0.0RC4A.1.20. Versão 1.0.0RC3A.1.21. Versão 1.0.0RC2A.1.22. Versão 1.0.0RC1A.1. Notas da Versão

A.1.1. Versão 1.2.1

Data da versão: 11/01/2007

Esta versão fornece erro fixo no suporte PostgreSQL 8.2 e em alguns pequenos aumentos de desempenho.

A.1.1.1. Mudanças

Fixado erro de atalho point-in-polygon em Within().Fixado PostgreSQL 8.2 NULO na manipulação para índices.Atualizados arquivos de especificação RPM.Adicionado short-circuit para transform() dentro do case no-op.

JDBC: Fixado JTS manipulando para geometrias multi-dimensional (agradecimentos a Thomas Marti pela sugestão e a colaboração 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. Versão 1.2.0

Data da versão: 08/12/ 2006

Esta versão fornece definições de tipo junto com potencialidades da serialização/deserialização para geometrias curvadas definidas SQL-MM, assim como aumentos de desempenho.

A.1.2.1. Mudanças

Adicionado suporte ao tipo de geometria curvada para serialização/deserialização.Adicionado um curto circuito point-in-polygon para as funções Contains e Within para melhorar o desempenho para estes casos.

A.1.3. Versão 1.1.6

Data da versão: 02/11/2006

Esta é uma versão de fixação de erro, em particular que fixa um erro crítico com interface GEOS nos sistemas 64bit. Inclui uma atualização dos parâmetros SRS e de uma melhoria nas reprojeções (tome Z na consideração). Melhoria é incentivada.

A.1.3.1. Melhorias

Se você estiver promovendo da versão 1.0.3 ou posteriores siga este procedimento soft upgrade.Se você estiver promovendo de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e querer realmente um melhoramento vivo leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior à 1.0.0RC6 requer um hard upgrade.

A.1.3.2. Correções

Fixada mudança CAPI que quebrou plataforma 64-bit.carregador/descarregador: fixado testes de regressão e uso de saída.Fixado erro setSRID() em JDBC, agradecimento à Thomas Marti.

A.1.3.3. Outras Mudanças

uso ordenada Z nas reprojeções.spatial_ref_sys.sql alterado para EPSG 6.11.1 para uso de um pacote simples de variáveis de versão para todos.

Inclue a Version.config no carregador/descarregador de mensagens USAGE.Substitue o hand-made, analizador de versão JDBC frágil com Properties.

A.1.4. Versão 1.1.5

Data da versão: 13/10/2006

Esta é uma versão de correções, incluindo um padrão de segmento crítico no win32. Melhorias são incentivadas.

A.1.4.1. Melhorias

Se quiser melhorias da versão 1.0.3 ou posteriores siga o procedimento soft upgrade.Se quiser melhorias da versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.

A.1.4.2. Correções

Fixado erro de link MingW que foi causado pgsql2shp para segmento padrão em Win32 quando compilado por PostgreSQL 8.2.fixado nullpointer Exception no método Geometry.equals() em Java.Adicionado EJB3Spatial.odt para cumprir a exigência de distribuição GPL “preferred form of modification”.Removido sincronização obsoleta JDBC do código Jts.Atualizado pesadamente os antiquados arquivos README para shp2pgsql/pgsql2shp fundindo-o com as páginas principais.Fixada etiqueta versão no código jdbc que ainda diz “1.1.3” na versão “1.1.4”.

A.1.4.3. Novas Características

Adicionada opção -S option para geometrias non-multi para shp2pgsql.

A.1.5. Versão 1.1.4

Data da versão: 27/09/2006

Esta é uma versão de fixação de erro incluindo algumas melhorias na interface Java. Melhorias são incentivadas.

A.1.5.1. Melhorias

Se quiser melhorias da versão 1.0.3 ou posteriores siga o procedimento soft upgrade.Se quiser melhorias de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.

A.1.5.2. Correções

Fixado suporte para PostgreSQL 8.2.

Fixado erro na função collect() descartando SRID de entrada.Adicionado SRID que verifica a combinação em MakeBox2d e MakeBox3d.Fixado regresso de testes para passar com GEOS-3.0.0.Improved pgsql2shp run concurrency.Melhorada a concorrência de execução pgsql2shp.

A.1.5.3. Mudanças Java

Retrabalhado o suporte JTS para refletir novos upstream atitudes de desenvolvedores próprios JTS para manipulação do SRID. Simplifica o código e a apaga a construção 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 <[email protected]>.Reorganizado um pouco o leiaute do diretório java.

A.1.6. Versão 1.1.3

Data da versão: 30/062006

Esta é uma versão de fixação de erro incluindo também algumas funcionalidades novas (mais notavelmente suporta a grandes transações) e aumento de portabilidade. Melhorias são incentivadas.

A.1.6.1. Melhorias

Se quiser melhorias da versão 1.0.3 ou posteriores siga o procedimento soft upgrade.Se quiser melhorias de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.A.1.6.2. Correções/exatidão

CORREÇAO em distance(poly,poly) dando resultados errados.CORREÇAO em pgsql2shp código de retorno bem sucedido.CORREÇAO em shp2pgsql manipulando MultiLine WKT.

CORREÇAO em affine() falha na atualização da caixa delimitada.WKT analisador: construção proibida das multigeometrias com elementos EMPTY (suportados ainda para GEOMETRYCOLLECTION).

A.1.6.3. Novas Funcionalidades

NOVO suporte a grandes Transações.NOVO função DumpRings().NOVO função AsHEXEWKB(geom, XDR|NDR).

A.1.6.4. Mudanças JDBC

Testes de regressão melhorados: MultiPoint e ordenadas científicas.Fixado alguns erros menores em código code.Adicionada as funções acessor apropriado que funciona para todos os campos na preparação de fazer aqueles campos privados mais tarde.

A.1.6.5. Outras Mudanças

NOVO suporte de teste de regressão para carregador/descarregador.Adicionado --with-proj-libdir e --with-geos-libdir para configurar interruptores (switches).Suporte para contruir Tru64 build.Usar Jade para gerar documentação.Sem link pgsql2shp para mais libs então requerida.Suporte inicial para PostgreSQL 8.2.

A.1.7. Versão 1.1.2

Data da versão: 30/03/2006

Esta é uma versão de fixação de erro incluindo algumas funções e novos aumentos de portabilidade. Melhorias são incentivadas.

A.1.7.1. Melhorias

Se quiser melhorias da versão 1.0.3 ou posteriores siga o procedimento soft upgrade.Se quiser melhorias de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.

A.1.7.2. Correções

CORREÇAO em SnapToGrid() computação da saída da caixa delimitada.CORREÇAO em EnforceRHR().jdbc2 SRID manipulando reparos no código JTS.Fixado suporte para arquitetura 64bit.

A.1.7.3. Novas Funcionalidades

Testes de regressão agora podem ser executados *before* instalação postgis.Novas funções de transformação de matriz affine().Nova função rotate{,X,Y,Z}().Antigas funções translating e scaling agora usam internamente affine().Controle de acesso enfileirado estimated_extent() para construção com pgsql >= 8.0.0.

A.1.7.4. Outras Mudanças

script ./configure mais portável.Alterado o script ./run_test para ter um comportamento padrão mais sensato.

A.1.8. Versão 1.1.1

Data da versão: 23/01/2006

Esta é uma versão importante de correções, melhorias é altamente recomendada. A versão 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 operações topológicas.

A.1.8.1. Melhorias

Se quiser melhorias da versão 1.0.3 ou posteriores siga o procedimento soft upgrade.Se quiser melhorias de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.A.1.8.2. Correções

Fixado uma saída prematura em postgis_restore.pl.Fixação de erro no geometrycollection manipulando conector GEOS-CAPI.Solaris 2.7 e melhorias de suporte MingW.Fixação de erro no line_locate_point().Fixado manipulação de caminho postgresql.Fixação de erro no line_substring().Adicionado suporte para conjunto localizado no verificador de regressão.

A.1.8.3. Novas Funcionalidades

Nova interpolação Z e M no line_substring().Nova interpolação Z e M no line_interpolate_point().Adicionado NumInteriorRing() aliás devido a ambiguidade OpenGIS.

A.1.9. Versão 1.1.0

Data da versão: 21/12/2005

Esta é uma versão menor, contendo muitas melhorias e coisas novas. O mais notavel: o procedimento da construção extremamente simplificada; transform() desempenho

melhorado drasticamente; mais estabilidade na conectividade GEOS (suporte CAPI); muitas novas funções; suporte da topologia do esboço.É altamente recomendado melhoria para antes de GEOS-2.2.x instalando PostGIS, isto assegurará futuros melhoramentos GEOS não requererá uma reconstrução da biblioteca de PostGIS.

A.1.9.1. Créditos

Esta versão inclui o código de Mark Cave Ayland para esconder objetos proj4. Markus Schaber adicionou muitas melhorias em seu código JDBC2. Alex Bodnaru ajudou com fonte PostgreSQL relevo da dependência e fornece especificação 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 código para a função azimuth(). Devrim GUNDUZ forneceu especificação de arquivos RPM. Carl Anderson ajudou com a nova área de construção das funções. Veja a seção credits para consultar mais nomes.

A.1.9.2. Melhorias

Se quiser melhorias de uma versão 1.0.3 ou anterior NÃO precisa descarregar/recarregar. Simplesmente o fonte trabalhará um novo roteiro lwpostgis_upgrade.sql em todos seus bancos de dados existentes. Veja o capítulo soft upgrade para mais informação.Se quiser melhorias de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.

A.1.9.3. Novas Funções

métodos 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. Correções

Escape da memória fixado no polygonize().Corrigidas funções cast lwgeom_as_anytype.

Fixados elementos USE_GEOS, USE_PROJ e USE_STATS da saída postgis_version() para refletir sempre em estado de biblioteca.

A.1.9.5. Mudanças de Semântica de Função

SnapToGrid não rejeita dimensões mais elevadas.Função changed Z() retorna NULO se a dimensão pedida não está disponível.

A.1.9.6. Melhorias de Desempenho

Muito mais rapida a função transform(), objetos escondidos proj4.Chamada automática 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 regressão melhorado.Método de verificação de consistência básica para coleções da geometria.Suporte para (Hex)(E)wkb.Auto investigação DriverWrapper para interruptores HexWKB / EWKT.problemas para compilar fixo em ValueSetter para antigas versãos JDK.Construtores EWKT fixos para aceitar representação SRID=4711; Adicionada preliminar suporte read-only para geometrias java2d.

A.1.9.8. Outras Novas Funções

Configuração autoconf-based completa, com relevo da dependência da fonte PostgreSQL.Suporte GEOS C-API (2.2.0 e mais elevada).Suporte inicial para modelagem de topologia.Especificação de arquivos Debian e RPM.Novo script lwpostgis_upgrade.sql.

A.1.9.9. Outras Mudanças

Melhorias no suporte JTS.Stricter mapping between DBF and SQL integer and string attributesMapeamento mais estrito entre o inteiro DBF e SQL e atributos de string.Wider and cleaner regression test suiteSuite de teste de regressão mais largo e mais limpo.Antigo código jdbc removido da Versão.Obsoleto uso direto de postgis_proc_upgrade.pl.Versão unificada de scripts com versão Versão.

A.1.10. Versão 1.0.6

Data da versão: 2005/12/06

Contem algumas correções e melhorias.

A.1.10.1. Melhorias

Se quiser melhorias de uma versão 1.0.3 ou anterior NÃO precisa descarregar/recarregar.Se quiser melhorias de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.A.1.10.2. Correções

Fixada chamada palloc(0) na coleção deserializadora (só dá problema com --enable-cassert).Fixado cache bbox de manipulação 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 computação bbox de saída SnapToGrid.

A.1.10.3. Improvements

Suporte inicial para postgresql 8.2.Adicionado o faltante da má combinação SRID que verifica ops GEOS.

A.1.11. Versão 1.0.5

Data da versão: 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 código shp2pgsql alterado de Versãos anteriores para conformar-se aos padrões unix (retorna 0 no sucesso).

A.1.11.1. Melhorias

Se quiser melhorias de uma versão 1.0.3 ou anterior NÃO precisa descarregar/recarregar.Se quiser melhorias de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.A.1.11.2. Mudanças de Bibliotecas

Fixada problemas de alinhamento de memória.Fixada computação de fração de valores nulos no analisador.Fixado um pequeno erro na função getPoint4d_p() low-level.Velocidade alta das funções do serializador.Fixado um erro em force_3dm(), force_3dz() e force_4d().

A.1.11.3. Mudanças de Carregador

Fixado return code de shp2pgsql.Fixado título back-compatibility no carregador (carga de shapefiles nulos).Fixado manipulação de pontos arrastando em atributos numéricos dbf.Falha no segmento fixo em shp2pgsql (utf8 encoding).

A.1.11.4. Outras Mudança

Esquema postgis_proc_upgrade.pl ciente, suporte para pgsql 7.2+.Novo capítulo no manual "Relatando Erros".

A.1.12. Versão 1.0.4

Data da versão: 09/09/2005

Contem correções importantes e algumas melhorias. Em particular, fixa um escape da memória que impede a construção bem sucedida de índices GiST para tabelas espacial grandes.

A.1.12.1. Melhorias

Se quiser melhorias de uma versão 1.0.3 ou anterior NÃO precisa descarregar/recarregar.Se quiser melhorias de uma versão entre 1.0.0RC6 e 1.0.2 (inclusive) e realmente quer uma melhoria leia o upgrade section do capítulo notas da versão 1.0.3.Melhorias de alguma versão anterior para 1.0.0RC6 requer um hard upgrade.A.1.12.2. Correções

Escape de memória conectado na indexação GiST.

Falta de segmento fixo no transform() com manipulaçao de erros proj4.Fixado alguns textos proj4 no spatial_ref_sys (perdido +proj).Carregador: fixada uso da função string, retrabalhado verificação de objetos NULO, fixada falta de segmento na entrada MULTILINESTRING.Corrigidos em manipulação de dimensão do MakeLine.Corrigidos em translate() corrupção de saída da caixa delimitada.

A.1.12.3. Melhorias

Melhorias na documentação.Estimador de seletividade mais robusto.Menor velocidade alta em distance().

Menor limpeza.Limpeza em índices GiST.Aceitação de sintaxe mais solto no analisador box3d.

A.1.13. Versão 1.0.3

Data da versão: 2005/08/08

Contem algumas correções - incluindo um severo afeição 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 atenção especial, porque as caixas delimitadas armazenadas no banco de dados poderiam estar incorretas.Um procedimento (descarrega/recarrega) hard upgrade forçará a recomputação de todas as caixas delimitadas (não incluídas nos descarregadores). Isto é requerido se melhorias em Versãos anteriores à 1.0.0RC6.Se você tiver melhorias das versões 1.0.0RC6 ou posteriores, esta Versão inclui um script perl (utils/rebuild_bbox_caches.pl) para forçar a recomputação das caixas delimitadas de suas geometrias e para invocar todas as operações requeridas propagar mudanças eventuais nelas (atualização das estatisticas da geometria, reindexação). Invocar o script depois de um make install (executar sem argumentos para ajuda da sintaxe). Opcionalmente executar utils/postgis_proc_upgrade.pl para atualização de procedimentos do postgis e assinaturas das funções (veja Soft upgrade).

A.1.13.2. Correções

Correção severa em lwgeom's 2d computação de caixa delimitada.Correção no WKT (-w) POINT manipulando no carregador.Correção no descarregador em máquinas 64bit.Correção na manipulação das seleções user-defined.Correção no script create_undef.pl.

A.1.13.3. Melhorias

Melhorias de pequenos desempenhos na função 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. Versão 1.0.2

Data da versão: 04/07/2005

Contem algumas correções e melhorias.

A.1.14.1. Melhorias

Se quiser melhorias de uma versão 1.0.0RC6 ou superior NÃO precisa descarregar/recarregar.Melhorias de versões anteriores requer um descarrega/recarrega. Veja o capítulo upgrading para mais informações.

A.1.14.2. Correções

Falha tolerante do btree ops.Memória de escape plugada em pg_error.Índice fixo Rtree.Scripts mais limpos na construção (mistura evitada de CFLAGS e CXXFLAGS).

A.1.14.3. Melhorias

Potencialidade na nova criação de índice no carregador (-I switch).Suporte inicial para postgresql 8.1dev.

A.1.15. Versão 1.0.1

Data da versão: 24/05/2005

Contem algumas correções e melhorias.

A.1.15.1. Melhorias

Se quiser melhorias de uma versão 1.0.0RC6 ou superior NÃO precisa descarregar/recarregar.Melhorias de versões anteriores requer um descarrega/recarrega. Veja o capítulo upgrading para mais informações.

A.1.15.2. Mudanças da Bibliotecas

CORREÇÃO na computação 3d de length_spheroid().CORREÇÃO no estimador de seletividade agrupado.

A.1.15.3. Outras Mudanças/Adições

CORREÇÃO na função escape shp2pgsql.Melhor suporte para concorrente postgis em esquemas múltiplos.Documentações fixas.jdbc2: compilar com "-target 1.2 -source 1.2" por padrão.NOVO -k comutar para pgsql2shp.NOVO suporte para opções createdb em postgis_restore.pl.CORREÇÃO em nomes de atributos pgsql2shp cumprimento de unicidade.

CORREÇÃO em definições de projeções Paris.limpezas postgis_restore.pl.

A.1.16. Versão 1.0.0

Data da versão: 19/04/2005

Versão final 1.0.0. Contem algumas correções, algumas melhorias no carregador (o mais notavel suporte para versões postgis mais antigas) e mais documentações.

A.1.16.1. Melhorias

Se quiser melhorias de uma versão 1.0.0RC6 NÃO precisa descarregar/recarregar.Melhorias de algumas versões anteriores requer um descarrega/recarrega. Veja o capítulo upgrading para mais informações.A.1.16.2. Mudanças de Bibliotecas

CORREÇÃO no transform() liberando o endereço de memória aleatório.CORREÇÃO no force_3dm() alocando menos memória então requerida.CORREÇÃO no estimator de seletividade agrupado (defaults, leaks, tuplecount, sd).A.1.16.3. Outras Mudanças/Adições

CORREÇÃO no escape de valores shp2pgsql começando com "tab" ou "single-quote".NOVO páginas manuais para carregador/descarregador.NOVO suporte shp2pgsql para antigas versões postgis (HWGEOM).NOVO - p (prepare) flag para shp2pgsql.NOVO capítulo manual sobre cumprimento de conformidade OGC.NOVO suporte a autoconfiguração (autoconf) para biblioteca JTS.CORREÇÃO nos verificadores do estimador (suporte para LWGEOM e esquema analisador).A.1.17. Versão 1.0.0RC6

Data da versão: 30/03/2005

Sexta Versão candidata para 1.0.0. Contem algumas correções e limpezas.

A.1.17.1. Melhorias

Você precisa descarregar/recarregar para melhoria das versões precedentes. Veja o capítulo upgrading para mais informações.A.1.17.2. Mudanças de Bibliotecas

CORREÇÃO em multi().pronto return [when noop] do multi().A.1.17.3. Mudanças de Scripts

funções dropped {x,y}{min,max}(box2d)

A.1.17.4. Outras Mudanças

CORREÇÃO no script postgis_restore.pl.CORREÇÃO no seu descarregador de suporte 64bit.

A.1.18. Versão 1.0.0RC5

Data da versão: 25/03/2005

Quinta Versão candidata para 1.0.0. Contem algumas correções e melhorias.

A.1.18.1. Melhorias

Se quiser melhorias de uma versão 1.0.0RC4 NÃO precisa descarregar/recarregar.Melhorias de algumas versões anteriores requer um descarrega/recarrega. Veja o capítulo upgrading para mais informações.A.1.18.2. Mudanças de Bibliotecas

CORREÇÃO (segmento padrão) em computação box3d (sim, outros!).CORREÇÃO (segmento padrão) em estimated_extent().

A.1.18.3. Outras Mudanças

Construções pequenas de scripts e refinamentos de utilidades.Adicionais desempenho de tipos documentados.

A.1.19. Versão 1.0.0RC4

Data da versão: 18/03/2005

Quarta Versão candidata para 1.0.0. Contem correções e poucas melhorias.

A.1.19.1. Melhorias

Você precisa descarregar/recarregar para melhoria das versões precedentes. Veja o capítulo upgrading para mais informações.

A.1.19.2. Mudanças de Bibliotecas

CORREÇÃO (segmento padrão) em geom_accum().CORREÇÃO no suporte a arquitetura 64bit.CORREÇÃO no função da computação box3d com coleções.NOVO suporte a subselects em estimador de seletividade.Retorno rápido da force_collection.Verificação de consistência fixa em SnapToGrid().Saída retroagida Box2d para 15 dígitos significativos.Box2d output changed back to 15 significant digits.

A.1.19.3. Mudanças de Scripts

NOVO função distance_sphere().Alterada implementação get_proj4_from_srid para usar PL/PGSQL em vez do SQL.

A.1.19.4. Outras Mudanças

CORREÇÃO na manipulação do carregador e descarregador das formas MultiLine.CORREÇÃO no carregador, saltando tudo com exceção da primeira regra de polígonos.jdbc2: limpeza de códigos, melhorias no Makefile.Variáveis FLEX e YACC atribui *after* pgsql Makefile.global que é incluído e só se a versão pgsql *stripped* determina string vazia.Já adicionado analisador gerado na versão.Refinamentos de scripts construídos.Manipulação de versão melhorada, Version.config central.melhorias em postgis_restore.pl.A.1.20. Versão 1.0.0RC3

Data da versão: 24/02/2005Terceira Versão candidata para 1.0.0. Contem muitas correções e melhorias.

A.1.20.1. Melhorias

Você precisa descarregar/recarregar para melhoria das versões precedentes. Veja o capítulo upgrading para mais informações.

A.1.20.2. Mudanças de Bibliotecas

CORREÇÃO no transform(): faltando SRID, manipulação melhor de erro.CORREÇÃO na manipulação do alinhamento da memória.CORREÇÃO no force_collection() causando falhas do conector do mapserver em tipos de geometria simples.CORREÇÃO no GeometryFromText() faltando adicionar uma memória bbox.Precisão reduzida da saída box2d.Macros DEBUG pré-fixados com PGIS_ para evitar o choque com um pgsql.Ligado um escape no conversor GEOS2POSTGIS.Uso de memória reduzido mais cedo liberando um "query-context" de um palloc.

A.1.20.3. Mudanças de Scripts

CORREÇÃO em 72 índices sujeitantes.CORREÇÃO no probe_geometry_columns() para trabalhar com PG72 e para suportar colunas da geometria múltiplas em uma tabela simples.NOVO cast bool::textFeitas algumas funções IMMUTABLE de STABLE, para melhorar o desempenho.

A.1.20.4. Mudanças JDBC

jdbc2: Caminhos pequenos, testes box2d/3d, documentos e licença revisados.jdbc2: Correções e o caso de teste para o tipo autoregistro pgjdbc 8.0.jdbc2: Uso removido de jdk1.4 só características para permitir construção com versões mais antigas JDK.jdbc2: Adicionado suporte para construção com pg72jdbc2.jar.jdbc2: Atualização 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 manipulação de medidas geométricas em EWKT.

A.1.20.5. Outras Mudanças

Novo desempenho vira o capítulo no manual.Atualizações da documentação: exigência pgsql72, lwpostgis.sql.Poucas mudanças no autoconf.A extração de BUILDDATE feito mais portável.Fixado spatial_ref_sys.sql para evitar limpeza no banco de dados inteiro.spatial_ref_sys: alteradas entradas Paris para combinar alguns distribuídos com o 0.x.

A.1.21. Versão 1.0.0RC2

Data da versão: 26/01/2005

Segunda Versão candidata para 1.0.0 contendo correções e algumas melhorias.A.1.21.1. Melhorias

Você precisa descarregar/recarregar para melhoria das versões precedentes. Veja o capítulo upgrading para mais informações.

A.1.21.2. Mudanças em bibliotecas

CORREÇÃO na computação box3d pointarray.CORREÇÃO na definição distance_spheroid.CORREÇÃO no transform() faltando atualizar memória bbox.NOVO jdbc driver (jdbc2).GEOMETRYCOLLECTION(EMPTY) suporte de sintaxe para a compatibilidade inversa.Saídas binárias mais rápidas.Construtores mais estritos OGC WKB/WKT.

A.1.21.3. Mudanças em Scripts

Usos mais corretos STABLE, IMMUTABLE, STRICT em lwpostgis.sql.construtores mais estritos OGC WKB/WKT.

A.1.21.4. Outras Mudanças

Carregador mais rápido e mais robusto (ambos i18n e não). script inicial do autoconf.

A.1.22. Versão 1.0.0RC1

Data da versão: 13/01/2005Este é o primeiro candidato da principal versão postgis, com armazenamento interno dos tipos postgis redesenhado para ser menor e mais rápido em seleções posicionadas.A.1.22.1. Melhorias

Você precisa descarregar/recarregar para melhoria das versões precedentes. Veja o capítulo upgrading para mais informações.

A.1.22.2. Mudanças

Entrada canônica mais rápida.Saída canônica de pouca perda.EWKB binário canônico IO com PG>73.Suporte para até coordenadas 4d, fornecendo a sem perda da conversão shapefile->postgis->shapefile.Novas funções: UpdateGeometrySRID(), AsGML(), SnapToGrid(), ForceRHR(), estimated_extent(), accum().Posicionamento vertical de operadores indexados.JOIN função de seletividade.Mais geometrias construtores / editores.API de extensão Postgis.Suporte UTF8 no carregador.