STRUTTURE DI DATI GEOGRAFICI
STRUTTURE DI DATI
I dati rappresentano una delle componenti
fondamentali di un GIS. Proprio per questo devono
essere valutati con attenzione gli strumenti usati per
la creazione dell’archivio, la manipolazione delle
informazioni
in
esso
contenute,
la
loro
manutenzione e l’aggiornamento.
I gestori di base di dati (DBMS) sono pacchetti
software che permettono l’archiviazione, la
manipolazione e il recupero di dati in un insieme di
dati (database); si comprende quindi perchè il loro
utilizzo costituisca un aspetto cruciale dei GIS.
Un database è una raccolta di uno o più file o
tabelle di dati archiviati in modo strutturato: le
relazioni esistenti tra le differenti colonne delle
tabelle o tra gli insiemi di dati possano essere
utilizzate dal software DBMS allo scopo di
manipolare e recuperare i dati.
Il database sarà strutturato in generale in modo tale
da soddisfare le richieste di più utenti.
1
STRUTTURE DI DATI GEOGRAFICI
CARATTERISTICHE PRINCIPALI DI UN
GESTORE DI BASI DI DATI
• minima ridondanza dei dati: non esiste una
incontrollata duplicazione dei dati (però è
ammessa una certa ridondanza (controllata)
quando può essere utile per velocizzare i processi
di ricerca);
• consistenza dei dati (contro i pericoli di stati
inconsistenti dovuti all’accesso concorrente in
fase di lettura/scrittura);
• integrazione dei
relazioni tra i dati);
dati
(mantenimento
delle
• integrità e ripristino del dato (mantenimento
della correttezza del dato e protezione del
database da possibili errori software e hardware);
• gestione facilitata del dato;
• accessibilità del dato;
• affidabilità del dato;
• indipendenza del dato (separatezza tra
descrizioni logica e fisica del dato, che rende
possibili modifiche di un programma applicativo e
del database in modo indipendente l’uno
dall’altro).
• sicurezza o privatezza del dato (contro utenti non
autorizzati);
2
STRUTTURE DI DATI GEOGRAFICI
TIPI DI STRUTTURE DI DBMS
Una volta che sia completata l’analisi dei dati, il
modello di dati deve essere implementato usando
un software DBMS adeguato.
Questo potrebbe essere implementato ex-novo, ma
in genere si fa ricorso a sistemi disponibili. Tra
questi individuiamo le categorie:
• sistemi gerarchici;
• sistemi reticolari;
• sistemi relazionali.
Nell’ambito
GIS
il
modello più utilizzato è
quello relazionale.
3
STRUTTURE DI DATI GEOGRAFICI
SISTEMI DI GESTIONE DI BASI DI DATI
RELAZIONALI
Il concetto fondamentale per l’archiviazione dei dati
nel modello relazionale è una tabella di record,
detta relazione o anche tabella.
Le tabelle sono “contenitori” di dati strutturati in
forma tabellare; ogni riga rappresenta un dato
(tupla) ed ogni colonna rappresenta un attributo dei
dati
• I dati appartenenti ad una tabella sono
caratterizzati dalle stesse proprietà; i record nella
tabella contengono un numero fissato di campi.
Tutti i record hanno formato identico. Non
possono esserci due tuple uguali.
• Ogni tabella deve avere un campo detto chiave
primaria che assume necessariamente valore
diverso per ogni tupla, identificando univocamente
la tupla stessa. Poiché ogni riga deve essere
differente dalle altre, il valore di una singola
colonna o una combinazione di valori in colonne
multiple, può essere usata per definire tale chiave.
La proprietà di univocità permette di individuare la
chiave primaria come unico meccanismo di
indirizzamento a livello delle righe nel modello
del database relazionale.
Ogni record della tabella archivia quindi
un’entità ed è identificato da una chiave
primaria.
4
STRUTTURE DI DATI GEOGRAFICI
PASSAGGIO DAL MODELLO ENTITA' RELAZIONE AI MODELLI RELAZIONALI
Torniamo al solito esempio:
STRADA 4
D
G
STRADA 2
STRADA 1
STRADA 3
B
A
E
C
STRADA 4
F
STRADA 5
H
I
STRADA 1
Cominciamo a considerare la parte del modello
entità - relazione che non coinvolge entità spaziali.
Proprietario
Particella
catastale
Codice
Indirizzo
Cod. Fiscale
Data Nascita
proprietà
data pratica
codice pratica
1-N
Comune Nascita
1-N
5
Cognome
Nome
STRUTTURE DI DATI GEOGRAFICI
Le tabelle associate sono:
Codice Particella
A
B
C
D
E
F
G
H
I
Indirizzo
Strada 4 ,1
Strada 4, 3
Strada 4, 5
Strada 5, 1
Strada 5, 3
Strada 5, 5
Strada 1, 1
Strada 1,3
Strada 1, 5
Tabella Particella
Particella
A
B
C
D
E
F
G
H
I
Data
Pratica
08/02/1980
10/04/1982
25/12/1984
08/02/1980
18/11/1990
01/05/1991
05/04/1996
21/12/1993
20/12/1999
Codice Pratica
1260802198012001
1261004198213879
1262512198415012
1260802198012001
1261811199000034
1260105199110005
1260504199608003
1262112199318761
1262012199923004
Proprietario
BNCFRC62B55C933X
RSSMRA60A01F205L
BNCFRC62B55C933X
BNCFRC62B55C933X
BNCFRC62B55C933X
BNCFRC62B55C933X
RSSMRA60A01F205L
RSSMRA60A01F205L
Tabella Proprietà
Codice Fiscale
Data
Nascita
BNCFRC62B55C933X 15.02.1962
RSSMRA60A01F205L 01.10.1960
Comune Nome
Nascita
COMO FRANCA
MILANO MARIO
Tabella Proprietario
6
Cognome
BIANCHI
ROSSI
STRUTTURE DI DATI GEOGRAFICI
VINCOLI DI INTEGRITA’ REFERENZIALE
• Un campo qualunque di una tabella può essere
vincolato ad assumere solo valori presenti nel
campo chiave di un’altra tabella.
• I due campi devono essere dello stesso tipo
• In questo modo il campo vincolato esprime un
legame di dipendenza tra la tupla a cui appartiene
e quella corrispondente nell’altra tabella
Codice
Particella
A
B
C
…
Indirizzo
Strada 4 ,1
Strada 4, 3
Strada 4, 5
…
Tabella Particella
Particella
A
B
C
…
Data
Pratica
08/02/1980
10/04/1982
25/12/1984
…
Codice Pratica
Proprietario
1260802198012001 BNCFRC62B55C933X
1261004198213879 BNCFRC62B55C933X
1262512198415012 RSSMRA60A01F205L
…
…
Tabella Proprietà
Codice Fiscale
Data
Comune
Nascita
Nascita
BNCFRC62B55C933X 15.02.1962 COMO
…
...
…
Nome
FRANCA. BIANCHI
…
…
Tabella Proprietario
7
Cognome
STRUTTURE DI DATI GEOGRAFICI
COSTRUZIONE DEL MODELLO LOGICO
Le ENTITA’ si traducono in TABELLE, aventi per
campi gli attributi dell’entità e per chiave l’attributo
chiave dell’entità
Le RELAZIONI con cardinalità uno a uno si
traducono in VINCOLI DI INTEGRITA’ tra tabelle
Le RELAZIONI con cardinalità uno a molti o molti
a molti si traducono in VINCOLI DI INTEGRITA’
e TABELLE
Nell'esempio precedente si considerano le tabelle:
• PARTICELLA CATASTALE (Codice Particella,
Indirizzo)
• PROPRIETARIO (Codice Fiscale, Data Nascita,
Comune Nascita, Cognome, Nome)
• PARTICELLA
- PROPRIETARIO (Codice
Particella, Codice Fiscale, Data della Pratica,
Codice della Pratica)
8
STRUTTURE DI DATI GEOGRAFICI
VANTAGGI E SVANTAGGI DEI DBMS
RELAZIONALI RISPETTO AD ALTRE
STRUTTURE DI DATI
VANTAGGI
⇒ E’ una metodologia che consente una
progettazione rigorosa, basata su fondamenti
teorici;
⇒ tutte le altre strutture di dati possono essere
ridotte ad un modello relazionale e quindi è la
forma più generale di rappresentazione;
⇒ è semplice da usare ed implementare,
⇒ è modificabile, cioè permette di introdurre
nuove tabelle e nuove righe di dati, senza
difficoltà;
⇒ è flessibile nella selezione dei dati grazie al
meccanismo di unione relazionale e ai potenti
linguaggi di interrogazione disponibili.
9
STRUTTURE DI DATI GEOGRAFICI
SVANTAGGI
Lo svantaggio principale legato ai sistemi relazionali
è dovuto al fatto che quelli commerciali standard
non possono risolvere problemi specifici legati
alla particolarità del problema spaziale, cioè al
tipo di dato da trattare.
Quindi lo svantaggio non è riferito in rapporto ad altri
DBMS tradizionali (gerarchici o reticolari), ma
piuttosto rispetto ad estensioni particolari,
studiate appositamente, di DBMS tradizionali, in
grado di fornire maggiori prestazioni ed
efficienza nel trattamento del dato geografico.
10
STRUTTURE DI DATI GEOGRAFICI
COSTRUZIONE DEL MODELLO
PER ENTITA' SPAZIALI
Consideriamo le tabelle associate alle entità
particelle catastali e strade relative al solito
esempio. Notiamo che in questo caso per semplicità
si erano considerati come primitive geometriche i
segmenti e quindi non avremo il problema di curve
descritte da un numero variabile di vertici.
Comunque vedremo che l'archiviazione non è
efficiente perché:
⇒
⇒ devo ripetere più volte gli identificatori di strada o
particella;
⇒
⇒ si creano tabelle lunghe e sottili.
Riconsideriamo lo schema dell'esempio:
1
l12
l2 3 l3 4 l4
l7
l9
l10
8 l8
10 11
9
5 l5 6
l11
12 13
11
l6
7
14
STRUTTURE DI DATI GEOGRAFICI
Abbiamo tabelle relative alle entità:
• PARTICELLA CATASTALE (Codice Particella,
Indirizzo)
• STRADA (Nome Strada, Lunghezza, Tipologia)
Codice
Particella
A
B
C
…
Indirizzo
Strada 4 ,1
Strada 4, 3
Strada 4, 5
…
Tabella Particella
Nome
Strada
Strada 1
Strada 2
Strada 3
…
Lunghezza
Tipologia
700
300
300
…
Provinciale
Comunale
Comunale
Tabella Strada
le tabelle che descrivono le primitive geometriche:
• SEGMENTO (Numero segmento, Lunghezza)
• PUNTO (Numero punto, Coordinate X,Y)
Numero
segmento
l1
l2
l3
…
Lunghezza
15
100
.12
…
Tabella Segmento
12
STRUTTURE DI DATI GEOGRAFICI
Numero
Punto
1
2
…
Coordinata X
Coordinata Y
6
21
…
710
700
…
Tabella Punto
le tabelle che descrivono le relazioni
• STRADA - SEGMENTO (Nome Strada, Numero
Segmento)
• PARTICELLA - SEGMENTO (Codice Particella,
Numero Segmento)
• SEGMENTO - PUNTI (Numero Segmento,
Numero Punto, Numero Punto)
Nome Strada
Strada 1
Strada 1
Strada 1
…
Numero
Segmento
l1
l7
…
…
Codice
Particella
A
A
A
…
Tabella Strada Segmento
Numero
Segmento
l1
l2
…
Numero
Segmento
l2
l8
l9
…
Tabella Particella Segmento
Numero
Punto
1
2
…
Numero
Punto
2
3
Tabella Segmento - Punti
13
STRUTTURE DI DATI GEOGRAFICI
Ovviamente se introduciamo una descrizione più
complessa (ad es. primitive geometriche: curve),
l'efficienza nell'archiviazione dei dati peggiora.
Vediamo con degli esempi.
Come primo passo consideriamo semplicemente le
due catene seguenti:
P1
P4
L1
P2
Per la costruzione
del
modello
considereremo
le
entità
(e
quindi
tabelle):
P3
P5
L2
P7
P6
TABELLA PUNTO
P
X
Y
P1
P2
P3
P4
P5
P6
P7
X1
X2
X3
X4
X5
X6
X7
Y1
Y2
Y3
Y4
Y5
Y6
Y7
punto_id
coord X
coord Y
14
STRUTTURE DI DATI GEOGRAFICI
TABELLA CURVA
L1
L2
P1
P5
P2
P6
P3
P7
P4
⇒
⇒ ho un numero variabile di colonne e quindi non è
possibile applicare la struttura relazionale
costruendo la tabella in tal modo
L1
L1
L1
L1
L2
L2
L2
P1
P2
P3
P4
P5
P6
P7
⇒
⇒ non posso scambiare tra di loro le tuple, perché
non riesco più a ridisegnare le curve di punti in
modo corretto
⇒
⇒ devo introdurre un campo con la sequenza dei
punti nella catena
L1
L1
L1
L1
L2
L2
L2
P1
P2
P3
P4
P5
P6
P7
N1
N2
N3
N4
N1
N2
N3
catena_id
punto_id
15
numero_sequenza_punto
STRUTTURE DI DATI GEOGRAFICI
⇒
⇒ prima di disegnare l'entità è necessario riordinare
le coordinate nella tabella CURVA.
Consideriamo ora modellizzazioni più complesse:
L5
L1
TABELLA
POLILINEA
L
L
L
…
L1
L2
L3
…
L3
L2
L4
nodo
L1
TABELLA
SUPERFICIE
L
L
L
…
vertice
L4
L1
L2
L3
…
L3
L2
16
STRUTTURE DI DATI GEOGRAFICI
Supponiamo ora di voler associare alle entità
geografiche non solo una descrizione geometrica
ma anche attributi (componente testuale).
Abbiamo quindi delle tabelle con attributi che
caratterizzano le entità: ogni tupla è caratterizzata
da un identificatore dell'entità geografica.
Consideriamo la carta seguente in cui le superfici
colorate rappresentano regioni corrispondenti a
modelli digitali del terreno forniti da enti differenti:
codice
origine
0
ITALIA
1
ITALIA
(correzioni)
2
4
ITALIA
(laghi - superficie)
ITALIA
(laghi -condensato)
BATIMETRIA
5
FRANCIA
6
SVIZZERA
7
AUSTRIA
8
GERMANIA
9
ETOPO5U
10
GTOPO30
3
17
Strutture di dati geografici
Consideriamo una delle regioni corrispondente ad
una
certa
"sorgente"
di
informazione
e
descriviamola spazialmente (l'attributo testuale
associato alla regione è il corrispondente codice
DTM)
S3
S4
Punto_id
1
2
3
4
5
6
…
178
179
F6
S5
ϕ
46.37
46.37
47.63
47.63
47.40
47.40
…
46.20
46.37
S2
λ
9.12
10.71
10.71
9.44
9.44
7.60
…
9.56
9.60
Relazione Punto
Strutture di dati geografici
Spigolo_id
…
S1
S2
S2
S3
S3
S3
S3
S4
S4
S5
S5
…
Punto_id
…
1
2
3
3
4
5
6
6
…
…
179
…
Numero_sequenza_punto
…
26
1
2
1
2
3
4
1
…
…
9
…
Relazione Spigolo
Faccia_id
…
F6
F6
F6
F6
...
Segmento_id
…
S2
S3
S4
S5
...
Relazione Faccia
Regione_id
…
R6
...
Faccia_id
…
F6
...
DTM_id
…
0006
...
Relazione regione - DTM
Strutture di dati geografici
L'archiviazione secondo questo schema non è
efficiente perché:
⇒
⇒ si devono ripetere gli identificatori di spigolo
e faccia
⇒
⇒ si deve archiviare un campo aggiuntivo
contenente il numero d'ordine di ogni vertice
⇒
⇒ si creano tabelle lunghe e sottili più scomode
da consultare (si allungano i tempi di
interrogazione)
Sinora ci siamo occupati solo di RDBMS "classici",
i quali, proprio per garantire la semplicità del
modello, devono soddisfare ad alcune ipotesi di
base.
Tra queste quella che peggio si adatta ai dati
spaziali è la 1NF (first normal form) che impone che
domini o attributi consistano di valori atomici, non
decomponibili. In molti progetti questa ipotesi è stata
abbandonata e vengono integrati nel database dati
complessi. In questo caso si parla di modelli
relazionali estesi classificati come NF2 (Non first
normal form ) o Nested-Relational.
Strutture di dati geografici
DATA BASE RELAZIONALI AD OGGETTI
Estendono il modello relazionale aggiungendo i
concetti di:
ADT = Abstract Data Type che definisce:
⇒
⇒ la struttura
⇒
⇒ le operazioni
di insiemi di oggetti simili
e di
EREDITARIETÀ che permette
Riuso: è la possibilità di riutilizzare insiemi (classi)
di oggetti precedentemente formalizzate per definire
nuove classi che ereditano dalle precedenti attributi
e metodi.
Estensibilità: è la possibilità di estendere la
descrizione di queste nuove classi definendo nuovi
attributi, che formalizzano meglio le caratteristiche
della nuova classe e nuovi metodi che gestiscono il
valore dei nuovi attributi.
Strutture di dati geografici
POSTGRESQL
⇒
⇒ E' un ORDBMS (DBMS relazionale a oggetti);
⇒
⇒ deriva da un progetto iniziato nel '86 alla
"University of California di Berkeley" e finanziato
dal "Defense Advanced Research Projects
Agency (DARPA)", dal "Army Research Office
(ARO)", dalla "National Science Foundation
(NSF) e ESL Inc";
⇒
⇒ nel '94 viene sostituito il linguaggio interrogativo
Postquel con l'SQL (Postgres95);
⇒
⇒ nella successiva evoluzione il database prende
l'attuale nome di PostgreSQL
⇒
⇒ e' un database freeware, di cui sono disponibili i
sorgenti in rete, utilizzabile anche via ODBC.
⇒
⇒ TIPI DI DATI GEOMETRICI IN POSTGRES
TIPO
SPAZIO
(bytes)
POINT
16
LINE
32
SEGMENT 32
BOX
32
PATH
4+32n
PATH
4+32n
RAPPRESENTA
ZIONE
(x,y)
((x1,y1),(x2,y2))
((x1,y1),(x2,y2))
((x1,y1),(x2,y2))
((x1,y1),…)
[(x1,y1),…]
POLYGON 4+32n
CIRCLE
24
((x1,y1),…)
<(x,y),r>
DESCRIZIONE
PUNTO
LINEA
SEGMENTO
RETTANGOLO
CAMMINO CHIUSO
CAMMINO
APERTO
POLIGONO
CIRCONFERENZA
Strutture di dati geografici
⇒
⇒ OPERAZIONI GEOMETRICHE IN POSTGRES
OPERATORE
+
*
/
#
#
##
&&
&<
&>
<->
<<
<∧
>>
>∧
?#
??-|
@-@
?|
?||
@
@@
∼=
DESCRIZIONE
Traslazione
Traslazione
Scala/rotazione
Scala/rotazione
Intersezione
Numero di punti
Punto più vicino
è sovrapposto
è sovrapposto a sinistra
è sovrapposto a destra
distanza
è a sinistra di
è sotto
è a destra di
è sopra
interseca o si sovrappone
è orizzontale
è perpendicolare
lunghezza o circonferenza
è verticale
è parallelo
contenuto o su
centro di
simile a
Strutture di dati geografici
Utilizzando Postgres per la descrizione dell'esempio
precedente relativo al DTM avremo le tabelle
Faccia_id
Poligon_data type
…
F6
…
((46.63,7.44),(46.63,7.71),(46.86,7.71),(46.
86,9.30),…)
….
…
Relazione Faccia
Regione_id Faccia_id
DTM_id
…
…
…
R6
F6
0006
...
...
...
Relazione regione - DTM
⇒
⇒ efficienza di archiviazione decisamente maggiore.
Strutture di dati geografici
STRUTTURE DI GESTIONE DI BASI
DI DATI NEI GIS
SISTEMI IBRIDI
I GIS che implementano un’architettura ibrida
sono caratterizzati da:
⇒
⇒ parte testuale strutturata utilizzando un modello
di dati relazionale e gestita da un relazionale;
⇒
⇒ parte geometrica gestita da un sistema
proprietario appositamente realizzato per rendere
possibile
• la memorizzazione della parte spaziale del dato,
utilizzando particolari indicizzazioni
• la gestione usando algoritmi implementati in
dipendenza del tipo di dati che il sistema GIS
deve gestire
Strutture di dati geografici
STRUTTURE DI GESTIONE DI BASI
DI DATI NEI GIS
SISTEMI INTEGRATI
La componente spaziale (i file delle coordinate dei
punti e della topologia degli elementi geometrici)
coesiste con la componente testuale (i file degli
attributi) ed è in relazione con questa, creando una
base di dati geometrico-statistica. Il RDBMS deve
avere estensioni spaziali.
Strutture di dati geografici
METODI DI INDICIZZAZIONE DI UNA BASE
DI DATI RELAZIONALE
Le basi di dati che sono state realizzate seguendo il
modello relazionale classico (1NF) sono state
progettate
per
gestire
dati
di
tipo
monodimensionale, in modo da fornire strumenti
adeguati per velocizzare le interrogazioni su questo
tipo di informazioni. Ogni dato che si vuole
memorizzare in una di queste basi di dati andrà
associato ad un singolo attributo; nel caso di dati
spaziali, quindi, ad ogni dimensione corrisponde un
attributo differente.
Consideriamo i punti evidenziati nella figura
seguente:
Strutture di dati geografici
le cui coordinate sono riportate nella corrispondente
tabella che possiamo immaginare come la tabella di
una base di dati relazionale.
I record della tabella hanno tre attributi: il codice del
punto, la sua latitudine e la sua longitudine:
punto_id
1
2
3
4
latitudine °N longitudine °E
44°50'
12°20'
43°60'
13°60'
42°50'
11°30'
41°90'
16°10'
La tabella può essere ordinata creando un indice
riferito ad una qualsiasi delle sue colonne: se ad
esempio ordiniamo la tabella rispetto all'attributo
longitudine la sequenza dei punti sarà 3, 1, 2, 4.
Indipendentemente dalla colonna scelta in
questo tipo di tabella non si riuscirà mai ad
ordinare i punti dell'elenco in base alla loro
distanza.
Strutture di dati geografici
In caso di interrogazione bidimensionale su di una
regione definita da due coppie di coordinate (x1, y1)
e (x2, y2) risulta evidente l'inefficienza del modello
relazionale per questo tipo di dati.
Supponiamo di voler estrarre tutti i punti compresi
nell'intervallo più scuro
⇒
⇒ per poter far questo, è necessario esaminare
completamente l'intero intervallo in latitudine e
longitudine (area segnata più in chiaro).
Questi problemi si potrebbero evitare se si
avesse a disposizione una base di dati in grado
di considerare entrambi le coordinate come se
fossero un unico dato rispetto al quale
indicizzare la tabella.
Strutture di dati geografici
2-D TREE
Ogni record di una base di dati organizzata con
questo sistema oltre ai campi dei dati ha anche due
campi speciali: uno punta al ramo di sinistra, l'altro a
quello di destra. La struttura di un record di tipo 2-d
tree è la seguente (scritta in linguaggio C):
typedef struct
{
tipo_informazione INFO;
real
LAT;
real
LON;
nodo
S;
nodo
D;
} nodo;
• Il campo INFO contiene informazioni generiche
legate al punto, ad esempio la quota;
• LAT e LON sono numeri reali corrispondenti alle
coordinate del punto (latitudine e longitudine);
• S e D puntano ciascuno ad un record figlio.
Se N è un nodo pari abbiamo:
nel ramo di sinistra i nodi M (record figli di N)
caratterizzati da M.LAT < N.LAT.
nel ramo di destra i nodi L con L.LAT > N.LAT
Viceversa se N è un nodo dispari abbiamo:
nel ramo di sinistra i record M con M.LON < N.LON
nel ramo di destra i nodi L con L.LON > N.LON.
Strutture di dati geografici
Vediamo l'inserimento dei dati; supponiamo che al
campo INFO si associ l'altezza elissoidica h.
1
44°50'
S
3
42°50'
12°20'
R ad ice
D
11°30'
2
43°60'
13°60'
L iv ello 1
S
D
S
4
D
41°90'
S
16°10'
L iv ello 2
D
Albero 2d-tree
Inserimento del punto 1: la tabella è vuota: questo
record sarà la radice dell'albero di dati.
Inserimento del punto 2): essendo al livello 1
(dispari) dell'albero devo confrontare: 2.LON >
1.LON il record figlio verrà collegato al campo D.
Inserimento del punto 3: iniziamo confrontando
con il punto 1 (e siamo al livello 1). Poiché 3.LON <
1.LON questo record figlio va collegato al campo S.
Inserimento del punto 4: a livello 1, 4.LON >
1.LON, ma il campo D è già occupato. Passo quindi
a confrontare con il record figlio del ramo di destra.
Essendo al livello 2 il confronto va fatto tra i campi
LAT: 4.LAT < 2.LAT, il record figlio andrà quindi
collegato al campo S.
Strutture di dati geografici
Ogni volta che inserisco un nodo nell'albero divido la
regione in due sottoregioni:
⇒
⇒ il punto 1 la divide in due parti (A e B) usando la
longitudine 12°20' come discriminante;
⇒
⇒ il punto 2 divide la sottoregione di destra (B) in
altre due sottoregioni a nord (C) e a sud (D) di
43°60';
⇒
⇒ il punto 3 divide invece la sottoregione di sinistra
in due sottoregioni a nord (E) e a sud (F) di
42°50';
⇒
⇒ il punto 4 divide la sottoregione (D) in due
sottoregioni a est (G) e a ovest (H) di 16°10'.
Quando eseguo una interrogazione sulla base di
dati questa verrà riferita solo ai punti della
sottoregione di interesse, evitando di prendere in
considerazione l'intero intervallo (x, y), come
succedeva nell'esempio iniziale
Suddivisione regione
Suddivisione regione B
Strutture di dati geografici
Suddivisione regione A
Suddivisione regione D
Questo tipo di struttura può essere usato anche per
dati multidimensionali (k-n tree), dove k è il numero
di dimensioni del dato. Al posto dei campi LAT e
LON si ha una matrice di dimensione pari a k:
typedef struct
{
tipo_informazione INFO;
real
VAL[k];
nodo
S;
nodo
D;
} nodo;
⇒
⇒ ogni nodo ha k coordinate
⇒
⇒ i collegamenti padre-figlio sono determinati
usando la stessa logica del caso bidimensionale
Strutture di dati geografici
POINT QUADTREE
Questo tipo di organizzazione può essere usato per
rappresentare i punti solo in due dimensioni. Ogni
nodo divide la regione in quattro quadranti: NO
(nord - ovest), NE (nord – est), SO (sud – ovest), SE
(sud - est).
La struttura di un record di tipo point quadtree è:
typedef struct
{
tipo_informazione INFO;
real
LAT;
real
LON;
nodo
NO;
nodo
NE;
nodo
SO;
nodo
SE;
} nodo;
⇒
⇒ i campi NO, NE, SO, SE puntano ai record figli.
Dato N, nodo dell'albero di dati, il ramo in cui
inserire un nuovo punto M dipende dal confronto tra
le coordinate dei punti:
⇒
⇒ M.LAT > N.LAT e M.LON > N.LON ⇒ NE
⇒
⇒ M.LAT > N.LAT e M.LON < N.LON ⇒ NO
⇒
⇒ M.LAT < N.LAT e M.LON > N.LON ⇒ SE
⇒
⇒ M.LAT < N.LAT e M.LON < N.LON ⇒ SO
Strutture di dati geografici
Inseriamo di nuovo, seguendo le regole di questa
struttura dati, i punti dell'esempio.
1
NE
2
NE
44°50' 12°20'
NO
43°60' 13°60'
NO
4
NE
SE
SE
SO
3
SO
Radice
NE
42°50' 11°30'
NO
SE
Livello 1
SO
41°90' 16°10'
NO
SE
SO
Livello 2
Albero point quadtree
Inserimento del punto 1: la tabella è vuota: questo
record è la radice dell'albero di dati.
Inserimento del punto 2: 2.LAT < 1.LAT e 2.LON >
1.LON: il figlio è collegato al campo SE.
Inserimento del punto 3: 3.LAT < 1.LAT e 3.LON <
1.LON: il figlio è collegato al campo SO.
Inserimento del punto 4: 4.LAT < 1.LAT e 4.LON >
1.LON: passo al nodo collegato al campo SE, che è
già occupato (punto 2); 4.LAT < 2.LAT e 4.LON >
2.LON: il figlio è collegato al campo SE del punto 2.
Strutture di dati geografici
Ogni volta che inserisco un nodo nell'albero divido la
regione in quattro sottoregioni:
⇒
⇒ il punto 1 la divide in quattro parti (A, B, C, D) con
longitudine 12°20' e latitudine 44°50' come
discriminanti;
⇒
⇒ il punto 2 divide la sottoregione (D) in altre quattro
sottoregioni (E, F, G, H) in base alle sue
coordinate;
⇒
⇒ il punto 3 divide invece la sottoregione (C) in
quattro sotteregioni (I, L, M, N);
⇒
⇒ il punto 4 divide la sottoregione (H) in quattro
sottoregioni (O, P, Q, R).
Suddivisione regione
Suddivisione regione D
Strutture di dati geografici
Suddivisione regione C
Suddivisione regione H
Rispetto al 2-D tree
• ogni nodo divide in quattro parti la regione di
appartenenza: questo consente di avere alberi
con meno livelli, permettendo un accesso più
veloce ai dati;
• la struttura è più complessa: ho quattro campi
puntatori e non solo due come prima.
Strutture di dati geografici
HHCODE
Questo tipo di organizzazione dei dati permette di
archiviare i dati spaziali mediante la codifica dei dati
n-dimensionali con un valore monodimensionale.
Ciò è possibile grazie all'introduzione di un nuovo
tipo di dato: Helical Hyperspatial CODE (HHCODE).
La struttura di un record di tipo HHCODE è:
typedef struct
{
tipo_informazione INFO;
real
LAT;
real
LON;
hhcode
COD;
} nodo;
Il metodo su cui si basa questa struttura ad albero
prevede una decomposizione ricorsiva dello
spazio.
Una regione bidimensionale viene, ad esempio,
suddivisa in quattro quadranti (sottoregioni); ad
ognuno di questi viene assegnato un codice da 0 a
3.
Per ogni punto della base di dati viene assegnato al
campo COD il relativo codice della regione di
appartenenza.
Strutture di dati geografici
Se il numero di punti contenuti in una regione è
superiore ad un limite prefissato, deciso dal
progettista in base al massimo tempo di accesso ai
dati che si desidera ottenere, questa viene divisa in
altri quattro quadranti; ad ogni quadrante è assegnato
un codice da 0 a 3.
Il campo COD di questi punti è così a due cifre e
aumenta
di
dimensione
all'aumentare
delle
decomposizioni interne delle sottoregioni.
La regione iniziale è stata suddivisa in 4 sottoregioni
principali, se ipotizziamo che nelle regioni 1 e 3 la
densità dei dati sia superiore al limite di riferimento
queste verranno a loro volta ulteriormente suddivise.
Nel caso della regione 1 ipotizziamo che si sia
necessaria un'ulteriore suddivisione.
Il valore assegnato al campo COD varierà in
base al livello di profondità delle suddivisioni,
quindi per i punti appartenenti alle regioni 0 e 2
avrà una sola cifra, per i punti appartenenti alla
regione 3 due cifre, quelli della regione 1
saranno invece caratterizzati da un COD di tre
cifre.
L'operazione di decomposizione continua finché non
si raggiunge il livello di risoluzione dei dati
desiderato, aggiungendo ad ogni passaggio una
cifra alla stringa che identifica la regione dello
spazio.
Strutture di dati geografici
Livello 1
0
1
2
3
Livello 2
10
11
12
13
Livello 3
120
121
122
123
30
31
32
33
Campo HHCODE in base ai diversi livelli
Strutture di dati geografici
R-TREE
L'organizzazione dei dati secondo le regole R-tree è
usata per archiviare regioni rettangolari di una
mappa.
Questo sistema è particolarmente usato nel caso si
abbia a che fare con un gran numero di dati perché
permette di fare un numero di accessi al disco
ridotto:
⇒
⇒ ad ogni nodo è associato un numero intero K
(ordine dell'albero)
⇒
⇒ ogni nodo che non sia una foglia contiene da
un minimo di K/2 a un massimo K rettangoli
(l'unica possibile eccezione è la radice)
Quindi ogni ramo può essere al minimo mezzo
pieno.
In questo modo si evita di incappare
nell'eventualità presente nei precedenti metodi di
indicizzazione di avere rami dell'albero vuoti.
Ogni accesso al disco ritorna una pagina
contenente diversi rettangoli.
L'altezza dell'albero risulta
rispetto ai metodi già visti.
quindi
minore
I dati con cui abbiamo a che fare possono essere
gruppi di rettangoli (nodi dell'albero) o rettangoli
singoli (foglie dell'albero).
Strutture di dati geografici
La struttura di un record per gli R-Tree è la
seguente:
typedef struct
{
tipo_rettangolo RET_1, RET_2, ...,RET_K;
nodo
P_1, P_2, ... , P_K;
} nodo;
Il record tipo_rettangolo dipende dal
rappresentazione che si è scelta per i dati.
tipo
di
⇒
⇒ Quando devo inserire un nuovo rettangolo lo
inserisco nel nodo che comporta la più
piccola estensione dell'area del gruppo
⇒
⇒ se il gruppo in cui devo inserire il nuovo dato
ha già raggiunto il limite K di foglie, aggiungo
un livello all'albero dei dati scomponendo il
gruppo pieno in altri sottogruppi.
Strutture di dati geografici
Vediamo un esempio di inserimento dati.
Supponiamo di avere un R-tree di ordine 3, nel
quale siano già stati inseriti i dati riportati nella
tabella seguente.
GRUPPO
G1
G2
G1
A1
A2
AREA
A1, A2
A3, A4, A5
G2
A3
Foglie
Esempio di albero R-tree
A4
A5
Strutture di dati geografici
Nella figura seguente sono riportati sulla mappa i
gruppi G1 e G2 (contorni rossi) e le aree in essi
contenute (contorni gialli). Si vuole inserire nella
nostra base di dati due nuove aree (A6 e A7,
segnate con i contorni in arancione):
⇒
⇒ l'area A6 può essere aggiunta senza problemi al
gruppo G1;
⇒
⇒ l'area A7 non può essere aggiunta al gruppo G2
in quanto questo è già pieno. Non si può
nemmeno creare un nuovo gruppo con all'interno
solo A7 in quanto si è detto che ogni nodo
dell'albero deve contenere almeno K/2 foglie. La
procedura corretta consiste nel creare un nuovo
gruppo G3 contenente sia A7 che A5.
Raggruppamenti R-tree
Inserimento nuove aree
Strutture di dati geografici
DIVISIONE DELLO SPAZIO MEDIANTE CURVE
In questo tipo di approccio lo spazio viene diviso in
tante celle quanti sono i punti bidimensionali ai quali si
vuole associare una determinata informazione.
Ogni cella in cui viene diviso lo spazio può contenere
un solo dato.
Normalmente viene introdotto anche un parametro,
detto risoluzione, che è indicativo della granularità
del dominio: ad esempio una curva di risoluzione r
viene costruita dividendo lo spazio in 22r celle.
E' possibile definire una curva monodimensionale
passante per tutte le celle e quindi per tutti i punti,
ottenendo così una superficie con la caratteristica di
avere tutta la sua area ripiena di curve.
Seguendo lo sviluppo della curva questa attraversa
tutte le celle secondo una determinata sequenza: si
stabilisce così un ordine di lettura che può essere
utilizzato nella memorizzazione delle celle nella base
di dati.
L'ordinamento spaziale si ottiene mediante una
trasformazione matematica che mappa un numero
finito di k celle in un numero finito di k numeri
naturali.
Strutture di dati geografici
Se la funzione è opportunamente definita, cioè in
modo che celle adiacenti si trovino vicine anche nella
successione da questa stabilita, si ottengono dei
vantaggi dal punto di vista del tempo di accesso ai
dati.
Ci sono parecchi modi per ottenere questo effetto, ma
le due funzioni più importanti sono:
N, o ordine di Peano (Peano, 1890);
Π, o ordine di Hilbert (Hilbert, 1891).
Entrambe queste curve passano per ogni cella di uno
spazio bidimensionale; inoltre i punti che sono
confinanti sulla curva, sono generalmente confinanti
anche sullo spazio.
In questo modo possiamo introdurre una efficiente
chiave monodimensionale di numerazione per ogni
punto corrispondente alla cella.
La costruzione della chiave di Peano è fatta mediante
una procedura interfogliante.
Strutture di dati geografici
Ad esempio il codice corrispondente al punto P(6,4),
con x = 6 e y = 4 è k=56.
P(6,4)
x = 6 (in binario 0 1 1 0)
k = 56 (0 0 1 1 1 0 0 0)
7
y = 4 (in binario 0 1 0 0)
21 23 29 31 53 55 61 63
6
20 22 28 30 52 54 60 62
5
17 19 25 27 49 51 57 59
3
7
13 15 37 39 45 47
4
2
6
12 14 36 38 44 46
1
3
9
11 33 35 41 43
0
2
8
10 32 34 40 42
0
5
1
4
16 18 24 26 48 50 56 58
0
1
2 3
4
5
6
7
Strutture di dati geografici
LE CURVE DI PEANO DI RISOLUZIONE 1,2,3
1
3
0
2
5
7
13 15
4
6
12 14
1
3
9
11
0
2
8
10
21
20
17
16
5
4
1
0
23
22
19
18
7
6
3
2
29
28
25
24
13
12
9
8
31
30
27
26
15
14
11
10
53
52
49
48
37
36
33
32
55
54
51
50
39
38
35
34
61
60
57
56
45
44
41
40
63
62
59
58
47
46
43
42
Strutture di dati geografici
LE CURVE DI HILBERT DI RISOLUZIONE 1,2,3
1
2
0
3
5
6
9
10
4
7
8
11
3
2
13 12
0
1
14 15
21
20
19
16
15
14
1
0
22
23
18
17
12
13
2
3
25
24
29
30
11
8
7
4
26
27
28
31
10
9
6
5
37
36
35
32
53
54
57
58
38
39
34
33
52
55
56
59
41
40
45
46
51
50
61
60
42
43
44
47
48
49
62
63
Strutture di dati geografici
LE CURVE U DI RISOLUZIONE 1,2,3
3
2
0
1
15 14 11 10
12 13 8
9
3
2
7
6
0
1
4
5
63
60
51
48
15
12
3
0
62
61
50
49
14
13
2
1
59
56
55
52
11
8
7
4
58
57
54
53
10
9
6
5
47
44
35
32
31
28
19
16
46
45
34
33
30
29
18
17
43
40
39
36
27
24
23
20
42
41
38
37
26
25
22
21
Strutture di dati geografici
SISTEMI DI GESTIONE DI BASI DI DATI
ORIENTATE AGLI OGGETTI
OGGETTI E CLASSI
Ogni entità reale è rappresentata da un oggetto.
Un oggetto è composto
• da un insieme di attributi (stato dell’oggetto) che lo
qualificano
• da un insieme di metodi (protocollo dell’oggetto)
che operano sul valore degli attributi.
Le procedure implementate per agire sul valore degli
attributi sono parte integrante dell’oggetto e non
appartengono all’applicazione che gestisce la base di
dati.
Parte spaziale e parte statistica del dato vengono
trattate allo stesso modo.
Oggetti con lo stesso stato e protocollo sono
raggruppati in classi.
Ogni oggetto appartiene ad una e una sola classe (le
classi sono mutualmente esclusive).
Strutture di dati geografici
ESEMPIO:
PARTICELLA CATASTALE
STATO
Proprietario
Superficie
Elenco Nodi
Elenco Archi
PROTOCOLLO
Partizionamento
Accorpamento
Overlay
Cambio Proprietario
AGGIORNAMENTO DI UNA
PARTICELLA CATASTALE
Strutture di dati geografici
OGGETTI ED IDENTITÀ
In applicazioni in cui il valore degli attributi degli
oggetti cambia nel tempo è importante poter
identificare in modo univoco ogni oggetto della base di
dati; un oggetto ha associato un identificatore unico
che gli permette di essere univocamente individuato in
modo indipendente dal valore dei suoi attributi.
L'identità nel modello orientato agli oggetti è diversa
da quella realizzata nel modello relazionale con il
meccanismo della chiave: in questo caso ogni record
è associato ad un insieme di attributi i cui valori lo
identificano in modo univoco.
es: Una particella catastale cambia nel tempo. Eventi
come il passaggio di proprietà e il cambiamento di
indirizzo determinano un cambiamento di valore
per i rispettivi attributi. Eventi più complessi come
il partizionamento o l'accorpamento agiscono più
a stretto contatto con l'identificatore di identità: nel
primo caso, viene creata una nuova particella e
quindi deve essere inizializzato un nuovo
identificatore, nel secondo caso una particella
esistente viene eliminata e quindi il suo
identificatore deve essere cancellato e devono
essere modificati il valore di attributi come la
superficie e l'indirizzo della particella rimanente.
OGGETTI COMPLESSI
Strutture di dati geografici
Con il meccanismo degli oggetti complessi si realizza
il potere espressivo del modello orientato agli oggetti.
Nel modello relazionale un attributo può assumere un
unico valore appartenente a un dominio di tipo
primitivo come i numeri interi o reali e le stringhe
alfanumeriche.
Nel modello orientato agli oggetti il valore di un
attributo è un oggetto o un insieme di oggetti
appartenenti a classi della base di dati; in questo
modo è possibile modellare situazioni complesse
come gli attributi multivalore e quelli a valore non
primitivo.
La relazione tra l'attributo di un oggetto e la classe a
cui appartiene l'oggetto valore dà origine ad una
gerarchia tra le classi denominata gerarchia di
composizione.
Strutture di dati geografici
ESEMPIO DI RELAZIONE DI COMPOSIZIONE FRA
CLASSI DI UNA BASE DI DATI.
• Un oggetto Particella Catastale ha un attributo
Elenco_Nodi che rappresenta l'insieme dei punti
che identificano il poligono associato alla forma
geometrica della particella.
• Il suo valore è quindi un insieme (indicato
dall'asterisco sulla freccia congiungente le due
classi) di oggetti della classe Punto.
PARTICELLA
CATASTALE
PUNTO
PROPRIETARIO
LATITUDINE
GRADI
LONGITUDINE
PRIMI
ELENCO_NODI
SUPERFICIE
*
COORDINATA
SECONDI
Strutture di dati geografici
EREDITARIETÀ
Riuso: è la possibilità di riutilizzare classi
precedentemente formalizzate - le superclassi - per
definire nuove classi - le sottoclassi - che ereditano
dalle precedenti attributi e metodi.
Estensibilità: è la possibilità di estendere la
descrizione delle sottoclassi definendo nuovi attributi,
che formalizzano meglio le caratteristiche della nuova
classe e nuovi metodi che gestiscono il valore dei
nuovi attributi.
Nel contesto di una sottoclasse è anche possibile
ridefinire l’implementazione dei metodi ereditati per
renderli più efficienti in relazione alle nuove
caratteristiche della classe.
Strutture di dati geografici
es: la superclasse Poligono è definita da tre attributi
(Lista_Nodi, Lista_Archi, Area) e da tre metodi per
gestire il loro valore (Calc_Centr, Disegna,
Overlay).
Una particella catastale è geometricamente
descritta da un poligono e quindi può essere
definita come sottoclasse della classe già
esistente Poligono.
La sottoclasse Particella Catastale eredita tutti
gli attributi e i metodi dalla classe Poligono;
inoltre, localmente si definiscono tre nuovi attributi
che caratterizzano più in dettaglio una Particella
catastale (Valore, Proprietario, Indirizzo) e due
metodi per gestire il loro valore (Cambio_Prop,
Cambio_Ind).