Interface para Consultas Interface para Consultas Espaciais em Banco Espaciais em Banco
de Dados Geográficosde Dados Geográficos
Orientadores
João Argemiro Carvalho Paiva
Gilberto Câmara
Karine Reis Ferreira
Estrutura da apresentaçãoEstrutura da apresentação
• Introdução• Sistemas de Informações Geográficos - SIGs• Sistemas de Banco de Dados Geográficos
– Oracle Spatial
• TerraLib• OpenGIS• A Interface• Considerações finais
IntroduçãoIntrodução
• ObjetivoDesenvolver uma interface de programação genérica (API) para consultas espaciais em Banco de Dados Geográficos para a biblioteca TerraLib
• Um nível maior de abstração para os usuários da TerraLib
• Fornecer consultas a dados vetoriais e a dados matriciais
• Suportar diferentes SGBDs
• Explorar o máximo os recursos de extensões espaciais
IntroduçãoIntrodução
• Motivação
Consultas Espaciais Suporte básico para a construção de SIGs
Contribuir para o desenvolvimento da
TerraLib
Incentivo a SIGs de código fonte aberto e gratuito no mercado
Sistemas de Informações GeográficasSistemas de Informações Geográficas
• Evolução das arquiteturas de SIGs– Dual
– Integrada • SGBD Relacional• SGBD Objeto-Relacional
Arquivos Proprietários
SGBD
Sistema de Informação Geográfica
Dados espaciais Dados alfanuméricos
• Falta de Interoperabilidade
• Consultas mais lentas
• Dificuldade em manter a integridade entre dados espaciais e alfanuméricos
Sistemas de Informações GeográficasSistemas de Informações Geográficas
• Evolução das arquiteturas de SIGs– Dual
– Integrada • SGBD Relacional• SGBD Objeto-Relacional
• Não é capaz de capturar a semântica do dado espacial
• Limitações da SQL
• Métodos de acesso espacial e otimizador de consultas implementados pelo SIG
SGBD relacional
Sistema de Informação Geográfica
Dados espaciais Dados alfanuméricos
Sistemas de Informações GeográficasSistemas de Informações Geográficas
• Evolução das arquiteturas de SIGs– Dual
– Integrada • SGBD Relacional• SGBD Objeto-Relacional
SGBD objeto-relacional
Sistema de Informação Geográfica
Dados espaciais Dados alfanuméricos
• Tipos de dados espaciais
• Operadores e funções para consultas e junções espaciais
• Indexação espacial e otimização de consultas
Sistemas de Banco de Dados GeográficosSistemas de Banco de Dados Geográficos
• SGBD Objeto-Relacional são estendidos para suportar:
– Tipos de dados espaciais, como ponto, linha, etc;
– Operadores e funções espaciais + SQL: manipulação desses dados (junção e consultas);
– Métodos eficientes de acesso aos dados espaciaisl
• Extensões existentes:– Oracle Spatial
– IBM DB2 Spatial Extender
– Informix Spatial Datablade
– PostGIS
Sistemas de Banco de Dados GeográficosSistemas de Banco de Dados Geográficos
• Oracle Spatial: extensão espacial do SGBD Oracle
– Tipos de dados espaciais
– Funções e operadores espaciais
– Métodos de indexação espacial
SDO_GTYPE NUMBERSDO_SRID NUMBERSDO_POINT SDO_POINT_TYPESDO_ELEM_INFO SDO_ELEM_INFO_ARRAYSDO_ORDINATES SDO_ORDINATE_ARRAY
SDO_GEOMETRY Plano
Geometria
ElementoCREATE TABLE ESTADOS (estado_id NUMBER,nome VARCHAR2(100)geometria
MDSYS.SDO_GEOMETRY);
Sistemas de Banco de Dados GeográficosSistemas de Banco de Dados Geográficos
• Oracle Spatial: extensão espacial do SGBD Oracle
– Tipos de dados espaciais
– Funções e operadores espaciais
– Métodos de indexação espacial
SDO_RELATE
SDO_DISTANCE
SDO_INTERSECTION
SDO_DIFFERENCE
SDO_UNION
SDO_XOR
SDO_BUFFER
SDO_CONVEXHULL
SELECT ES.estado_idFROM Estado ES, Rios RIWHERE RI.gid = 234 AND
SDO_RELATE(ES.geometria, RI.geometria,
‘mask=CONTAINS querytype=WINDOW’) = ’TRUE’;
SELECT SDO_GEOM.SDO_INTERSECTION (ES.geometria, FL.geometria, 0.005)FROM Estado ES, Floresta FLWHERE ES.nome = 'Pará' AND FL.nome = 'Amazonia';
Operadores e Funções baseados na matriz de 9-Interseções
Sistemas de Banco de Dados GeográficosSistemas de Banco de Dados Geográficos
• Oracle Spatial: extensão espacial do SGBD Oracle
– Tipos de dados espaciais
– Funções e operadores espaciais
– Métodos de indexação espacial
Quad-Tree R-Tree
2
3
4
5
6
7
8
9
10
11
1312
114
a
b
c
d
R
2
3
4
5
6
7
8
9
10
11
1312
114
a
b
cd R
X
Y
ZT
TerraLibTerraLib
• Biblioteca de classes • Suporte a SIGs de arquitetura integrada• Paradigmas:
– Orientação a Objetos
– Programação Genérica
– Design Patterns
• Composta por:– Kernel
– Drivers
– Functions
BD
TerraLib
Jfddfjh gfsdfgdfssf fsdf fsdfsd sdfsdfJfddfjh gfsdfgdfssf fsdf fsdfsd sdfsdf
Jfddfjh gfsdfgdfssf fsdf fsdfsd sdfsdf
• Execução de consultas SQL e manipulação dos resultados
• Inserção, atualização e recuperação de dados alfanuméricos e geográficos
• Conexão
• Execução de comandos SQL: DDL e DML
• Criação do modelo TerraLib
Interface com SGBDs : Drivers
TePostgreSQLTeOracle
TeDatabase
TerraLibTerraLib
TeOraclePortal TePostgreSQLPortal
TeDatabasePortal
OpenGISOpenGIS
• Arquitetura padrão para SIGs;• Operadores espaciais (relações topológicas)
– Modelo da Matriz de 9-Interseções Estendido Dimensionalmente (DE-9IM)
Equals Overlaps Touches Within Crosses Disjoint Intersects Contains Relate.
• Funções para testar relações de distância e que retornam novas geometrias
Distance Intersection Difference Union SymDifference ConvexHull Buffer
A InterfaceA Interface
• Consultas espaciais– métodos da classe TeDatabase
– genéricas para todos os SGBDs
– consultas são computadas pela TerraLib
• Consultas espaciais a dados vetoriais– Baseadas nas especificações do OpenGIS
– Re-implementadas nos drivers de SGBDs que possuem extensões espaciais
• exploração de seus recursos• operadores e funções espaciais com SQL• consultas são computadas pelo SGBD
A InterfaceA Interface
– Operador Espacial Contains
bool Contains(const string& table1, const string& column1, const string& table2, const string& column2, const double id2, TeDatabasePortal& *Portal);bool Contains(const string& table1, const string& column1, const double id1, const string& table2, const string& column2, const double id2, bool *Result);boolContains(const string& table, const string& column, const TeGeometry& geom, TeDatabasePortal& *Portal);bool Contains(const string& table, const string& column, const double id, const TeGeometry& geom, bool *Result);
1 São José 0402470247
2 Vilade 0398103898
3 Curitiba 6549876465
4 Lourdes 4579454845
5 Fabriciano 1465487946
Id Name Spatial Data1 São José 0402470247
2 Vilade 0398103898
3 Curitiba 6549876465
4 Lourdes 4579454845
5 Fabriciano 1465487946
Id Name Spatial Data
Table 1 Table 2
A InterfaceA Interface
bool Contains(const string& table1, const string& column1, const string& table2, const string& column2, const double id2, TeDatabasePortal& *Portal);bool Contains(const string& table1, const string& column1, const double id1, const string& table2, const string& column2, const double id2, bool *Result);boolContains(const string& table, const string& column, const TeGeometry& geom, TeDatabasePortal& *Portal);bool Contains(const string& table, const string& column, const double id, const TeGeometry& geom, bool *Result);
1 São José 0402470247
2 Vilade 0398103898
3 Curitiba 6549876465
4 Lourdes 4579454845
5 Fabriciano 1465487946
Id Name Spatial Data1 São José 0402470247
2 Vilade 0398103898
3 Curitiba 6549876465
4 Lourdes 4579454845
5 Fabriciano 1465487946
Id Name Spatial Data
Table 1 Table 2
– Operador Espacial Contains
A InterfaceA Interface
bool Contains(const string& table1, const string& column1, const string& table2, const string& column2, const double id2, TeDatabasePortal& *Portal);bool Contains(const string& table1, const string& column1, const double id1, const string& table2, const string& column2, const double id2, bool *Result);boolContains(const string& table, const string& column, const TeGeometry& geom, TeDatabasePortal& *Portal);bool Contains(const string& table, const string& column, const double id, const TeGeometry& geom, bool *Result);
1 São José 0402470247
2 Vilade 0398103898
3 Curitiba 6549876465
4 Lourdes 4579454845
5 Fabriciano 1465487946
Id Name Spatial Data
Table TeGeometry TeGeometry
– Operador Espacial Contains
A InterfaceA Interface
bool Contains(const string& table1, const string& column1, const string& table2, const string& column2, const double id2, TeDatabasePortal& *Portal);bool Contains(const string& table1, const string& column1, const double id1, const string& table2, const string& column2, const double id2, bool *Result);boolContains(const string& table, const string& column, const TeGeometry& geom, TeDatabasePortal& *Portal);bool Contains(const string& table, const string& column, const double id, const TeGeometry& geom, bool *Result);
1 São José 0402470247
2 Vilade 0398103898
3 Curitiba 6549876465
4 Lourdes 4579454845
5 Fabriciano 1465487946
Id Name Spatial Data
Table TeGeometry TeGeometry
– Operador Espacial Contains
A InterfaceA Interface
bool Buffer (const string& table, const string& column, const double id, const double distance, TePolygon *bufferResult;
– Driver TeOracle - Oracle Spatial
• Operadores e funções + SQL• Computadas pelo SGBD
– Função Buffer
SELECT SDO_GEOM.SDO_BUFFER (T.column, M.diminfo, distance)FROM table T, user_sdo_geom_metadata MWHERE M.table_name = 'table' AND
M.column_name = 'column' AND T.indice = id;
SELECT T1.id, T1.columnFROM Table1 T1, Table2 T2WHERE T2.id = id2 AND
SDO_RELATE(T1.column, T2.column, ‘mask=CONTAINS querytype=WINDOW’)= ’TRUE’;
A InterfaceA Interface
• Consultas espaciais a dados matriciais– Baseadas nas operações da linguagem LEGAL
– Operações zonais• calcular estatísticas simples de um conjunto de
valores de um raster que estão contidos em uma determinada zona delimitada por um polígono
- Soma
- Média
- Variância
- Máximo Valor
...
A InterfaceA Interface
– Transformação de coordenadas • conversão de coordenadas do mundo para a linha
e coluna correspondente do raster, e vice-versa.
– Mask• recorta um raster a partir de outro ou a partir de
um polígono
– Operações de transformação• Reclassify: classes novas classes• Slice: numérico temático• Weight: temático numérico
– Operações aritméticas• Executa operações matemáticas sobre um
conjunto de rasters.
A InterfaceA Interface
• Consultas a dados matriciais– Operações zonais
– Transformação de coordenadas
– Mask
– Operações de transformação
– Operações aritméticas
typedef map<string, double> statistics;
bool ZonalOperator (const string& table, const string& column,
const TePolygon& geom, statistics& result);
A InterfaceA Interface
bool WorldCoordToRowCol (const TePoint& WC, const string&
table, const string& column, TePoint *RC);
bool RowColToWorldCoord (const TePoint& RC, const string&
table,const string& column, TePoint *WC);
• Consultas a dados matriciais– Operações zonais
– Transformação de coordenadas
– Mask
– Operações de transformação
– Operações aritméticas
A InterfaceA Interface
bool Mask (const string& table1, const string& column1, const string& table2, const string& column2, TeRaster *result);
bool Mask (const string& table, const string& column, const TePolygon& geom, TeRaster *result);
• Consultas a dados matriciais– Operações zonais
– Transformação de coordenadas
– Mask
– Operações de transformação
– Operações aritméticas
A InterfaceA Interface
typedef map<double, double> interval
bool Slice (const string& table, const string& column, const map<interval, string>& rules, const string& TabAtribOut, TeRaster *result);
• Consultas a dados matriciais– Operações zonais
– Transformação de coordenadas
– Mask
– Operações de transformação
– Operações aritméticas
A InterfaceA Interface
typedef map<string, string> table;
bool Calculate (const map<char, table>& Imagens, string&
mathexp, TeRaster *result);
• Consultas a dados matriciais– Operações zonais
– Transformação de coordenadas
– Mask
– Operações de transformação
– Operações aritméticas
Considerações FinaisConsiderações Finais
• Trabalhos realizados:– Desenvolvimento do driver TeOracle utilizando
OCI (Oracle Call Interface)
– Definição das consultas da API
• Espera-se:– Cumprir o trabalho no prazo estipulado
– Desenvolver a API com todas características definidas:
• genérica• exploração dos recursos de extensões espaciais
– Contribuir com esse trabalho para o desenvolvimento da TerraLib
Top Related