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).