terça-feira, 14 de junho de 2011

Preparando seu banco de dados para utilizar a geometria do PostGIS


Para utilizar o tipo de geometria do PostGIS você deve instalar o PostGIS.
Instale o PostGIS após você instalar o PostgreSQL.
Para obter a versão do PostGIS suportada pelo ArcSDE você pode instalar o PostgreSQL StackBuilder durante a instalação do PostgreSQL no Windows. Ou então, consulte o web site http://www.postgis.org/download/ ou o web site da PgFoundry em http://pgfoundry.org/ para fazer download dos arquivos de instalação. Certifique-se de fazer download dos arquivos de instalação compatíveis com seu sistema operacional.

Dica:
Consulte a página de requisitos de sistema do ArcGIS Server na página de suporte da ESRI para mais informações sobre as versões do PostGIS suportadas com o ArcSDE.
Quando você instala o PostGIS, um banco de dados template do PostGIS é criado em seu cluster de banco de dados do PostgreSQL. Utilize o template do banco de dados do PostGIS para criar um banco de dados para armazenar o seu geodatabase.

Nota:
Se você criar seu geodatabase através do wizard de Post Installation do ArcSDE, seu banco de dados é criado utilizando um template diferente do template do PostGIS. Entretanto, se você deseja utilizar o tipo de geometria do PostGIS, você precisa sair do wizard de instalação antes de iniciar o setup do post-installation e criar manualmente um banco de dados utilizando o template do PostGIS, um usuário sde e um esquema sde no banco de dados. Em seguida, você pode completar o resto dos passos do post-installation utilizando o wizard: escolha a opção Custom na caixa de diálogo do wizard do Post Installation, clique em Next e então desmarque a opção Define SDE User Environment.
Concendendo privilégios para criar tabelas com as colunas de geometria do PostGIS
Quando um banco de dados é habilitado para utilizar o PostGIS, as tabelas geometry_columns e spatial_ref_sys são criadas no esquema public. Você deve conceder ao menos os privilégios de SELECT, INSERT, UPDATE e DELETE na tabela geometry_columns e de SELECT na tabela spatial_ref_sys para o usuário sde e para qualquer outro usuário que for criar dados no geodatabase.
GRANT select, insert, update, delete
ON TABLE public.geometry_columns
TO <user_name>;

GRANT select
ON TABLE public.spatial_ref_sys
TO <user_name>;


fonte: ArcGIS Resource Center

segunda-feira, 13 de junho de 2011

ArcGIS e o tipo de geometria do PostGIS

PostGIS é um produto da Refractions Research que habilita espacialmente o banco de dados PostgreSQL. O PostGIS segue o Open Geospatial Consortium, Inc. e as especificações de Simple Features para linguagem de consultas estruturadas (SQL).
Quando você for utilizar o tipo de geometria de amazenamento do PostGIS com o ArcGIS, tenha as seguintes regras em mente:
·         Você deve utilizar um template do banco de dados PostGIS para criar um banco de dados no PostgreSQL e utilizar o geodatabase. Consulte o post “Preparando seu banco de dados para utilizar a geometria do PostGIS”.
·         O usuário do sde e qualquer usuário que cria dados no geodatabase deve ter permissões concedidas em tabelas específicas no PostGIS. Consulte o post “Concedendo privilégios aos usuários que criam tabelas com colunas de geometria no PostGIS”.
·         As classes de feições que você criar podem somente utilizar as referências espaciais listadas na tabela public.spatial_ref_sys do PostGIS. Se você especificar uma referência espacial que não esteja nesta tabela o processo de criação da classe de feição irá apresentar erro.
·         Você deve especificar uma chave de configuração que contenha o parâmetro GEOMETRY_STORAGE definido para PG_GEOMETRY para criar uma classe de feição que utiliza o tipo de geometria do PostGIS.
Os posts seguintes contém mais informações sobre como utilizar o tipo de geometria do PostGIS com aplicações ArcGIS.

fonte: ArcGIS Resource Center

O que é o tipo de geometria do PostGIS?

O PostGIS é um produto da Refractions Research que permite suportar tipos de dados espaciais do PostGIS no banco de dados PostgreSQL. O PostGIS segue os padrões do Open Geospatial Consortium, Inc. (OGC) e das especificações de Simple Features para a linguagem de consulta estruturada (SQL). Ele utiliza um binário bem conhecido (WKB) e um texto bem conhecido (WKT) para representação da geometria. Essencialmente, o PostGIS adiciona um tipo espacial para o PostgreSQL.
Classes de feições do tipo PostGIS possuem uma tabela de negócios contendo uma coluna espacial referente ao tipo da geometria.
Uma vez que a coluna da geometria é adicionada à tabela, ela deve ser registrada com o ArcSDE através do comando sdelayer –o register se você deseja utilizar o dado com uma aplicação cliente do ArcSDE. Consulte o guia do ArcSDE (ArcSDE Administration Command Reference) para mais detalhes a respeito do uso deste comando. As tabelas do PostGIS também podem ser lidas diretamente no ArcGIS  a partir da versão 10 se você utilizar a opção Query Layers (No ArcMap, File > Add Data > Add Query Layer...) ou em versões anteriores através da extensão ArcGIS Data Interoperability.

Dica:

Consulte a documentação do PostGIS  a partir do Refractions Research's para mais informações sobre as sintaxes SQLs usadas para riar colunas espaciais através do PostGIS, validar a geometria e acessar as tabelas e colunas espaciais dos tipos de geometrias.

fonte: ArcGIS Resource Center

sexta-feira, 10 de junho de 2011

Quais são os tipos de armazenamento do ST_Geometry?

O tipo de dados ST_Geometry são um tipo de dados definidos pelo usuário (user-defined data type - UDT) que permite a você definir colunas que armazenam dados espaciais.
O ST_Geometry por si só é uma superclasse abstrata e não-instanciada. Entretanto, suas subclasses podem ser instanciadas. Um tipo de dados instanciado é um que pode ser definido como uma coluna de uma tabela e ter valores de seus tipos inseridos dentro dele.
Embora você possa definir uma coluna com o tipo ST_Geometry, você não pode inserir valores dentro da coluna ST_Geometry devido ao fato dela não ser instanciada. Ao invés disso, você insere valores na subclasse.
O seguinte gráfico demostra a hierarquia do tipo de dados do ST_Geometry e suas subclasses. Veja que o ST_Curve, ST_Surface, ST_MultiCurve e o ST_MultiSurface são definidos para serem tipos não-instanciados. Nenhum construtor foi definido para esses tipos.


A superclasse ST_Geometry e suas subclasses
Subclasses
As subclasses dos ST_Geometry's estão divididas dentro de duas categorias: a subclasse de geometria base e a subclasse de coleções homogêneas. As geometrias base incluem o ST_Point, ST_LineString e ST_Polygon, enquanto as coleções homogêneas incluem o ST_MultiPoint, ST_MultiLineString e o ST_MultiPolygon. Como o próprio nome indica, as coleções homogêneas são coleções de geometrias base. Além de compartilhar as propriedades das geometrias base, as coleções homogêneas possuem suas próprias propriedades.
Cada subclasse armazena os tipos de geometria implícita ao seu nome; por exemplo, ST_MultiPoint armazena multipontos. Cada subclasse possui funções particulares que podem retornar informações sobre a subclasse. Um resumo das subclasses, suas descrições e exemplos de funções que podem ser utilizadas para obter informações sobre elas estão listadas na tabela abaixo:


Subtipo
Descrição
Funções usadas com o subtipo
ST_Point
·         Uma geometria de zero-dimensão que ocupa uma posição única nas coordenadas do espaço
·         Possui um único valor de coordenadas x,y, é sempre único e possui contorno NULO.
·         Usado para definir feições como poços de petróleo, marcações e elevações.
·         ST_X—Retorna o valor de coordenada x de um ponto como um número de precisão double.
·         ST_Y—Retorna o valor de coordenada y de um ponto como um número de precisão double.
·         ST_Z—Retorna o valor de coordenada z de um ponto como um número de precisão double.
·         ST_M—Retorna o valor de coordenada m de um ponto como um número de precisão double.
ST_LineString
·         Um objeto de uma-dimensão armazenado como uma sequência de pontos definindo um caminho linear interpolado.
·         ST_LineStrings possui um comprimento (length).
·         O ST_LineString é único se ele não intersecta com seu próprio interior.
·         Os endpoints (o contorno) de um ST_LineString fechado ocupam o mesmo ponto no espaço.
·         Um ST_LineString é um anel se estiver fechado e for único.
·         Os endpoints normalmente formam o contorno de um ST_LineString a menos que o ST_LineString esteja fechado, neste caso o contorno será Nulo.  
·         O interior de uma ST_LineString é o caminho que se encontra conectado entre os endpoints, a menos que ele esteja fechado, neste caso o interior será contínuo.
·         ST_LineStrings são na maioria das vezes usados pra definir feições lineares como rodovias, rios e linhas de transmissão de energia.
·         ST_StartPoint—Retorna o primeiro ponto de uma linestring.
·         ST_EndPoint—Retorna o último ponto de uma linestring.
·         ST_PointN —Pega uma linestring e um índice e retorna o número de pontos e retorna estes pontos.
·         ST_Length—Retorna o comprimento das linestrings como um número de precisão double.
·         ST_NumPoints—Retorna o número de pontos numa sequência de linestrings como um inteiro.
·         ST_IsRing—Retorna 1 (TRUE) se uma linestring é um anel (ring) ou 0 (FALSE) se ela não for.
·         ST_IsClosed—Retorna 1 (TRUE) se uma linestring está fechada ou  0 (FALSE) se ela não está.
ST_Polygon
·         Uma superfície bi-dimensional armazenada como uma sequência de pontos definindo seu limite exterior.
·         O ST_Polygon possui área e é sempre único.
·         Os contornos exteriores e interiores definem os limites de um ST_Polygon e o espaço fechado entre os contornos define o interior do ST_Polygon.
·         O contorno de um ST_Polygon pode intersectar um ponto tangente mas nunca cruzá-lo.
·         Define parcelas de terreno, contornos d’água e outras feições com extensão espacial.
·         ST_Area—Retorna a área de um polígono como um número de precisão double.
·         ST_ExteriorRing—Retorna o polígono do contorno exterior como uma linestring
·         ST_NumInteriorRing—Retorna o número de contornos interiores que um polígono contém
·         ST_InteriorRingN— Pega um polígono e um índice e retorna o número de contornos como uma linestring.
·         ST_Centroid—Retorna um ponto que está no centro do envelope de um polígono.
·         ST_PointOnSurface—Retorna um ponto que está na superfície de um polígono.
ST_MultiPoint
·         Uma coleção de ST_Points
·         Têm uma dimensão 0.
·         Um ST_MultiPoint é único se nenhum de seus elementos ocupar a mesma coordenada no espaço.
·         O limite de um ST_MultiPoint é Nulo.
·         Define coisas como padrões de frequência aéreas e incidentes de um surto de doença
ST_MultiLineString
·         Uma coleção de ST_LineStrings
·         ST_MultiLineStrings possuem comprimento (length).
·         ST_MultiLineStrings são únicas se elas somente interseccionam os endpoints dos elementos de uma ST_LineString.
·         ST_MultiLineStrings não são únicas se o interior dos elementos de ST_LineString se intersectam.
·         O contorno de um ST_MultiLineString são os endpoints não interseccionados dos elementos de ST_LineString.
·         Um ST_MultiLineString está fechado se todos os seus elementos de ST_LineString estiverem fechados.
·         O contorno de um ST_MultiLineString é Nulo se todos os endpoints de todos os seus elementos estão interseccionados.
·         Utilizado para definir entidades como redes de drenagens e de rodovias.
·         ST_Length—Retorna o comprimento acumulado de todos os elementos ST_LineString de uma multilinestring como um número de precisão double.
·         ST_IsClosed—Retorna 1 (TRUE) se uma multilinestring está fechada e 0 (FALSE) se estiver aberta.
ST_MultiPolygon
·         Uma coleção de polígonos
·         ST_MultiPolygons possuem área.
·         O contorno de um ST_MultiPolygon será o comprimento acumulado de seus elementos exteriores e contornos interiores.
·         O interior de um ST_MultiPolygon é definido conforme a soma dos interiores de seus elementos ST_Polygons
·         O contorno dos elementos de um ST_MultiPolygon podem somente interseccionar um ponto tangente.
·         Define feições como uma porção de floresta ou terras não contíguas como a cadeia de ilhas do Pacífico.
·         ST_Area—Retorna a somatória da área (ST_Area) dos elementos de polígono de um multipolígono como um número de precisão double.
·         ST_Centroid—Retorna um ponto que é o centro do envelope de um multipolígono.
·         ST_PointOnSurface—Retorna um ponto que está  na superfície de um dos elementos de polígono de um multipolígono.

Subtipos do ST_Geometry

Note que cada subclasse herda as propriedades da superclasse do ST_Geometry mas também possui suas próprias propriedades. Funções que operam em tipos de dados no ST_Geometry aceitam quaisquer das subclasses de tipos de dados. Entretanto, algumas funções foram definidas com base no nível da subclasse e somente aceitam determinadas subclasses. Por exemplo, a função ST_GeometryN somente aceita valores dos subtipos ST_MultiLinestring, ST_MultiPoint ou ST_MultiPolygon como entrada.
Para explorar a subclasse de um ST_Geometry, você pode usar a função ST_GeometryType. A função ST_GeometryType pega um ST_Geometry e retorna uma subclasse instanciada na forma de um caractere string. Para saber como vários elementos de geometrias base estão contidos numa coleção homogênea, você pode utilizar a função ST_NumGeometries, na qual pega uma coleção homogênea e retorna o número de elementos de geometria base que ela contém.

fonte: ArcGIS Resource Center

quarta-feira, 1 de junho de 2011

Quais são os tipos de dados definidos pelo usuário (user-defined)?

Tipos de dados definidos pelo usuário (User-Defined data Types ou UDTs) são objetos para armazenamento de dados que um programador define para atender as necessidades de uma aplicação. Devido à sua definição ser feita pelo programador, os UDTs são lidos por um sistema de gerenciamento de banco de dados (DBMS) e, então armazenados no banco de dados através de um tipo de dados nativo ao DBMS.
O ArcSDE geodatabase utiliza vários UDTs diferentes. Alguns foram definidos pela ESRI e outros foram definidos por companhias ou organizações fora da ESRI. Todos os UDTs utilizados pelo ArcSDE geodatabase armazenam dados espaciais, tanto para vetor ou raster.
Os UDTs suportados são:
- ST_Geometry
- ST_Raster
- PostGIS Geometry
- SDO_Geometry (Oracle)
- SDO_GeoRaster (Oracle)
- Microsoft SQL Server Geometry
- Microsoft SQL Server Geography

fonte: ArcGIS Resource Center

Comparativo sobre tipos de dados do ArcGIS, ArcSDE e PostgreSQL

Quando você cria uma tabela ou adiciona uma coluna a uma tabela num banco de dados, as colunas não criadas conforme o tipo de dados específico. Tipos de dados são classificações que identificam possíveis valores para operações que podem ser feitas sobre os dados, assim como a maneira como o dado em cada coluna é armazenado no banco de dados.
Quando você importa dados de um tipo dentro de uma coluna de outro tipo de dados, você precisa entender qual tipo de dado equivalente é equivalente entre o ArcSDE e seu sistema de gerenciamento de banco de dados (DBMS) pois pode haver impacto no conteúdo do dado. Além disso, ao criar novos datasets no ArcGIS, é importante conhecer os tipos de dados equivalentes entre o ArcGIS e o seu DBMS.
Quando você criar uma classe de feição ou tabela no ArcGIS, existem 11 possíveis tipos de dados que você pode atribuir a uma coluna. Isto significa que alguns tipos de dados podem somente ser criados fora do ArcGIS.

ArcSDE
(tipos de dados)
PostgreSQL
(tipos de dados)
ArcGIS
(tipos de dados)
Notas
SE_STRING_TYPE
VARCHAR
TEXT
SE_INT16_TYPE (SE_SMALLINT_TYPE)
SMALLINT
SHORT INTEGER
SE_INT32_TYPE (SE_INTEGER_TYPE)
INTEGER
LONG INTEGER
SE_INT64_TYPE
BIGINT
N/A
O parâmetro de configuração do servidor INT64TYPES deve ser TRUE para criar colunas com este tipo de dado.
SE_FLOAT32_TYPE (SE_FLOAT_TYPE)
REAL
N/A
SE_FLOAT64_TYPE (SE_DOUBLE_TYPE)
NUMERIC(n,m)
N/A
SE_DATE_TYPE
TIMESTAMP WITHOUT ZONE
DATE
SE_UUID_TYPE
VARCHAR(38)
GUID
SE_BLOB_TYPE
BYTEA
BLOB
SE_SHAPE_TYPE
ST_GEOMETRY ou GEOMETRY *
GEOMETRY
O tipo de dado do PostgreSQL depende da chave de configuração (configuration keyword) usada ao criar uma camada: ST_GEOMETRY ou PG_GEOMETRY (geometria do PostGIS).
SE_XML_TYPE
SDE_XML or XML
N/A
Colunas XML não são expostas no ArcGIS Desktop.
SE_RASTER_TYPE
BYTEA ou ST_RASTER
RASTER
Tipos de dados raster do PostgreSQL dependem do armazenamento específico na tabela DBTUNE.
Você deve configurar separadamente o ST_Raster no banco de dados. Consulte as instruções no post Instalando o_tipo_ST_Raster no PostgreSQL.
SE_STRING_TYPE
INTEGER
OBJECTID
NUMERIC(38,8)
FLOAT
NUMERIC(38,8)
DOUBLE
Comparativo entre os tipos de dados no PostgreSQL
*ST_Geometry e geometry são superclasses. Ao criar uma classe de feição no ArcGIS Desktop, tal classe de feição de pontos quando criada como ST_Geometry utiliza um subtipo ST_Point e quando criada com a geometria do PostGIS, utiliza um subtipo Point para seu armazenamento. Para todos os outros tipos de classes de feição criadas no ArcGIS Desktop, uma superclasse é utilizada. Se você criar uma coluna espacial utilizando SQL, o subtipo de dados atual criado depende de qual tipo de subtipo você especificou.

fonte: ArcGIS Resource Center