Sumário
1. Introdução
1.1. Créditos
1.2. Mais Informações
2. Instalação
2.1. Exigências
2.2. PostGIS
2.2.1. Criando PostGIS habilitando espacialmente um banco de dados de modelo de
construção
2.2.2. Melhorias
2.2.3. Problemas Comuns
2.3. JDBC
2.4. Carregador/Descarregador
3. Perguntas Mais Frequentes
4. Usando PostGIS
4.1. Objetos GIS
4.1.1. Padrões de OpenGIS WKB e WKT
4.1.2. Padrões de PostGIS EWKB, EWKT e Forma Canônica
4.1.3. SQL-MM Parte 3
4.2. Usando Padrões de OpenGIS
4.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 espacial
4.2.4. Assegurando-se conforme a geometria de OpenGIS
4.3. Carregando Dados de GIS
4.3.1. Usando SQL
4.3.2. Usando o Carregador
4.4. Recuperando Dados de GIS
4.4.1. Usando SQL
4.4.2. Usando o Descarregador
4.5. Construindo Índices
4.5.1. Índices GiST
4.5.2. Usando Índices
4.6. Queries Complexas
4.6.1. Vantagens no Uso de Índices
4.6.2. Exemplos de SQL Espacial
4.7. Usando Servidor de Mapas
4.7.1. Uso básico
4.7.2. Perguntas Mais Frequentes
4.7.3. Uso Avançado
4.7.4. Exemplos
4.8. Clientes de Java (JDBC)
4.9. Clientes de C (libpq)
4.9.1. Cursores de Texto
4.9.2. Cursores Binários
5. Tipos de Performance
5.1. Tabelas Pequenas de Geometrias Grandes
5.1.1. Descrição de problemas
5.1.2. Envolvimento com o trabalho
5.2. CLUSTERing em índices da geometria
5.3. Evitando a conversão da dimensão
6. Referência PostGIS
6.1. Funções de OpenGIS
6.1.1. Funções de Gerenciamento
6.1.2. Funções de Relacionamento da Geometria
6.1.3. Funções de Processamento da Geometria
6.1.4. Assessores Geométricos
6.1.5. Construtores Geométricos
6.2. Extensões PostGIS
6.2.1. Funções de Gerenciamento
6.2.2. Operadores
6.2.3. Funções de Medida
6.2.4. Saída Geométricas
6.2.5. Construtores Geométricos
6.2.6. Editores Geométricos
6.2.7. Referência Linear
6.2.8. Variado
6.2.9. Suporte a grandes transações (Long Transactions)
6.3. Funções SQL-MM
6.4. Funções ArcSDE
7. Relatando Erros
A. Apendice
A.1. Notas de Versão
A.1.1. Versão 1.2.1
A.1.2. Versão 1.2.0
A.1.3. Versão 1.1.6
A.1.4. Versão 1.1.5
A.1.5. Versão 1.1.4
A.1.6. Versão 1.1.3
A.1.7. Versão 1.1.2
A.1.8. Versão 1.1.1
A.1.9. Versão 1.1.0
A.1.10. Versão 1.0.6
A.1.11. Versão 1.0.5
A.1.12. Versão 1.0.4
A.1.13. Versão 1.0.3
A.1.14. Versão 1.0.2
A.1.15. Versão 1.0.1
A.1.16. Versão 1.0.0
A.1.17. Versão 1.0.0RC6
A.1.18. Versão 1.0.0RC5
A.1.19. Versão 1.0.0RC4
A.1.20. Versão 1.0.0RC3
A.1.21. Versão 1.0.0RC2
A.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
Outros contribuidores
Em 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.
Capítulo 2. Instalação
2.1. Exigências
• 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.
•
2.2. PostGIS
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.
Do SQL:
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.
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
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:
$ psql newdb
newdb=> delete from spatial_ref_sys;
DROP
newdb=> \i spatial_ref_sys.sql
Existem várias coisas para conferir quando sua instalação ou atualização não acontece
como você espera.
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
3. Executar o comando make. Copiar o arquivo postgis.jar onde quer que mantenha
suas bibliotecas de java.
2.4. Carregador/Descarregador
# cd postgis-1.2.1/loader
# make
# make install
O carregador é chamado shp2pgsql e converte arquivos ESRI Shape em SQL apropriado
por carregar no PostGIS/PostgreSQL. O descarregador é chamado pgsql2shp e converte
tabelas PostGIS em arquivos ESRI Shape.
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:
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..
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.
Para construir um índice espacial em uma tabela com uma coluna geometrica, use a
função
"CREATE INDEX" como segue:
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.
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 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.
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.
PostGIS estende o padrão com suport para coordenadas 3DZ, 3DM e 4D.
• POINT(0 0)
• MULTIPOINT(0 0,1 2)
• 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)))
Por exemplo, uma declaração válida de inserção para criar e inserir um objeto espacial de
OGC seria::
Somente o formato OGC suporta geometria 2d, e o SRID associado *nunca* faz parte das
respresentações do input/output.
Exemplos das representações do texto (EWKT) dos objetos espaciais estendidos das
características são como segue:
• POINT(0 0 0) -- XYZ
• POINTM(0 0 0) -- XYM
• POINT(0 0 0 0) -- XYZM
• 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)))
Por exemplo, uma declaração válida de inserção para criar e inserir um objeto espacial
seria:
- Output -
binary: EWKB
ascii: HEXEWKB (EWKB in hex form)
- Input -
binary: EWKB
ascii: HEXEWKB|EWKT
• CIRCULARSTRING(0 0, 1 1, 1 0)
• 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
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.
E x i s t e m d u a s t a b e l a s d e m e t a - d a d o s O p e n G I S : S PAT I A L _ R E F _ S Y S e
GEOMETRY_COLUMNS. A tabela SPATIAL_REF_SYS carrega os identificadores
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)
SRID
Um valor inteiro que exclusivamente identifica o Sistema de Referência Espacial (Spacial
Referencing System - SRS) dentro do banco de dados.
AUTH_NAME
Nome 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_SRID
O 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.
SRTEXT
Representação de Well-Known Text do Sistema de Referência Espacial (WKT SRS). Um
exemplo de uma representação WKT SRS é:
PROJ4TEXT
PostGIS usa a biblioteca Proj4 para fornecer potencialidades de
transformaçãocoordenadas . A coluna de PROJ4TEXT contem a string de definição de
coordenada Proj4 para um SRID particular. Por exemplo:
F_GEOMETRY_COLUMN
O nome da coluna geométrica na tabela característica
COORD_DIMENSION
Dimensão de espaço (2, 3 ou 4 dimensional) da coluna.
SRID
Identificador 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.
TYPE
Tipo do objeto espacial. Restringir a coluna espacial a um único tipo, usar um:
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):
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():
Note
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.
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 RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S
(1,GeomFromText('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd');
I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S
(2,GeomFromText('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd');
I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S
(3,GeomFromText('LINESTRING(192783 228138,192612 229814)',-1),'Paul St');
I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S
(4,GeomFromText('LINESTRING(189412 252431,189631 259122)',-1),'Graeme Ave');
I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S
(5,GeomFromText('LINESTRING(190131 224148,190871 228134)',-1),'Phil Tce');
I N S E RT I N TO R O A D S _ G E O M ( I D , G E O M , N A M E ) VA L U E S
(6,GeomFromText('LINESTRING(198231 263418,198213 268322)',-1),'Dave Cres');
COMMIT;
O arquivo de dados pode ser transportado facilmente para dentro do PostgreSQL usando
o monitor de terminal SQL "psql":
-a
Acrescenta 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.
-c
Cria uma nova tabela e insere dados do arquivo Shape. Este parametro é o modo padrão.
-p
Produz 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.
-D
Cria 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.
-k
Conserva identificadores de caso (coluna, schema e atributos). Note que os atributos em
Shapefile são todos UPPERCASE.
-i
Conserva identificadores de caso (coluna, schema e atributos). Note que os atributos em
Shapefile são todos UPPERCASE.
-w
Formato 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.
Uma sessão de exemplo que usa o carregador para criar um arquivo e carregá-lo poderia
ser como segue:
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.
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:
&&
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, NAME
FROM ROADS_GEOM
WHERE
GEOM ~= GeomFromText('LINESTRING(191232 243118,191108 243242)',-1);
A "query" anterior devolveria o único registro da tabela "ROADS_GEOM" pela qual a
geometria era igual aquele valor.
Ao usar o operador "&& ", pode especificar um outro BOX3D como 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, NAME
FROM ROADS_GEOM
WHERE
GEOM && GeomFromText('POLYGON((191232 243117,191232 243119,191234
243117,191232 243117))',-1);
A "query" anterior usará a caixa delimitada do 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 GEOM
FROM ROADS_GEOM
WHERE
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.
-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.
-b
Use 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.
-r
Modalidade pura. Não destrua o campo "gid", ou nomes da coluna "escape".
-d
Para a compatibilidade inversa: escrever um arquivo shape 3-dimensional, quando
descarregar do banco de dados de postgis anteriores (pre-1.0.0) - o padrão é escrever um
arquivo Shape 2- dimensional neste caso). Inicie de postgis-1.0.0+, as dimensões são
codificadas inteiramente.
Í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.
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:
Í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:
• 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. Nota
A partir de versão 0.6, não deveria ser necessário forçar o operador a usar o índice
com ENABLE_SEQSCAN.
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:
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:
Esta "query" combina uma condição do atributo (no nome da municipalidade) com um
cálculo espacial (da á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:
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:
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:
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.
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
<>):
user=<username> password=<password> dbname=<username>
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.
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.
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.
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:
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:
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
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
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
END
END
Esta 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
END
END
LAYER
CONNECTION "user=theuser password=thepass dbname=thedb host=theserver"
DATA "the_geom FROM roads"
MAXSCALE 100000
STATUS ON
TYPE LINE
CLASSITEM road_type
CLASS
EXPRESSION "highway"
SIZE 2
COLOR 255 0 0
END
CLASS
COLOR 0 0 0
END
END
A primeira camada é usada quando a 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.
import java.sql.*;
import java.util.*;
import java.lang.*;
import org.postgis.*;
/*
* 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.
...
...
...
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
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');
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.)
lwgeom=# ALTER TABLE my_table ALTER COLUMN the_geom SET not null;
ALTER TABLE
Naturalmente, 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á.
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.
SetSRID(geometry)
Atribui o SRID em uma geometria para um valor de inteiro particular. É utilizado na
construção de caixas de salto para "queries".
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 GEOS
OGC SPECs2.1.1.2
Disjoint(geometry,geometry)
Retorna 1 (VERDADEIRO) se esta Geometria é que "spatially disjoint" (desloca
espacialmente) de outra geometria.
Executado pelo 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 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 - 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
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 GEOS
OGC SPEC s2.1.1.1
Buffer(geometry,double,[integer])
Retorna uma geometria que represente todos os pontos que distanciam desta geometria
é menor ou igual a distancia. 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 argumento
NOTA: 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 argumento
Nada 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)
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.
OGC SPEC s2.1.1.1 - also see asBinary(<geometry>,'XDR') and
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.
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.
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
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.
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 &< B
O operador "&<" retorna verdadeiro se a caixa delimitada sobrepor o próprio A ou está à
esquerda da caixa delimitada do próprio B.
A &> B
O operador "&>" retorna verdadeiro se a caixa delimitada sobrepor o próprio A ou está à
direita da caixa delimitada do próprio B.
A << B
O 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 &<| B
O operador "&<|" returna verdadeiro se a caixa delimitada do próprio A for abaixo da caixa
delimitada do próprio B.
A |&> B
O operador "|&>" returna verdadeiro se a caixa delimitada de A for acima da caixa
delimitada do próprio B.
A <<| B
O operador "<<|" retorna verdadeiro se a caixa delimitada de A for estritamente abaixo da
caixa delimitada do próprio B.
A |>> B
O operador "|>>" retorna verdadeiro se a caixa delimitada A for esttritamente acima da
caixa delimitada do próprio B.
A ~= B
O 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@B
O operador "@ " retorna verdadeiro se a caixa delimitada do próprio A estiver
completamente contido na caixa delimitada do próprio B.
A~B
O operador "~" retorna verdadeiro se a caixa delimitada estiver completamente contida na
caixa delimitada do próprio B.
A && B
O operador "&& " é o operador sobreposto. Se a caixa delimitada do prórpio A sobrepor a
caixa delimitada do próprio B, o operador retorna verdadeiro.
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.
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:
Outra forma:
SPHEROID["GRS_1980",6378137,298.257222101]
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
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".
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).
GeomFromEWKT(text)
Faz a geometria de EWKT.
GeomFromEWKB(bytea)
Faz a geometria de EWKB.
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.
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.
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.
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
Disponível: 1.1.2.
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).
Disponível: 1.1.0
Disponível: 1.1.2.
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)
Nota
A geometria retornada pode perder sua simplicidade (veja IsSimple).
Nota
Disponível: 1.0.0RC1
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.
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
Nota
Disponível: 1.1.0
line_locate_point(LineString, Point)
locate_along_measure(geometry, float8)
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.
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.
Accum(geometry set)
Agregado. Constrói um conjunto de geometrias.
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
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
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_Area
Return the area measurement of an ST_Surface or ST_MultiSurface value.
ST_AsBinary
Retorna a representação binária well-known de um valor ST_Geometry.
SQL-MM 3: 5.1.37
ST_AsText
Retorna a representação de texto well-known de um valor ST_Geometry.
SQL-MM 3: 5.1.25
ST_Boundary
Retorna o limite do valor ST_Geometry.
SQL-MM 3: 5.1.14
ST_Buffer
Retorna um buffer em torno do valor ST_Geometry.
SQL-MM 3: 5.1.17
ST_Centroid
Retorna centroid matemático do valor ST_Surface ou ST_MultiSurface.
ST_Contains
Testa se um valor ST_Geometry espacialmente contem um outro valor ST_Geometry.
SQL-MM 3: 5.1.31
ST_ConvexHull
Retorna o hull convexo do valor ST_Geometry.
SQL-MM 3: 5.1.16
ST_CoordDim
Returna a dimensão da coordenada do valor ST_Geometry.
SQL-MM 3: 5.1.3
ST_Crosses
Testa se um valor ST_Geometry espacialmente atravessa outro valor ST_Geometry.
SQL-MM 3: 5.1.29
ST_Difference
Returna um valor ST_Geometry que representa a 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_Disjoint
Testa se um valor ST_Geometry é espacialmente desconecta de outro valor
ST_Geometry.
SQL-MM 3: 5.1.26
ST_Distance
Returna a distancia entre duas geometrias.
SQL-MM 3: 5.1.23
ST_EndPoint
Returna um valor ST_Point que é o ponto final de um valor ST_Curve.
SQL-MM 3: 7.1.4
ST_Envelope
Returna o retângulo delimitado para o valor ST_Geometry.
SQL-MM 3: 5.1.15
ST_Equals
Testa se um valor ST_Geometry é espacialmente igual a outro valor ST_Geometry.
SQL-MM 3: 5.1.24
ST_ExteriorRing
Returna o anel exterior de um ST_Surface.
ST_GeometryN
Returna a indicação do valor ST_Geometry de um ST_GeomCollection.
SQL-MM 3: 9.1.5
ST_GeometryType
Returna o tipo geométrico do valor ST_Geometry.
SQL-MM 3: 5.1.4
ST_GeomFromText
Returna uma especificação do valor ST_Geometry.
SQL-MM 3: 5.1.40
ST_GeomFromWKB
Returna uma especificação do valor ST_Geometry.
SQL-MM 3: 5.1.41
ST_InteriorRingN
Returna o anel interior especificado de um valor ST_Surface.
ST_Intersection
Returna 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_Intersects
Testa se um valor ST_Geometry intercepta espacialmente outro valor ST_Geometry.
SQL-MM 3: 5.1.27
ST_IsClosed
Testa se um valor ST_Curve ou um valor ST_MultiCurve está fechado.
Nota
ST_IsEmpty
Testa se um valor ST_Geometry corresponde à um conjunto vazio.
Nota
SQL-MM 3: 5.1.7
ST_IsRing
Testa se um valor ST_Curve é um anel.
Nota
ST_IsSimple
Testa 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 3: 5.1.8
ST_IsValid
Testa se um valor ST_Geometry está bem formado.
Nota
SQL-MM 3: 5.1.9
ST_Length
Returna a medida do comprimento de um valor ST_Curve ou um valor ST_MultiCurve.
ST_LineFromText
Returna uma especificação do valor ST_LineString.
SQL-MM 3: 7.2.8
ST_LineFromWKB
Returna uma especificação de valor ST_LineString.
SQL-MM 3: 7.2.9
ST_MLineFromText
Returna uma espeficiação de valor ST_MultiLineString.
SQL-MM 3: 9.4.4
ST_MLineFromWKB
Returna uma especificação de valor ST_MultiLineString.
SQL-MM 3: 9.4.5
ST_MPointFromText
Returna uma especificação de valor ST_MultiPoint.
SQL-MM 3: 9.2.4
ST_MPointFromWKB
Returna uma especificação de valor ST_MultiPoint.
SQL-MM 3: 9.2.5
ST_MPolyFromText
Returna uma especificação de valor ST_MultiPolygon.
SQL-MM 3: 9.6.4
ST_MPolyFromWKB
Returna uma especificação de valor ST_MultiPolygon.
SQL-MM 3: 9.6.5
ST_NumGeometries
Returna o número de geometrias em um ST_GeomCollection.
SQL-MM 3: 9.1.4
ST_NumInteriorRing
Returna o número de asnéis interiores em um ST_Surface.
SQL-MM 3: 8.2.5
ST_NumPoints
Returna o número de pontos em um valor ST_LineString ou um valor ST_CircularString.
SQL-MM 3: 7.2.4
ST_OrderingEquals
ST_OrderingEquals compara duas geometrias e t (TRUE) se as geometrias 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_Overlaps
Testa se um valor ST_Geometry sobrepõe camadas espacialmente a outro valor
ST_Geometry.
SQL-MM 3: 5.1.32
ST_Perimeter
Returna a medida do comprimento do limite de um valor ST_Surface ou de um valor
ST_MultiRSurface.
ST_Point
Returna um ST_Point com os valores de coordenadas dadas.
SQL-MM 3: 6.1.2
ST_PointFromText
Returna uma especificação de valor ST_Point.
SQL-MM 3: 6.1.8
ST_PointFromWKB
Returna uma especificação de valor ST_Point.
SQL-MM 3: 6.1.9
ST_PointN
Returna uma especificação de valor ST_Point em um ST_LineString ou ST_CircularString.
ST_PointOnSurface
Returna um valor ST_Point garantido para interseção espacialmente do valor ST_Surface
ou ST_MultiSurface.
ST_PolyFromText
Returna uma especificação de valor ST_Polygon.
SQL-MM 3: 8.3.6
ST_PolyFromWKB
Returna uma especificação de valor ST_Polygon.
SQL-MM 3: 8.3.7
ST_Polygon
Returna uma construção de polígono de uma linestring especificada e SRID.
SQL-MM 3: 8.3.2
ST_Relate
Testa se um valor ST_Geometry é relatado espacialmente à outro valor ST_Geometry.
SQL-MM 3: 5.1.25
ST_SRID
Returna o identificador de sistema de referência espacial do valor ST_Geometry.
SQL-MM 3: 5.1.5
ST_StartPoint
Returna um valor ST_Point que é o ponto inicial de um valor ST_Curve.
SQL-MM 3: 7.1.3
ST_SymDifference
Returna um valor ST_Geometry que representa a diferença simétrica de um conjunto de
pontos de dois valores ST_Geometry.
SQL-MM 3: 5.1.21
ST_Touches
Testa se um valor ST_Geometry tocado espacialmente por outro valor ST_Geometry.
SQL-MM 3: 5.1.28
ST_Transform
Returna um valor ST_Geometry transformado para sistema de referência espacial
especificado.
SQL-MM 3: 5.1.6
ST_Union
Returna 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_Within
Testa se um valor ST_Geometry é espacialmente dentro de outro valor ST_Geometry.
SQL-MM 3: 5.1.30
ST_WKBToSQL
Returna um valor ST_Geometry para uma dada 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_X
Returna o valor da coordenada x de um valor ST_Point.
SQL-MM 3: 6.1.3
ST_Y
Returna o valor da coordenada y de um valoST_Point.
SQL-MM 3: 6.1.4
SE_EnvelopesIntersect
Returna t (TRUE) se os envelopes de duas interseções de geometrias; caso
contrário, returna f (FALSE).
SE_Is3d
Testa se um valor de geometria tem valores de coordenada z.
SE_IsMeasured
Testa se um valor de geometria tem valores de coordenada m.
SE_LocateAlong
Returna um valor de coleção de geometria derivada com elementos que combinam a
medida especificada.
SE_LocateBetween
Returna um valor de coleção de geometria derivada com elementos que combinam a
escala especificada das medidas inclusive.
SE_M
Returna o valor da coordenada m de um valor ST_Point.
SE_Z
Returna o valor da coordenada z de um valor ST_Point.
Capítulo 7. Relatando Erros
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ão
A.1.1. Versão 1.2.1
A.1.2. Versão 1.2.0
A.1.3. Versão 1.1.6
A.1.4. Versão 1.1.5
A.1.5. Versão 1.1.4
A.1.6. Versão 1.1.3
A.1.7. Versão 1.1.2
A.1.8. Versão 1.1.1
A.1.9. Versão 1.1.0
A.1.10. Versão 1.0.6
A.1.11. Versão 1.0.5
A.1.12. Versão 1.0.4
A.1.13. Versão 1.0.3
A.1.14. Versão 1.0.2
A.1.15. Versão 1.0.1
A.1.16. Versão 1.0.0
A.1.17. Versão 1.0.0RC6
A.1.18. Versão 1.0.0RC5
A.1.19. Versão 1.0.0RC4
A.1.20. Versão 1.0.0RC3
A.1.21. Versão 1.0.0RC2
A.1.22. Versão 1.0.0RC1
A.1. Notas da Versão
A.1.1.1. Mudanças
A.1.2.1. Mudanças
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.4.1. Melhorias
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.5.1. Melhorias
A.1.5.2. Correções
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
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
A.1.7.2. Correções
A.1.8.1. Melhorias
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
A.1.9.4. Correções
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.10.1. Melhorias
A.1.10.3. Improvements
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
A.1.12.1. Melhorias
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.1. Melhorias
A.1.13.2. Correções
A.1.13.3. Melhorias
A.1.14.2. Correções
A.1.14.3. Melhorias
A.1.15.1. Melhorias
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
A.1.17.1. Melhorias
CORREÇÃO em multi().
pronto return [when noop] do multi().
A.1.17.3. Mudanças de Scripts
A.1.18.1. Melhorias
A.1.19.1. Melhorias
A.1.20.1. Melhorias
A.1.22.2. Mudanças