Sistemas de Informações
Geográficas
Unidade 3.2: Estrutura de Dados
Espaciais
Prof. Cláudio Baptista
2003.1
3.2 Estrutura de Dados Espaciais
 Necessidade de indexação dos dados
espaciais de modo a reduzir o tempo de
acesso aos mesmos
 Métodos de indexação tradicionais não são
indicados para dados espaciais


Hash: não atende a consultas de faixa (range
queries)
B-Tree: trata apenas uma dimensão
3.2 Estrutura de Dados Espaciais
 Operação comum com dados espaciais é a
pesquisa de objetos que estão numa
determinada área

Ex.: Encontre todos os hospitais que estão a no
máximo 20Km deste ponto
3.2 Estrutura de Dados Espaciais
 Algumas estruturas de dados propostas:




Grid
quad-trees
k-d-tree
r-tree
3.2.1 Quad trees
 Acelera o acesso a dados num plano 2d
 Técnica bastante simples
 O espaço de busca é recursivamente
decomposto em quadrantes até que o
número de retângulos sobrepondo cada
quadrante é menor do que a capacidade da
página.
 Os quadrantes são nomeados: Noroeste,
Nordeste, Sudeste e Sudoeste
3.2.1 Quad trees
 O índice é representado como uma árvore
quaternária (cada nó interno tem 4 filhos,
um por quadrante)
 Cada folha é associada a uma página de
disco
 Cada retângulo aparece em todos os
quadrantes folhas que o sobrepõem
3.2.1 Quad trees
x
1
2
y
5
a
14
8
6 t
z
11
R
12
a
13
3
c
7
4
b
9
10
b
[8,11,12,13]
c
d
[3,4,7] d [9,10,13]
d
x
y
z
t
[1,2,5,6] [5,6,14] [2,3,6] [6]
3.2.1 Quad tree
 Consulta de ponto (point query) é simples
em quad tree.
 Um único path (caminho) é percorrido da
raiz até a folha
 Em cada nível, é escolhido um dos
quadrantes que contém o ponto da consulta
3.2.1 Quad trees
Exemplo de Consulta Ponto P
x
y
a
b
11
1
5
14
2
8
6
z
t
12
P
13
3
c
9
d
7
4
10
R
a
b
[8,11,12,13]
x
y
z
c
d
[3,4,7] d [9,10,13]
t
[1,2,5,6] [5,6,14] [2,3,6] [6]
3.2.1 Quad trees
 Inserção em quadtrees




um retângulo será inserido em cada quadrante
folha que o sobrepõe
então todos os caminhos para as folhas que
sobrepõem o retângulo a ser inserido são
percorridos
a página P associada com cada folha é lida
Se P não está cheio, então insere o novo
retângulo
3.2.1 Quad trees
 Inserção em quadtrees (cont)



Se P estiver cheio, O quadrante deve ser
dividido em quatro quadrantes e 3 novas
páginas são alocadas
As entradas da página antiga mais a página
nova são divididas nas quatro páginas
Uma entrada E é adicionada a toda página cujo
quadrante intercepta E.MBR (Minimum
Bounding Rectangle)
3.2.1 Quad trees
Inserção em Quadtree
x
1
2
y
5
am
14
p 8
6 t
z
3
n
11
b
15
12 q
13
16
c
7
9
d
10
4
Como ficará a árvore após as inserções de 15 e 16?
3.2.2 k-d tree
 Usada para representar pontos
 árvore kd particiona o espaço em
células
 é uma árvore de busca binária,
 reside em memória principal, de forma que
os nós interiores em cada nível contêm
valores referentes a um único eixo, X ou Y,
alternadamente
 as folhas apontam para páginas físicas
 várias folhas podem apontar para a mesma
3.2.2 k-d tree
 o valor armazenado na raiz divide o espaço
em dois subespaços através de uma reta
perpendicular ao eixo dos X, digamos;
 o valor armazenado no filho à esquerda (ou
direita) por sua vez divide o subespaço à
esquerda (ou direita) em dois subespaços
através de uma reta perpendicular ao eixo
dos Y ; e assim por diante, alternando as
dimensões.
3.2.2 K-D-Tree
3.2.2 K-D-Tree
Árvore para figura anterior
A
B
D
C
3.2.2 K-d Tree
 Outro Exemplo
 Sejam as cidades com coordenadas
Cidade
Mossoró
Natal
Campina Grande
João Pessoa
Monteiro
(X,Y)
(19,45)
(40,50)
(38,38)
(54,40)
(4,4)
3.2.2 K-d Tree
Natal
Mossoró
João Pessoa
Campina Grande
Monteiro
3.2.2 K-d Tree
 Inserção de Mossoró
Mossoró (19,45)
 Inserção de Natal
Mossoró (19,45)
Natal (40,50)
3.2.2 K-d Tree
Natal
Mossoró
João Pessoa
Campina Grande
Monteiro
3.2.2 K-d Tree
Natal
Mossoró
João Pessoa
Campina Grande
Monteiro
3.2.2 K-d Tree
 Inserção de Campina
Mossoró (19,45)
Natal (40,50)
Campina (38,38)
3.2.2 K-d Tree
Natal
Mossoró
João Pessoa
Campina Grande
Monteiro
3.2.2 K-d Tree
 Inserção de João Pessoa:
Mossoró (19,45)
Natal (40,50)
Campina(38,38)
JP(54,40)
3.2.2 K-d Tree
Natal
Mossoró
João Pessoa
Campina Grande
Monteiro
3.2.2 K-d Tree
 Inserção de Monteiro:
Mossoró (19,45)
Monteiro(4,4)
Natal (40,50)
Campina(38,38)
JP(54,40)
3.2.2 K-d Tree
Natal
Mossoró
João Pessoa
Campina Grande
Monteiro
3.2.3 R-Tree
 É uma árvore similar a uma B+-tree, com
índices para dados nas folhas
 Nós correspondem à páginas de disco
 A estrutura é projetada de forma que uma
pesquisa espacial requer visitar um número
pequeno de nós
 Um BD espacial consiste de tuplas
representando objetos espaciais, onde cada
tupla possui um identificador
3.2.3 R-Tree
 Nós folhas contêm entradas da forma:




(R, TId)
Onde: R contém o retângulo que encobre a área
da tupla identificada por TId.
Este retângulo é conhecido por Minimum
Bounding Box ou Minimum Bounding
Rectangle
Ex.
3.2.3 R-Tree
 Nós não-folhas contêm entradas da forma:


(R, Filho)
Onde R é o retângulo que envolve todos os
retângulos dos descendentes deste nó e Filho é
o endereço do nó filho
3.2.3 R-Tree
 Definição: Sejam M e m o número máximo
e mínimo de entradas de um nó
respectivamente, tal que m <= M/2



Uma R-tree satisfaz às seguintes propriedades:
P1. Cada nó contém entre M e m entradas,
exceto a raiz
P2. Para cada nó folha (R, TId), R é o menor
retângulo que espacialmente contém os objetos
espaciais n-dimensionais representados pela
tupla TId
3.2.3 R-Tree
 Definição (cont)



P3. Para cada entrada (R, filho) num nó não
folha, T é o menor retângulo que espacialmente
contém os retângulos descendentes
P4. O nó raiz tem pelo menos dois filhos a
menos que seja um nó folha
P5. Todas as folhas aparecem num mesmo nível
3.2.3 R-Tree
3.2.3 R-Tree
PointQuery (consulta ponto)
R
T
P
o
i
n
t
Q
u
e
r
y
(
p
:P
o
i
n
t
)
:s
e
t(
o
i
d
)
b
e
g
i
n
r
e
s
u
l
t=
{
}
;
/
/P
a
s
s
o
1
:A
t
r
a
v
e
s
s
a
r
a
á
r
v
o
r
e
d
a
r
a
i
z
,e
c
o
m
p
u
t
a
r
/
/S
L
,o
c
o
n
j
u
n
t
o
d
e
f
o
l
h
a
s
c
u
j
o
T
I
d
c
o
n
t
é
m
P
S
L
=
R
T
T
r
a
v
e
r
s
a
l
(
r
o
o
t
,P
)
;
/
/P
a
s
s
o
2
:p
e
r
c
o
r
r
a
a
s
f
o
l
h
a
s
e
a
c
r
e
s
c
e
n
t
e
a
o
/
/r
e
s
u
l
t
a
d
o
à
q
u
e
l
a
s
q
u
e
c
o
n
t
i
v
e
r
e
m
P
f
o
r
e
a
c
h
L
i
n
S
L
d
o
/
/P
e
r
c
o
r
r
a
a
s
e
n
t
r
a
d
a
s
d
a
f
o
l
h
a
L
f
o
r
e
a
c
h
e
i
n
L
d
o
i
f
(
e
.
m
b
b
c
o
n
t
é
m
P
)
t
h
e
n
r
e
s
u
l
t+
=
e
.
o
i
d
;
r
e
t
u
r
n
r
e
s
u
l
t
;
e
n
d
PointQuery (consulta ponto)
R
T
T
r
a
v
e
r
s
a
l
(
o
i
d
:
N
o
d
e
,P
:
p
o
i
n
t
)
:
s
e
t
o
f
f
o
l
h
a
s
b
e
g
i
n
r
e
s
u
l
t
=
{
}
;
/
/
O
b
t
é
m
a
p
á
g
i
n
a
N
=
r
e
a
d
P
a
g
e
(
o
i
d
)
;
i
f
(
e
h
F
o
l
h
a
(
N
)
)
r
e
t
u
r
n
N
;
/
/
S
c
a
n
a
s
e
n
t
r
a
d
a
s
d
e
N
e
v
i
s
i
t
a
r
à
q
u
e
l
a
s
q
u
e
c
o
n
t
é
m
P
f
o
r
e
a
c
h
e
i
n
N
d
o
i
f
(
e
.
m
b
b
c
o
n
t
é
m
P
)
t
h
e
n
r
e
s
u
l
t
+
=
R
T
T
r
a
v
e
r
s
a
l
(
e
.
o
i
d
,P
)
;
r
e
t
u
r
n
r
e
s
u
l
t
;
e
n
d
Inserção



A árvore é percorrida top-down, a partir da raiz.
Em cada nível, verifica-se qual mbb contém o
mbb do objeto a ser inserido e desce naquela
sub-árvore
Caso não exista nenhum nó não folha que
contenha o objeto a ser inserido, então um nó é
escolhido para ter seu mbb estendido de forma
a conter o objeto a ser inserido. O nó escolhido
será aquele que precisa crescer menos seu mbb.
O processo é repetido até se encontrar um nó
folha.
Inserção


Se o nó folha não estiver cheio, uma nova
entrada [mbb, oid] é adicionada à página
associada com a folha. Observação: se houver
crescimento no mbb da folha, este deve se
progagar para cima na árvore.
Se o nó folha f estiver cheio, uma divisão de nó
ocorrerá: uma nova folha f’ é criada, e M+1
entradas são distribuidas entre f e f’.
Inserção
I
n
s
e
r
i
r
(
e
:N
o
d
o
)
b
e
g
i
n
/
/I
n
i
c
i
a
l
i
z
a
a
b
u
s
c
a
p
e
l
a
r
a
i
z
n
o
d
o
=
r
a
i
z
;
/
/E
s
c
o
l
h
a
u
m
c
a
m
i
n
h
o
d
e
s
c
e
n
d
o
p
a
r
a
f
o
l
h
a
w
h
i
l
e
(
n
ã
o
E
h
F
o
l
h
a
(
n
o
d
o
)
)
d
o
n
o
d
o
=
E
s
c
o
l
h
e
r
S
u
b
Á
r
v
o
r
e
(
n
o
d
o
,e
)
;
/
/
I
n
s
i
r
a
n
a
f
o
l
h
a
I
n
s
e
r
i
r
E
m
F
o
l
h
a
(
n
o
d
o
,e
)
;
/
/D
i
v
i
d
e
e
a
j
u
s
t
a
a
á
r
v
o
r
e
s
e
a
f
o
l
h
a
e
s
t
i
v
e
r
c
h
e
i
a
,
/
/s
e
n
ã
o
a
j
u
s
t
a
o
c
a
m
i
n
h
o
i
f
(
e
h
C
h
e
i
o
(
n
o
d
o
)
)
t
h
e
n
D
i
v
i
d
i
r
E
A
j
u
s
t
a
r
(
n
o
d
o
)
;
e
l
s
e
A
j
u
s
t
a
r
C
a
m
i
n
h
o
(
n
o
d
o
)
;
e
n
d
Inserção

A função EscolherSubÁrvore(node, e) pega a
entrada do node cujo node.mbb contém e.mbb
ou precisa de menor crescimento

A função AjustarCaminho(node) propaga o
crecimento do mbb para cima na árvore. Este
processo pára quando não precisar mais fazer
crescimento ou se alcançar a raiz. Esta função
está descrita a seguir.
Inserção
A
j
u
s
t
a
r
C
a
m
i
n
h
o
(
n
o
d
o
:
N
o
d
e
)
b
e
g
i
n
i
f
(
e
h
R
a
i
z
(
n
o
d
o
)
)
r
e
t
u
r
n
;
/
/
E
n
c
o
n
t
r
a
r
o
p
a
i
d
o
n
o
d
o
p
a
i
=
g
e
t
P
a
i
(
n
o
d
o
)
;
/
/
A
j
u
s
t
e
a
e
n
t
r
a
d
a
d
o
n
o
d
o
n
o
p
a
i
i
f
(
A
j
u
s
t
a
r
E
n
t
r
a
d
a
(
p
a
i
,
n
o
d
o
)
)
t
h
e
n
/
/
E
n
t
r
a
d
a
f
o
i
m
o
d
i
f
i
c
a
d
a
,
a
j
u
s
t
e
o
c
a
m
i
n
h
o
/
/
p
a
r
a
o
p
a
i
A
j
u
s
t
a
r
C
a
m
i
n
h
o
(
p
a
i
)
;
e
n
d
Inserção
D
i
v
i
d
i
r
E
A
j
u
s
t
a
r(
n
o
d
o
:N
o
d
e
)
b
e
g
i
n
/
/
C
r
i
a
u
m
n
o
v
o
n
o
d
o
e
d
i
s
t
r
i
b
u
ia
se
n
t
r
a
d
a
s
n
o
v
o
N
o
d
o
=
D
i
v
i
d
i
r
(
n
o
d
o
)
;
i
f(
e
h
R
a
i
z
(
n
o
d
o
)
)t
h
e
n
C
r
i
a
r
N
o
v
a
R
a
i
z
(
n
o
d
o
,n
o
v
o
N
o
d
o
)
;
e
l
s
e
/
/O
b
t
e
rp
a
id
o
n
ó
p
a
i=
g
e
t
P
a
i
(
n
o
d
o
)
;
/
/
A
j
u
s
t
a
re
n
t
r
a
d
a
d
o
n
o
d
o
e
s
e
u
sp
a
i
s
A
j
u
s
t
a
r
E
n
t
r
a
d
a
(
p
a
i
,n
o
d
o
)
/
/I
n
s
e
r
i
rn
o
v
o
n
o
d
o
n
o
p
a
i
I
n
s
e
r
i
r
N
o
d
o
(
p
a
i
,n
o
v
o
N
o
d
o
)
;
i
f(
e
h
C
h
e
i
o
(
p
a
i
)
)t
h
e
n
D
i
v
i
d
i
r
E
A
j
u
s
t
a
r
(
p
a
i
)
;
e
l
s
e
A
j
u
s
t
e
C
a
m
i
n
h
o
(
p
a
i
)
;
e
n
d
Inserção
 A função AjustarEntrada(pai, filho)
compara pai.mbb e filho.mbb. Se for
preciso o pai.mbb é estendido e a função
retorna TRUE, caso contrário retorna
FALSE
3.2.3 R-Tree
 Divisão de Nó



Para adicionar uma nova entrada a um nó cheio
é necessário dividir as entradas em dois nós
A divisão deve ser feita de modo que seja
improvável que ambos nós sejam examinados
em pesquisas subsequentes
Uma vez que a decisão de visitar um nó
depende se seu retângulo sobrepõe a área sendo
pesquisada, a área total dos dois retângulos
deve ser minimizada
3.2.3 R-Tree
Veja que a área do Bad Split é muito maior
do que a área de Good Split
Remoção
 A remoção é feita em 3 passos:




Encontrar o nodo folha F que contém a entrada
e
Remover e de F
Reorganizar a árvore se houver underflow.
Obs.: Uma abordagem simples na
reorganização é remover o nodo inteiro e reinserir as m-1 entradas restantes.
Remoção
R
e
m
o
ç
ã
o
(
e
:
O
b
j
e
t
o
)
b
e
g
i
n
/
/
E
n
c
o
n
t
r
a
r
a
f
o
l
h
a
c
o
n
t
e
n
d
o
e
F
=
E
n
c
o
n
t
r
a
r
F
o
l
h
a
(
e
)
;
/
/
R
e
m
o
v
e
r
e
n
t
r
a
d
a
s
e
r
e
o
r
g
a
n
i
z
a
r
á
r
v
o
r
e
/
/
o
r
e
s
u
l
t
a
d
o
é
u
m
c
o
n
j
u
n
t
o
d
e
n
o
d
o
s
Q
Q
=
R
e
o
r
g
a
n
i
z
a
r
(
F
,
e
)
;
/
/
R
e
i
n
s
e
r
i
r
a
s
e
n
t
r
a
d
a
s
d
o
s
n
o
d
o
s
d
e
Q
R
e
i
n
s
e
r
i
r
(
Q
)
;
e
n
d
Remoção
R
e
o
r
g
a
n
i
z
a
r
(
N
:n
o
d
o
,e
:o
b
j
e
t
o
)
:{
o
b
j
e
t
o
s
d
e
n
o
d
o
}
b
e
g
i
n
Q
=
{
}
;/
/c
o
n
j
u
n
t
o
d
e
n
o
d
o
s
/
/
R
e
m
o
v
e
r
e
d
e
N
N
=
N
-e
;
i
f
(
n
o
te
h
R
a
i
z
(
N
)
)
t
h
e
n
i
f
(
N
.
n
u
m
N
o
d
o
s
<
m
)
t
h
e
n
Q
=
Q
U
N
;
/
/O
b
t
é
m
o
p
a
ie
r
e
o
r
g
a
n
i
z
a
o
F
=
g
e
t
P
a
i
(
N
)
;
Q
=
Q
U
R
e
o
r
g
a
n
i
z
a
r
(
F
,e
n
t
r
a
d
a
d
e
N
e
m
F
)
e
l
s
e
/
/N
f
o
im
o
d
i
f
i
c
a
d
o
:a
j
u
s
t
e
o
c
a
m
i
n
h
o
A
j
u
s
t
a
r
C
a
m
i
n
h
o
(
N
)
;
e
n
d
Download

Unidade31SIG