proposta_karine

Propaganda
Interface para Consultas
Espaciais em Banco
de Dados Geográficos
Karine Reis Ferreira
Orientadores
João Argemiro Carvalho Paiva
Gilberto Câmara
Estrutura 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ção
• Objetivo
Desenvolver 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ção
• Motivação
Consultas Espaciais
Contribuir para o
desenvolvimento da
TerraLib
Suporte básico para a
construção de SIGs
Incentivo a SIGs de
código fonte aberto e
gratuito no mercado
Sistemas de Informações Geográficas
• Evolução das arquiteturas de SIGs
– Dual
– Integrada
• SGBD Relacional
• SGBD Objeto-Relacional
• Falta de Interoperabilidade
• Consultas mais lentas
• Dificuldade em manter a
integridade entre dados
espaciais e alfanuméricos
Sistemas 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
Sistemas de Informações Geográficas
• Evolução das arquiteturas de SIGs
– Dual
– Integrada
• SGBD Relacional
• SGBD Objeto-Relacional
• 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á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á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_GEOMETRY
SDO_GTYPE
SDO_SRID
SDO_POINT
SDO_ELEM_INFO
SDO_ORDINATES
Plano
NUMBER
NUMBER
SDO_POINT_TYPE
SDO_ELEM_INFO_ARRAY
SDO_ORDINATE_ARRAY
CREATE TABLE ESTADOS (
estado_id NUMBER,
nome
VARCHAR2(100)
geometria MDSYS.SDO_GEOMETRY);
Geometria
Elemento
Sistemas 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
Operadores e Funções baseados
na matriz de 9-Interseções
SELECT
FROM
WHERE
ES.estado_id
Estado ES, Rios RI
RI.gid = 234 AND
SDO_RELATE(ES.geometria,
RI.geometria,
‘mask=CONTAINS querytype=WINDOW’)
= ’TRUE’;
SDO_UNION
SELECT
SDO_XOR
FROM
WHERE
SDO_GEOM.SDO_INTERSECTION
(ES.geometria, FL.geometria, 0.005)
Estado ES, Floresta FL
ES.nome = 'Pará'
AND
FL.nome = 'Amazonia';
SDO_RELATE
SDO_DISTANCE
SDO_INTERSECTION
SDO_DIFFERENCE
SDO_BUFFER
SDO_CONVEXHULL
Sistemas 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
11
X
14
1
5
Y
2
b
11
d
14
1
5
8
8
2
6
6
12
12
13
a
Z
a
13
c
T
3
3
9
9
10
10
7
7
4
4
d
R
Quad-Tree
b
R
c
R-Tree
TerraLib
• 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
Jfddfjh gfsdfgdfssf
Jfddfjh gfsdfgdfssf
Jfddfjh gfsdfgdfssf
fsdf fsdfsd
fsdf fsdfsd
fsdf fsdfsd
sdfsdf
sdfsdf
sdfsdf
TerraLib
BD
TerraLib
Interface com SGBDs : Drivers
• Conexão
• Execução de comandos
SQL: DDL e DML
• Criação do modelo TerraLib
TeDatabase
TeOracle
TePostgreSQL
• Execução de consultas SQL e
manipulação dos resultados
• Inserção, atualização e
recuperação de dados
alfanuméricos e geográficos
TeDatabasePortal
TeOraclePortal
TePostgreSQLPortal
OpenGIS
• Arquitetura padrão para SIGs;
• Operadores espaciais (relações topológicas)
– Modelo da Matriz de 9-Interseções Estendido
Dimensionalmente (DE-9IM)
Equals
Disjoint
Overlaps
Intersects
Touches
Contains
Within Crosses
Relate.
• Funções para testar relações de distância e que
retornam novas geometrias
Distance
Intersection
SymDifference
Difference
ConvexHull
Union
Buffer
A 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 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);
bool
Contains(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);
Table 1
Table 2
Id Name
1 São José
Spatial Data
0402470247
Id Name
1 São José
Spatial Data
0402470247
2
Vilade
0398103898
2
Vilade
0398103898
3
Curitiba
6549876465
3
Curitiba
6549876465
4
Lourdes
4579454845
4
Lourdes
4579454845
5
Fabriciano 1465487946
5
Fabriciano 1465487946
A 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);
bool
Contains(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);
Table 1
Table 2
Id Name
1 São José
Spatial Data
0402470247
Id Name
1 São José
Spatial Data
0402470247
2
Vilade
0398103898
2
Vilade
0398103898
3
Curitiba
6549876465
3
Curitiba
6549876465
4
Lourdes
4579454845
4
Lourdes
4579454845
5
Fabriciano 1465487946
5
Fabriciano 1465487946
A 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);
bool
Contains(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);
Table
Id Name
1 São José
Spatial Data
0402470247
2
Vilade
0398103898
3
Curitiba
6549876465
4
Lourdes
4579454845
5
Fabriciano 1465487946
TeGeometry
TeGeometry
A 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);
bool
Contains(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);
Table
Id Name
1 São José
Spatial Data
0402470247
2
Vilade
0398103898
3
Curitiba
6549876465
4
Lourdes
4579454845
5
Fabriciano 1465487946
TeGeometry
TeGeometry
A Interface
– Função Buffer
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
SELECT
FROM
WHERE
T1.id, T1.column
Table1 T1, Table2 T2
T2.id = id2 AND
SDO_RELATE(T1.column, T2.column,
‘mask=CONTAINS querytype=WINDOW’)= ’TRUE’;
SELECT SDO_GEOM.SDO_BUFFER (T.column, M.diminfo, distance)
FROM
table T, user_sdo_geom_metadata M
WHERE M.table_name = 'table' AND
M.column_name = 'column' AND
T.indice = id;
A 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 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
• Slice:
numérico
• Weight:
temático
novas classes
temático
numérico
– Operações aritméticas
• Executa operações matemáticas sobre um
conjunto de rasters.
A 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 Interface
• Consultas a dados matriciais
–
–
–
–
–
Operações zonais
Transformação de coordenadas
Mask
Operações de transformação
Operações aritméticas
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);
A Interface
• Consultas a dados matriciais
–
–
–
–
–
Operações zonais
Transformação de coordenadas
Mask
Operações de transformação
Operações aritméticas
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);
A Interface
• Consultas a dados matriciais
–
–
–
–
–
Operações zonais
Transformação de coordenadas
Mask
Operações de transformação
Operações aritméticas
typedef map<double, double> interval
bool
Slice (const string& table, const string& column,
const map<interval, string>& rules,
const string& TabAtribOut, TeRaster *result);
A 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, string> table;
bool
Calculate (const map<char, table>& Imagens, string&
mathexp, TeRaster *result);
Consideraçõ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
Download