Corso Storia Basi di Dati...
Transcript of Corso Storia Basi di Dati...
Università degli Studi di Udine 1
Corso Corso di di
Basi di Dati SpazialiBasi di Dati Spaziali
Angelo MontanariAngelo MontanariDonatella GubianiDonatella Gubiani
Estensione spaziale di SQL Estensione spaziale di SQL (i sistemi PostgreSQL (i sistemi PostgreSQL
e Oracle Spatial)e Oracle Spatial)
Università degli Studi di Udine 2
StoriaStoria
• Storia:Storia:–1974: prima proposta SEQUEL1974: prima proposta SEQUEL–1981: prime implementazioni1981: prime implementazioni–1983: standard di fatto1983: standard di fatto–1986, 1989, 1992 e 1999: 1986, 1989, 1992 e 1999: standardstandard
Università degli Studi di Udine 3
Funzionalità Funzionalità
• Insieme di linguaggi con varie Insieme di linguaggi con varie funzionalità: funzionalità: –DDLDDL–DMLDML•aggiornamentoaggiornamento• interrogazioneinterrogazione
Università degli Studi di Udine 4
Per trattare dati spaziali… Per trattare dati spaziali…
• Estensione SQL con nuovi Estensione SQL con nuovi costrutti per trattare i tipi di costrutti per trattare i tipi di dato spaziale introdottidato spaziale introdotti–DDL: definizioneDDL: definizione–DML: aggiornamento e DML: aggiornamento e interrogazioneinterrogazione
Università degli Studi di Udine 5
Componente DDL Componente DDL
• Permette di creare schemi di basi Permette di creare schemi di basi di dati: domini, tabelle, indici, di dati: domini, tabelle, indici, asserzioni, viste, privilegiasserzioni, viste, privilegi
• Meccanismi standard SQLMeccanismi standard SQL
Università degli Studi di Udine 6
Domini e Domini e definizione di tabelle definizione di tabelle
• Gli attributi di una tabella possono Gli attributi di una tabella possono essere associati, oltre ai tipi di essere associati, oltre ai tipi di dato tradizionali, ad uno dei tipi di dato tradizionali, ad uno dei tipi di dato spazialedato spaziale– PointPoint– LineLine– PolygonPolygon
Università degli Studi di Udine 7
Definizione di tabellaDefinizione di tabella
CREATE TABLE NAZIONE(Nome VARCHAR(20) PRIMARY KEY,
NumAbitanti INTEGER NOT NULL, Geometria POLYGON NOT NULL
)
CREATE TABLE FIUME(Nome VARCHAR(20) PRIMARY KEY,
Geometria LINE NOT NULL)
Università degli Studi di Udine 8
Definizione degli indiciDefinizione degli indici
• Oltre ai tradizionali indici, Oltre ai tradizionali indici, rivestono un ruolo rivestono un ruolo fondamentale gli indici spazialifondamentale gli indici spaziali
Università degli Studi di Udine 9
DML: Componente di DML: Componente di interrogazione interrogazione
• Permette di accedere Permette di accedere all’informazione presente in una all’informazione presente in una base dei dati (ma non consente di base dei dati (ma non consente di modificarla)modificarla)
Università degli Studi di Udine 10
Tipi di interrogazioneTipi di interrogazione
• L’estensione spaziale SQL permette di L’estensione spaziale SQL permette di rispondere, oltre a interrogazioni con rispondere, oltre a interrogazioni con criteri alfanumerici, a interrogazioni criteri alfanumerici, a interrogazioni basate su criteri spazialibasate su criteri spaziali– Selezioni basate su relazioni spaziali rispetto Selezioni basate su relazioni spaziali rispetto a valori geometrici costanti o query a valori geometrici costanti o query interattiveinterattive
– Interrogazioni con criteri spaziali o join Interrogazioni con criteri spaziali o join spazialispaziali
Università degli Studi di Udine 11
Costrutti fondamentaliCostrutti fondamentali
• SELECT:SELECT: specifica la lista degli specifica la lista degli attributi che si vuole siano restituiti attributi che si vuole siano restituiti (anche funzioni aggregate)(anche funzioni aggregate)
• FROM: FROM: specifica le tabelle alle quali specifica le tabelle alle quali bisogna accedere per rispondere bisogna accedere per rispondere all’interrogazioneall’interrogazione
• WHERE: WHERE: specifica le condizioni che specifica le condizioni che devono essere soddisfatte dalle righe devono essere soddisfatte dalle righe coinvolte nell’interrogazione per poter coinvolte nell’interrogazione per poter partecipare alla soluzione finalepartecipare alla soluzione finale
Università degli Studi di Udine 12
Interrogazioni spazialiInterrogazioni spaziali
• Utilizzano funzioni e relazioni su Utilizzano funzioni e relazioni su tipi di dato spazialetipi di dato spaziale– Predicati utilizzati nella clausola Predicati utilizzati nella clausola WHERE (relazioni spaziali)WHERE (relazioni spaziali)
– Funzioni applicate alle tuple del Funzioni applicate alle tuple del risultato (clausola SELECT)risultato (clausola SELECT)
Università degli Studi di Udine 13
Interrogazioni con criteri Interrogazioni con criteri spaziali – 1spaziali – 1
Esempio.Esempio. Selezionare le nazioni Selezionare le nazioni confinanti con la (adiacenti alla) Franciaconfinanti con la (adiacenti alla) Francia
SELECT N1.NomeFROM NAZIONE N1, NAZIONE N2WHERE N2.Nome=“Francia” and Touch(N1.Geometria,N2.Geometria)
Università degli Studi di Udine 14
Interrogazioni con criteri Interrogazioni con criteri spaziali – 2spaziali – 2
Esempio.Esempio. Determinare i fiumi che Determinare i fiumi che attraversano la Germaniaattraversano la Germania
SELECT F.NomeFROM FIUME F, NAZIONE NWHERE N.Nome=“Germania” and Cross(F.Geometria,N.Geometria)
Università degli Studi di Udine 15
Interrogazioni con criteri Interrogazioni con criteri spaziali – 3spaziali – 3
Esempio.Esempio. Determinare l’area delle Determinare l’area delle nazioni attraversate dal fiume Donnazioni attraversate dal fiume Don
SELECT N.Nome, Area(N.Geometria)FROM Nazione N, Fiume FWHERE F.Nome=“Don” and
Cross(F.Geometria,N.Geometria)
Università degli Studi di Udine 16
Interrogazioni con criteri Interrogazioni con criteri spaziali – 4spaziali – 4
Esempio.Esempio. Determinare la lunghezza Determinare la lunghezza totale dei fiumi che attraversano l’Italiatotale dei fiumi che attraversano l’Italia
SELECT Sum(Length(F.Geometria))FROM FIUME F, NAZIONE NWHERE N.Nome=“Italia” and Cross(F.Geometria,N.Geometria)
Università degli Studi di Udine 17
Interrogazioni con criteri Interrogazioni con criteri spaziali – 5spaziali – 5
Esempio.Esempio. Determinare le nazioni Determinare le nazioni contenute nel rettangolo @rectanglecontenute nel rettangolo @rectangle
SELECT NomeFROM NAZIONEWHERE In(Geometria,@rectangle)
Università degli Studi di Udine 18
DML: Componente di DML: Componente di aggiornamentoaggiornamento
• Permette di operare sulle tabelle: Permette di operare sulle tabelle: inserire, modificare e cancellare i dati di inserire, modificare e cancellare i dati di una base dei datiuna base dei dati
• Operazioni diOperazioni di– inserimento: insertinserimento: insert– eliminazione: deleteeliminazione: delete– modifica: updatemodifica: update
di una o più tuple di una relazione sulla di una o più tuple di una relazione sulla base di una condizione che può base di una condizione che può coinvolgere anche altre relazionicoinvolgere anche altre relazioni
Università degli Studi di Udine 19
PostgreSQLPostgreSQL
• 1996 è diventato un progetto open 1996 è diventato un progetto open sourcesource
• Supporta un modello Supporta un modello object-object-
relational relational che gestisce i tipi di dato che gestisce i tipi di dato spazialespaziale
Università degli Studi di Udine 20
Estensione spazialeEstensione spaziale
• Uno dei primi sistemi a prevedere Uno dei primi sistemi a prevedere un’estenzione spazialeun’estenzione spaziale– un insieme di tipi geometriciun insieme di tipi geometrici– un insieme di operatori e funzioni sui un insieme di operatori e funzioni sui tipi geometricitipi geometrici
– un’estensione SQL integrata con un’estensione SQL integrata con operatori spazialioperatori spaziali
Università degli Studi di Udine 21
Tipi di dato spazialeTipi di dato spazialeTipo geometrico Rappresentazione Descrizione
point (x,y) Punto
line ((x1,y1),(x2,y2)) Retta infinita
lseg ((x1,y1),(x2,y2)) Segmento
box ((x1,y1),(x2,y2)) Rettangolo
path ((x1,y1),…,(xn,yn)) Linea chiusa
path [(x1,y1),…,(xn,yn)] Linea (aperta)
polygon ((x1,y1),…,(xn,yn)) Poligono
circle <(x,y),r> Cerchio
Università degli Studi di Udine 22
Rappresentazione dei dati in PostgreSQL - 1
Alcune rappresentazioni sono ambigue (non identificano il corrispondente tipo di datospaziale). Per tale ragione, il tipo di dato viene indicato in modo esplicito:
'<rappresentazione>'::tipo
Esempio. Un rettangolo è rappresentato da:'((0,0),(1,1))':: box
mentre un segmento è rappresentato da:'((0,0),(1,1))':: lseg
Università degli Studi di Udine 23
Rappresentazione dei dati in PostgreSQL - 2
La sintassi usata per definire un poligono è molto simile (differisce solo nel nome del tipo di dato spaziale) a quella impiegata per definireuna poli-linea chiusa
Poligoni e poli-linee chiuse differiscono in:
• funzioni che possono essere applicate
• modalità di memorizzazione
Università degli Studi di Udine 24
Rappresentazione dei dati in PostgreSQL - 3
Il modello spaziale di PostgreSQL non contienené il tipo di dato regione, inteso come insieme dipoligoni (anziché singolo poligono), né il tipo di dato linea, inteso come insieme di linee/spezzate
Conseguenze:• non è definita l'intersezione di poligoni, perchépotrebbe generare un insieme di poligoni
anziché un singolo poligono (non è chiusa)• non è definita l'intersezione di linee e poligoni, perché potrebbe generare un insieme di lineeanziché una singola linea (non è chiusa)
Università degli Studi di Udine 25
Rappresentazione dei dati in PostgreSQL - 4
Predicati vs. funzioni: gli operatori spaziali diPostegreSQL sono per la maggior partepredicati spaziali, anziché funzioni, e nonpermettono di costruire nuovi oggetti
Alcune operazioni sono polimorfe: possonoessere applicate ad argomenti di diverso tipo(spaziale).In tutte le situazioni in cui il tipo dell’operando èun qualsiasi tipo di dato spaziale, viene usatoil tipo generico geom
Università degli Studi di Udine 26
Operatori spaziali - 1Operatori spaziali - 1Operatore Descrizione Sintassi
+ Trasla un rettangolo boxXpoint�box
* Scala un rettangolo boxXpoint�box
# Calcola l’intersezione di due
segmenti
lsegXlseg�point
# Restituisce il numero di vertici di
un poligono
polygon�integer
&& Determina se due poligoni sono
sovrapposti
polygonXpolygon�
bool
<< Verifica se è a destra geomXgeom�bool
>> Verifica se è a sinistra geomXgeom�bool
Università degli Studi di Udine 27
Operatori spaziali - 2Operatori spaziali - 2Operatore Descrizione Sintassi
<^ Verifica se è sopra geomXgeom�bool
>^ Verifica se è sotto geomXgeom�bool
?# Stabilisci se due linee o una linea
e un poligono si intersecano
pathXgeom�bool
?- Stabilisci se due punti defini-
scono un segmento orizzontale
pointXpoint�bool
?-- Stabilisci se due punti defini-
scono un segmento verticale
pointXpoint�bool
?- Stabilisci se due segmenti sono
perpendicolari
lsegXlseg�bool
Università degli Studi di Udine 28
Operatori spaziali - 3Operatori spaziali - 3Operatore Descrizione Sintassi
?|| Stabilisci se due segmenti sono
paralleli
lsegXlseg�bool
@ Stabilisci se un punto è contenuto
in una geometria
pointXgeom�bool
~= Stabilisci se due poligoni sono
uguali
polygonXpolygon�
bool
Università degli Studi di Udine 29
Funzioni spazialiFunzioni spazialiFunzione Descrizione Output
Area(object) Calcola l’area di un oggetto double precision
Box_intersect
(box,box)
Determina il rettangolo di
intersezione fra due rettangoli
box
Center(object) Determina il baricentro di un
oggetto
point
Diameter(circle) Calcola il diametro di un
cerchio
double precision
Height(box) Calcola l’altezza di un
rettangolo
double precision
Length(object) Calcola la lunghezza di un
oggetto
double precision
Università degli Studi di Udine 30
DDL: Creazione di tabelleDDL: Creazione di tabelle
• Utilizza la sintassi standard SQL Utilizza la sintassi standard SQL con la possibilità di definire con la possibilità di definire attributi di tipo geometricoattributi di tipo geometrico
Università degli Studi di Udine 31
DDL: esempio tabelle DDL: esempio tabelle
CREATE TABLE Terreno(nome varchar(15);utilizzo varchar(10);geometria polygon;PRIMARY KEY (nome));
CREATE TABLE Strade(nome varchar(15);geometria path;PRIMARY KEY (nome));
Università degli Studi di Udine 32
DDL: Creazione di indici DDL: Creazione di indici spazialispaziali
• Creazione di indici spaziali di tipo Creazione di indici spaziali di tipo R-Tree sugli attributi spazialiR-Tree sugli attributi spaziali
CREATE INDEX RtrTerreno ON TERRENO USING RTREE(geometria);
Università degli Studi di Udine 33
DML: aggiornamentoDML: aggiornamento
• L’inserimento, la modifica e L’inserimento, la modifica e l’aggiornamento vengono effettuati l’aggiornamento vengono effettuati utilizzando la sintassi standard SQL, utilizzando la sintassi standard SQL, tenendo conto della specifica sintassi tenendo conto della specifica sintassi dei diversi tipidei diversi tipi
INSERT INTO TERRENO(nome, utilizzo, geometria) VALUES (‘P1’, ‘prato’, ‘((1,1),(2,3),(5,2))’);
Università degli Studi di Udine 34
DML: interrogazione - 1DML: interrogazione - 1
Esempio.Esempio. Determinare le strade che Determinare le strade che intersecano il terreno ‘P1’intersecano il terreno ‘P1’
SELECT S.nomeFROM STRADA S, TERRENO TWHERE T.nome=‘P1’ and
S.geometria?#T.geometria;
Università degli Studi di Udine 35
DML: interrogazione - 2DML: interrogazione - 2
Esempio.Esempio. Determinare i terreni che Determinare i terreni che stanno a destra del terreno ‘P2’stanno a destra del terreno ‘P2’
SELECT T1.nomeFROM TERRENO T1, TERRENO T2WHERE T2.nome=‘P2’ and
T2.geometria<<T1.geometria;
Università degli Studi di Udine 36
DML: interrogazione - 3DML: interrogazione - 3
Esempio.Esempio. Determinare i terreni che Determinare i terreni che si sovrappongono al poligono con si sovrappongono al poligono con vertici (1,2),(9,5),(4,6),(2,5)vertici (1,2),(9,5),(4,6),(2,5)
SELECT nameFROM TERRENOWHERE ‘((1,2),(9,5),(4,6),(2,5)(1,2),(9,5),(4,6),(2,5))’::polygon
&& geometria;
Università degli Studi di Udine 37
DML: interrogazione - 4DML: interrogazione - 4
Esempio.Esempio. Determinare il terreno Determinare il terreno che contiene il punto (4,3) e la che contiene il punto (4,3) e la relativa arearelativa area
SELECT name, area(geometria)FROM TERRENOWHERE ‘(4,3)’::point @ geometria;
Università degli Studi di Udine 38
ORACLE SPATIALORACLE SPATIAL
• L’estensione L’estensione SpatialSpatial permette di permette di memorizzare dati spazialimemorizzare dati spaziali
• Supporta il modello Supporta il modello Object-RelationalObject-Relational per gestire i per gestire i diversi tipi di dato spazialediversi tipi di dato spaziale
Università degli Studi di Udine 39
Sistema di riferimento spazialeSistema di riferimento spaziale
• Oracle Spatial assume le coordinate Oracle Spatial assume le coordinate cartesiane come defaultcartesiane come default
• Possono essere utilizzati altri sistemi:Possono essere utilizzati altri sistemi:– coordinate geodetichecoordinate geodetiche– coordinate proiettatecoordinate proiettate– coordinate localicoordinate locali
• È possibile utilizzare dei sistemi di È possibile utilizzare dei sistemi di riferimento definiti dall‘utenteriferimento definiti dall‘utente
Università degli Studi di Udine 40
I tipi di dato spazialeI tipi di dato spaziale
• Due tipi di dato:Due tipi di dato:– SDO_GEOMETRY SDO_GEOMETRY – SDO_GEORASTERSDO_GEORASTER
Università degli Studi di Udine 41
SDO_GEOMETRYSDO_GEOMETRY
• La geometria che descrive un oggetto La geometria che descrive un oggetto spaziale è memorizzata in una spaziale è memorizzata in una colonna che assume valori di tipo colonna che assume valori di tipo SDO_GEOMETRYSDO_GEOMETRY
• Tabelle di questo tipo sono chiamate Tabelle di questo tipo sono chiamate tabelle geometrichetabelle geometriche
Università degli Studi di Udine 42
SDO_GEORASTERSDO_GEORASTER
• Nuovo tipo di dato introdotto in Nuovo tipo di dato introdotto in Oracle 10gOracle 10g
• Una griglia raster (o un‘immagine) Una griglia raster (o un‘immagine) è memorizzata in una colonna che è memorizzata in una colonna che assume valori di tipo assume valori di tipo SDO_GEORASTERSDO_GEORASTER
• Tabelle di questo tipo sono Tabelle di questo tipo sono chiamate chiamate tabelle GeoRastertabelle GeoRaster
Università degli Studi di Udine 43
Concentriamoci sulla Concentriamoci sulla rappresentazione rappresentazione vettoriale e quindi vettoriale e quindi
sull’oggetto sull’oggetto SDO_GEOMETRYSDO_GEOMETRY
Università degli Studi di Udine 44
Modello dei datiModello dei dati
• La rappresentazione dei dati spaziali La rappresentazione dei dati spaziali corrisponde a una struttura gerarchicacorrisponde a una struttura gerarchica– elementi:elementi: blocco base che costituisce una blocco base che costituisce una geometria; i tipi di elementi spaziali supportati geometria; i tipi di elementi spaziali supportati sono i punti, le linee e i poligonisono i punti, le linee e i poligoni
– geometrie:geometrie: rappresentazione di un valore rappresentazione di un valore geometrico come un insieme ordinato di geometrico come un insieme ordinato di elementielementi
– layer: layer: collezione di geometrie che hanno lo collezione di geometrie che hanno lo stesso insieme di attributistesso insieme di attributi
Università degli Studi di Udine 45
Oggetto SDO_GEOMETRYOggetto SDO_GEOMETRY
CREATE TYPE SDO_GEOMETRY AS OBJECT(SDO_GTYPE NUMBER,SDO_SRID NUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,SDO_ORDINATES SDO_ORDINATE_ARRAY);
Università degli Studi di Udine 46
SDO_GTYPESDO_GTYPE
• Indica il tipo di geometriaIndica il tipo di geometria• È composto da 4 cifre nel formato È composto da 4 cifre nel formato dlttdltt– dd identifica il numero di dimensioni (2, 3, o 4) identifica il numero di dimensioni (2, 3, o 4)– ll identifica la misura di riferimento lineare per identifica la misura di riferimento lineare per una geometria 3-dimensionale LRS (Linear una geometria 3-dimensionale LRS (Linear Referencing System)Referencing System)
– tttt identifica il tipo geometrico (da 00 a 07) identifica il tipo geometrico (da 00 a 07)
Università degli Studi di Udine 47
Esempi di valori geometriciEsempi di valori geometrici
Università degli Studi di Udine 48
Valori validi per SDO_GTYPEValori validi per SDO_GTYPE
Valore Tipo di geometria Descrizione
dl00 UNKNOWN_GEOMETRY Spatial ignora questa geometria
dl01 POINT Un punto
dl02 LINE o CURVE Stringa di linee (segmenti retti o
archi circolari)
dl03 POLYGON Poligoni con o senza buchi
dl04 COLLECTION Collezione eterogenea di oggetti
dl05 MULTIPOINT Uno o più punti
dl06 MULTILINE o
MULTICURVE
Una o più stringhe di linee
dl07 MULTIPOLYGON Poligoni multipli o disgiunti
Università degli Studi di Udine 49
SDO_SRIDSDO_SRID
• Può essere usato per identificare un Può essere usato per identificare un sistema di coordinate associato alla sistema di coordinate associato alla geometriageometria
• nullnull indica che nessun sistema di indica che nessun sistema di coordinate è associato alla geometria (e coordinate è associato alla geometria (e quindi si assume il sistema di default)quindi si assume il sistema di default)
• Tutte le geometrie di una colonna Tutte le geometrie di una colonna devono avere lo stesso SDO_SRIDdevono avere lo stesso SDO_SRID
Università degli Studi di Udine 50
SDO_POINTSDO_POINT
• Identifica i punti, altrimenti è Identifica i punti, altrimenti è nullnull
• Non è Non è nullnull se i vettori SDO_ELEM_INFO se i vettori SDO_ELEM_INFO e SDO_ORDINATES sono entrambi e SDO_ORDINATES sono entrambi nullnull
• È definito usando un oggetto con È definito usando un oggetto con attributi X, Y e Zattributi X, Y e Z– X e Y sono le coordinate di una geometria di X e Y sono le coordinate di una geometria di tipo punto nello spazio bidimensionaletipo punto nello spazio bidimensionale
NOTA: il punto può essere descritto sia NOTA: il punto può essere descritto sia utilizzando SDO_POINT che utilizzando SDO_POINT che i vettori i vettori SDO_ELEM_INFO e SDO_ORDINATESSDO_ELEM_INFO e SDO_ORDINATES
Università degli Studi di Udine 51
SDO_ELEM_INFOSDO_ELEM_INFO• Permette di interpretare le coordinate Permette di interpretare le coordinate memorizzate in SDO_ORDINATESmemorizzate in SDO_ORDINATES
• È un vettore di lunghezza variabile di È un vettore di lunghezza variabile di triplettetriplette– SDO_STARTING_OFFSETSDO_STARTING_OFFSET: indica l’offset : indica l’offset all’interno del vettore SDO_ORDINATES dove all’interno del vettore SDO_ORDINATES dove è memorizzata la prima coordinata (è memorizzata la prima coordinata (≥≥1)1)
– SDO_ETYPESDO_ETYPE: indica il tipo dell’elemento che : indica il tipo dell’elemento che può essere semplice (1,2,1003,2003) o può essere semplice (1,2,1003,2003) o composto (4,1005,2005)composto (4,1005,2005)
– SDO_INTERPRETATIONSDO_INTERPRETATION: se SDO_ETYPE indica : se SDO_ETYPE indica un elemento semplice, determina un elemento semplice, determina l’interpretazione della sequenza, altrimenti l’interpretazione della sequenza, altrimenti specifica quante sono le triplette successivespecifica quante sono le triplette successive
Università degli Studi di Udine 52
Valori validi per Valori validi per SDO_ELEM_INFO - 1SDO_ELEM_INFO - 1
SDO_ETYPE SDO_INTERP. Significato
0 qualsiasi valore numerico
Modella tipi geometrici non
supportati da Oracle Spatial
1 1 Tipo punto
1 n>1 Gruppo di n punti
2 1 Stringa di linee i cui vertici sono
connessi da segmenti di linee
rette
2 2 Stringa di linee formata da una
sequenza di archi circolari
Università degli Studi di Udine 53
Valori validi per Valori validi per SDO_ELEM_INFO - 2SDO_ELEM_INFO - 2
SDO_ETYPE SDO_INTERP. Significato
1003 o 2003 1 Poligono semplice i cui vertici
sono connessi da segmenti di
linee rette
1003 o 2003 2 Poligono formato da una
sequenza connessa di archi
circolari
1003 o 2003 3 Tipo rettangolo: solo due punti
(basso a sinistra e alto a destra)
1003 o 2003 4 Tipo cerchio: tre punti tutti
appartenenti alla circonferenza
Università degli Studi di Udine 54
Valori validi per Valori validi per SDO_ELEM_INFO - 3SDO_ELEM_INFO - 3
SDO_ETYPE SDO_INTERP. Significato
4 n>1 Stringa di linee composte: n indica
il numero di triplette successive, le
successive n triplette descrivono
ogni sottoelemento
1005 o 2005 n>1 Poligono composto: n indica il
numero di triplette successive, le
successive n triplette descrivono
ogni sottoelemento
NOTA: in 1003/1005 e 2003/2005,il valore 1 iniziale identifica il bordo NOTA: in 1003/1005 e 2003/2005,il valore 1 iniziale identifica il bordo esterno e il valore 2 identifica quello interno (nel caso di poligoni con buchi)esterno e il valore 2 identifica quello interno (nel caso di poligoni con buchi)
Università degli Studi di Udine 55
SDO_ORDINATESSDO_ORDINATES
• È un vettore di lunghezza variabile È un vettore di lunghezza variabile di oggetti di tipo NUMBER di oggetti di tipo NUMBER
• Memorizza le coordinate che Memorizza le coordinate che definiscono la frontiera di un definiscono la frontiera di un valore geometricovalore geometrico
Università degli Studi di Udine 56
SDO_GEOMETRY: Esempio - 1SDO_GEOMETRY: Esempio - 1
• Creare una tabella geografica EDIFICI in Creare una tabella geografica EDIFICI in cui memorizzare il numero identificativo, cui memorizzare il numero identificativo, il nome e la forma degli edifici di una il nome e la forma degli edifici di una cittàcittà
CREATE TABLE edifici(id NUMBER PRIMARY KEY,
nome VARCHAR2(32), estensione SDO_GEOMETRY);
Università degli Studi di Udine 57
SDO_GEOMETRY: Esempio - 2SDO_GEOMETRY: Esempio - 2
• Inserire la Inserire la seguente seguente istanzaistanza
Università degli Studi di Udine 58
SDO_GEOMETRY: Esempio - 3SDO_GEOMETRY: Esempio - 3
• SDO_GTYPE = 2003SDO_GTYPE = 2003– d=2 indica una geometria bidimensionaled=2 indica una geometria bidimensionale– tt=03 indicano che si tratta di un poligonott=03 indicano che si tratta di un poligono
• SDO_SRID = nullSDO_SRID = null– nessun sistema di coordinate è stato nessun sistema di coordinate è stato esplicitamente assegnato alla geometriaesplicitamente assegnato alla geometria
• SDO_POINT = nullSDO_POINT = null– ignorato da Spatial perché non si tratta di ignorato da Spatial perché non si tratta di una geometria di tipo puntouna geometria di tipo punto
Università degli Studi di Udine 59
SDO_GEOMETRY: Esempio - 4SDO_GEOMETRY: Esempio - 4
• SDO_ELEM_INFO = SDO_ELEM_INFO = (1,1005,2, 1,2,1, 5,2,2)(1,1005,2, 1,2,1, 5,2,2)
– prima tripletta: indica che si tratta di un prima tripletta: indica che si tratta di un poligono composto da due segmenti di linee poligono composto da due segmenti di linee descritti nelle triplette successivedescritti nelle triplette successive
– seconda tripletta: indica che la prima parte seconda tripletta: indica che la prima parte del poligono è costituito da segmenti di linee del poligono è costituito da segmenti di linee rette e le relative coordinate iniziano all’offset rette e le relative coordinate iniziano all’offset 11
– terza tripletta: indica che la seconda stringa di terza tripletta: indica che la seconda stringa di linee è composta da un arco circolare le cui linee è composta da un arco circolare le cui coordinate si trovano a partire dall’offset 5coordinate si trovano a partire dall’offset 5
Università degli Studi di Udine 60
SDO_GEOMETRY: Esempio - 5SDO_GEOMETRY: Esempio - 5
• SDO_ORDINATES = SDO_ORDINATES = (6,10, 10,1, 14,10, 10,14, 6,10)(6,10, 10,1, 14,10, 10,14, 6,10)– indica le coordinate dei punti del bordo del indica le coordinate dei punti del bordo del poligono che devono essere interpretate poligono che devono essere interpretate come descritto in SDO_ELEM_INFOcome descritto in SDO_ELEM_INFO
Università degli Studi di Udine 61
SDO_GEOMETRY: Esempio - 6SDO_GEOMETRY: Esempio - 6
INSERT INTO edifici VALUES( 12,‘Palazzo del comune’,SDO_GEOMETRY(2003, null, null,SDO_ELEM_INFO_ARRAY(1,1005,2, 1,2,1, 5,2,2),SDO_ORDINATE_ARRAY(6,10, 10,1, 14,10,
10,14, 6,10))
); Università degli Studi di Udine 62
SDO_GEOMETRY: Esempio - 7SDO_GEOMETRY: Esempio - 7
• Inserire la Inserire la seguente seguente istanzaistanza
Università degli Studi di Udine 63
SDO_GEOMETRY: Esempio - 8SDO_GEOMETRY: Esempio - 8
• SDO_GTYPE = 2003SDO_GTYPE = 2003– d=2 indica una geometria bidimensionaled=2 indica una geometria bidimensionale– tt=03 indicano che si tratta di un poligonott=03 indicano che si tratta di un poligono
• SDO_SRID = nullSDO_SRID = null– nessun sistema di coordinate è stato nessun sistema di coordinate è stato esplicitamente assegnato alla geometriaesplicitamente assegnato alla geometria
• SDO_POINT = nullSDO_POINT = null– ignorato da Spatial perché non si tratta di ignorato da Spatial perché non si tratta di una geometria di tipo puntouna geometria di tipo punto
Università degli Studi di Udine 64
SDO_GEOMETRY: Esempio - 9SDO_GEOMETRY: Esempio - 9
• SDO_ELEM_INFO = (1,1003,3)SDO_ELEM_INFO = (1,1003,3)– 1003,3: indica che si tratta di un 1003,3: indica che si tratta di un poligono di tipo rettangolopoligono di tipo rettangolo
• SDO_ORDINATES = (1, 1, 5, 7)SDO_ORDINATES = (1, 1, 5, 7)– indentifica le coordinate del vertice in indentifica le coordinate del vertice in basso a sinistra e di quello in alto a basso a sinistra e di quello in alto a destradestra
Università degli Studi di Udine 65
SDO_GEOMETRY: Esempio - 10SDO_GEOMETRY: Esempio - 10
INSERT INTO edifici VALUES( 8,‘Chiesa’,SDO_GEOMETRY(2003, null, null,SDO_ELEM_INFO_ARRAY (1,1003,3),SDO_ORDINATE_ARRAY (1, 1, 5, 7))
); Università degli Studi di Udine 66
Tolleranza - 1Tolleranza - 1
• Il valore Il valore tolerancetolerance è utilizzato per è utilizzato per associare un livello di precisione ai associare un livello di precisione ai dati spazialidati spaziali
• È specificata in due casi:È specificata in due casi:– nella definizione dei metadatinella definizione dei metadati– nella definizione di alcune funzioninella definizione di alcune funzioni
Università degli Studi di Udine 67
Tolleranza - 2Tolleranza - 2
Università degli Studi di Udine 68
Funzioni geometricheFunzioni geometriche
• Funzioni associate al tipo di dato Funzioni associate al tipo di dato SDO_GEOMETRYSDO_GEOMETRY
• Diverse categorie:Diverse categorie:– funzioni di verifica delle relazioni che funzioni di verifica delle relazioni che intercorrono tra due oggettiintercorrono tra due oggetti
– funzioni di validazionefunzioni di validazione– operazioni su singoli oggettioperazioni su singoli oggetti– operazioni su coppie di oggettioperazioni su coppie di oggetti
Università degli Studi di Udine 69
Funzioni geometriche:Funzioni geometriche:relazioni fra due oggettirelazioni fra due oggetti
• SDO_GEOM.RELATE Stabilisce se due SDO_GEOM.RELATE Stabilisce se due oggetti stanno in una determinata oggetti stanno in una determinata relazione (topologica)relazione (topologica)
• SDO_GEOM.WITHIN_DISTANCE SDO_GEOM.WITHIN_DISTANCE Determina se due oggetti geometrici si Determina se due oggetti geometrici si trovano ad una distanza inferiore ad un trovano ad una distanza inferiore ad un valore prefissatovalore prefissato
Università degli Studi di Udine 70
Funzioni geometriche:Funzioni geometriche:funzioni di validazionefunzioni di validazione
• SDO_GEOM. SDO_GEOM. VALIDATE_GEOMETRY_WITH_CONTEXT VALIDATE_GEOMETRY_WITH_CONTEXT Verifica se una geometria è validaVerifica se una geometria è valida
• SDO_GEOM. SDO_GEOM. VALIDATE_LAYER_WITH_CONTEXT VALIDATE_LAYER_WITH_CONTEXT Verifica se tutte le geometrie Verifica se tutte le geometrie memorizzate in una colonna sono validememorizzate in una colonna sono valide
NOTA: in alcuni casi i controlli sono effettuati in modo NOTA: in alcuni casi i controlli sono effettuati in modo automatico (caso dei rettangoli)automatico (caso dei rettangoli)
Università degli Studi di Udine 71
Funzioni geometriche:Funzioni geometriche:operazioni su singoli oggetti -1operazioni su singoli oggetti -1
• SDO_GEOM.SDO_ARC_DENSIFY SDO_GEOM.SDO_ARC_DENSIFY Approssima ogni arco circolare con una Approssima ogni arco circolare con una spezzata aperta ed ogni cerchio con una spezzata aperta ed ogni cerchio con una spezzata chiusa (la qualità spezzata chiusa (la qualità dell‘approssimazione è specificata dell‘approssimazione è specificata attraverso opportuni parametri)attraverso opportuni parametri)
• SDO_GEOM.SDO_AREA Calcola l'area di SDO_GEOM.SDO_AREA Calcola l'area di un poligono bidimensionaleun poligono bidimensionale
Università degli Studi di Udine 72
Funzioni geometriche:Funzioni geometriche: operazioni su singoli oggetti -2 operazioni su singoli oggetti -2
• SDO_GEOM.SDO_BUFFER Genera SDO_GEOM.SDO_BUFFER Genera un poligono di buffer attorno ad un poligono di buffer attorno ad una geometria una geometria
Università degli Studi di Udine 73
Funzioni geometriche:Funzioni geometriche: operazioni su singoli oggetti -3 operazioni su singoli oggetti -3
• SDO_GEOM.SDO_CONVEXHULL SDO_GEOM.SDO_CONVEXHULL Ritorna un oggetto di tipo poligono Ritorna un oggetto di tipo poligono che rappresenta il bordo convesso che rappresenta il bordo convesso della geometriadella geometria
Università degli Studi di Udine 74
Funzioni geometriche: Funzioni geometriche: operazioni su singoli oggetti -4operazioni su singoli oggetti -4
• SDO_GEOM.SDO_MBR Ritorna il SDO_GEOM.SDO_MBR Ritorna il minimum bounding rectangle minimum bounding rectangle (MBR) di una geometria(MBR) di una geometria
Università degli Studi di Udine 75
Funzioni geometriche: Funzioni geometriche: operazioni su singoli oggetti -5operazioni su singoli oggetti -5
• SDO_GEOM.SDO_MAX_MBR_ORDINATE SDO_GEOM.SDO_MAX_MBR_ORDINATE Ritorna il massimo valore per l'ordinata Ritorna il massimo valore per l'ordinata specificata del minimum bounding specificata del minimum bounding rectangle di una geometriarectangle di una geometria
• SDO_GEOM.SDO_MIN_MBR_ORDINATE SDO_GEOM.SDO_MIN_MBR_ORDINATE Ritorna il minimo valore per l'ordinata Ritorna il minimo valore per l'ordinata specificata del minimum bounding specificata del minimum bounding rectangle di una geometriarectangle di una geometria
Università degli Studi di Udine 76
Funzioni geometriche: Funzioni geometriche: operazioni su singoli oggetti -6operazioni su singoli oggetti -6
• SDO_GEOM.SDO_LENGTH Calcola la SDO_GEOM.SDO_LENGTH Calcola la lunghezza, o perimetro, della lunghezza, o perimetro, della geometriageometria
• SDO_GEOM.SDO_CENTROID Ritorna SDO_GEOM.SDO_CENTROID Ritorna il centroide di un poligonoil centroide di un poligono
• SDO_GEOM.SDO_POINTSURFACE SDO_GEOM.SDO_POINTSURFACE Ritorna un punto che sicuramente Ritorna un punto che sicuramente appartiene alla superficie di un appartiene alla superficie di un poligonopoligono
Università degli Studi di Udine 77
Funzioni geometriche:Funzioni geometriche:operazioni su due oggetti - 1operazioni su due oggetti - 1• SDO_GEOM.SDO_DISTANCE Calcola la SDO_GEOM.SDO_DISTANCE Calcola la distanza fra due geometriedistanza fra due geometrie
• SDO_GEOM.SDO_DIFFERENCE Ritorna SDO_GEOM.SDO_DIFFERENCE Ritorna una geometria che è la differenza una geometria che è la differenza topologica (operazione MINUS) di due topologica (operazione MINUS) di due oggetti geometricioggetti geometrici
• SDO_GEOM.SDO_INTERSECTION SDO_GEOM.SDO_INTERSECTION Ritorna una geometria che è Ritorna una geometria che è l'intersezione topologica (operazione l'intersezione topologica (operazione AND) di due oggetti geometriciAND) di due oggetti geometrici
Università degli Studi di Udine 78
Funzioni geometriche:Funzioni geometriche:operazioni su due oggetti - 2operazioni su due oggetti - 2
• SDO_GEOM.SDO_UNION Ritorna una SDO_GEOM.SDO_UNION Ritorna una geometria che è l'unione topologica geometria che è l'unione topologica (operazione OR) di due oggetti (operazione OR) di due oggetti geometricigeometrici
• SDO_GEOM.SDO_XOR Ritorna una SDO_GEOM.SDO_XOR Ritorna una geometria che è la differenza geometria che è la differenza simmetrica topologica (operazione XOR) simmetrica topologica (operazione XOR) di due oggetti geometricidi due oggetti geometrici
Università degli Studi di Udine 79
Funzioni geometricheFunzioni geometriche
Esempio.Esempio. Data la tabella Data la tabella TERRITORIO (TERRITORIO (idid, estensione) , estensione) calcolare l‘area di ogni istanzacalcolare l‘area di ogni istanza
SELECT id, SELECT id, SDO_GEOM.SDO_AREA(SDO_GEOM.SDO_AREA(estensione,0.005estensione,0.005))FROM TERRITORIOFROM TERRITORIO
Università degli Studi di Udine 80
Relazioni topologiche - 1Relazioni topologiche - 1
• Oracle Spatial definisce le relazioni Oracle Spatial definisce le relazioni topologiche utilizzando il modello topologiche utilizzando il modello 9-intersection9-intersection
• Non vengono esplicitamente Non vengono esplicitamente memorizzate nelle tabelle, ma memorizzate nelle tabelle, ma sono derivate per mezzo sono derivate per mezzo dell’operatore SDO_RELATEdell’operatore SDO_RELATE
Università degli Studi di Udine 81
Relazioni topologiche - 2Relazioni topologiche - 2
• DISJOINT I contorni e gli interni non si DISJOINT I contorni e gli interni non si intersecanointersecano
• TOUCH I contorni si intersecano, gli TOUCH I contorni si intersecano, gli interni nointerni no
• OVERLAPBDYDISJOINT L'interno di un OVERLAPBDYDISJOINT L'interno di un oggetto interseca il contorno e l'interno oggetto interseca il contorno e l'interno dell'altro oggetto, i due contorni non si dell'altro oggetto, i due contorni non si intersecanointersecano
• OVERLAPBDYINTERSECT I contorni e gli OVERLAPBDYINTERSECT I contorni e gli interni dei due oggetti si intersecanointerni dei due oggetti si intersecano
Università degli Studi di Udine 82
Relazioni topologiche - 3Relazioni topologiche - 3
• EQUAL I due oggetti hanno lo stesso EQUAL I due oggetti hanno lo stesso contorno ed internocontorno ed interno
• CONTAINS L‘interno ed il contorno di un CONTAINS L‘interno ed il contorno di un oggetto sono completamente contenuti oggetto sono completamente contenuti nell'interno dell'altro oggettonell'interno dell'altro oggetto
• COVERS L‘interno, ma non il contorno, COVERS L‘interno, ma non il contorno, di un oggetto è completamente di un oggetto è completamente contenuto nell'interno dell'altro oggettocontenuto nell'interno dell'altro oggetto
• INSIDE Inverso di CONTAINSINSIDE Inverso di CONTAINS
Università degli Studi di Udine 83
Relazioni topologiche - 4Relazioni topologiche - 4
• COVERED BY Inverso di COVERSCOVERED BY Inverso di COVERS• ON L‘interno ed il contorno di un ON L‘interno ed il contorno di un oggetto appartengono al contorno oggetto appartengono al contorno dell‘altro oggettodell‘altro oggetto
• ANYINTERACT Gli oggetti sono non ANYINTERACT Gli oggetti sono non disgiuntidisgiunti
NOTA: le relazioni touch, equal, NOTA: le relazioni touch, equal, overlapbdydisjoint, overlapbdyintersect, overlapbdydisjoint, overlapbdyintersect, disjoint sono simmetrichedisjoint sono simmetriche
Università degli Studi di Udine 84
Relazioni topologiche - 5Relazioni topologiche - 5
Università degli Studi di Udine 85
Interrogazioni spazialiInterrogazioni spaziali
• Per la risoluzione di interrogazioni Per la risoluzione di interrogazioni spaziali Oracle Spatial sfrutta il modello spaziali Oracle Spatial sfrutta il modello “two-tier query““two-tier query“
• Sono utilizzate due distinte operazioni:Sono utilizzate due distinte operazioni:– filtro primariofiltro primario:: permette di selezionare i permette di selezionare i candidati che vanno passati al secondo filtro candidati che vanno passati al secondo filtro ed utilizza la geometria (o indice) per ed utilizza la geometria (o indice) per ridurre la complessità computazionaleridurre la complessità computazionale
– filtro secondariofiltro secondario:: applicato al resultato del applicato al resultato del filtro primario, restituisce il risultato esatto filtro primario, restituisce il risultato esatto dell’interrogazionedell’interrogazione
Università degli Studi di Udine 86
Operatori spaziali - 1Operatori spaziali - 1
• SDO_FILTER Stabilisce se gli MBR di SDO_FILTER Stabilisce se gli MBR di due oggetti geometrici stanno in una due oggetti geometrici stanno in una data relazione topologica (lavoro svolto data relazione topologica (lavoro svolto dal primo filtro)dal primo filtro)
• SDO_NN Determina l‘oggetto/gli oggetti SDO_NN Determina l‘oggetto/gli oggetti geometrici più vicini ad un dato oggetto geometrici più vicini ad un dato oggetto geometricogeometrico
• SDO_NN_DISTANCE Restituisce la SDO_NN_DISTANCE Restituisce la distanza di un oggetto identificato con distanza di un oggetto identificato con SDO_NNSDO_NN
Università degli Studi di Udine 87
Operatori spaziali - 2Operatori spaziali - 2
• SDO_RELATE Determina se due SDO_RELATE Determina se due oggetti geometrici stanno in una data oggetti geometrici stanno in una data relazione topologicarelazione topologica
• SDO_WITHIN_DISTANCE Determina SDO_WITHIN_DISTANCE Determina se due geometria sono entro una se due geometria sono entro una specifica distanza l‘uno dall‘altrospecifica distanza l‘uno dall‘altro
• SDO_JOIN Esegue un join spaziale SDO_JOIN Esegue un join spaziale basato su una o più relazioni basato su una o più relazioni topologichetopologiche
Università degli Studi di Udine 88
SDO_RELATE - 1SDO_RELATE - 1
• Determina se un oggetto geometrico Determina se un oggetto geometrico è in una particolare relazione è in una particolare relazione topologica con un altro oggetto topologica con un altro oggetto geometrico, quale, ad esempio, geometrico, quale, ad esempio, un'area di interesseun'area di interesse
• Sintassi:Sintassi:SDO_RELATE(SDO_RELATE(geometria1,geometria2,parametrigeometria1,geometria2,parametri))
Università degli Studi di Udine 89
SDO_RELATE - 2SDO_RELATE - 2
• La geometria1 specifica una La geometria1 specifica una colonna geometrica di una tabellacolonna geometrica di una tabella
• La geometria2 può specificare sia La geometria2 può specificare sia una colonna geometrica che un una colonna geometrica che un valore geometricovalore geometrico
Università degli Studi di Udine 90
SDO_RELATE - 3SDO_RELATE - 3• Parametri:Parametri:
– maskmask: specifica la relazione topologica di : specifica la relazione topologica di interesse ed è obbligatoriointeresse ed è obbligatorio• è possibile combinare i valori è possibile combinare i valori es. 'mask=inside+touch'es. 'mask=inside+touch'
– min_resolution min_resolution e/oe/o max_resolution max_resolution: è : è opzionale e specifica che devono essere opzionale e specifica che devono essere considerate solo le geometrie il cui MBR ha considerate solo le geometrie il cui MBR ha almeno un lato di lunghezza uguale o almeno un lato di lunghezza uguale o maggiore e/o minore o uguale al valore maggiore e/o minore o uguale al valore specificatospecificato
Università degli Studi di Udine 91
SDO_RELATE - 4SDO_RELATE - 4
• Deve essere usato all‘interno della Deve essere usato all‘interno della clausola WHEREclausola WHERE
• Ritorna vero se il confronto tra le Ritorna vero se il confronto tra le coppie di oggetti geometrici sono coppie di oggetti geometrici sono nella relazione topologica specificata nella relazione topologica specificata da mask, falso altrimentida mask, falso altrimenti
Università degli Studi di Udine 92
SDO_RELATE - 5SDO_RELATE - 5
Esempio.Esempio. Data la tabella geometrica Data la tabella geometrica così definita così definita EDIFICIO (id, descrizione, estensione) determinare la descrizione determinare la descrizione degli edifici che si trovano all‘interno degli edifici che si trovano all‘interno della geometria così definita della geometria così definita SDO_GEOMETRY (2003,null,null,SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(1,1,20,20))
Università degli Studi di Udine 93
SDO_RELATE - 6SDO_RELATE - 6
SELECT descrizione FROM EDIFICIO WHERE SDO_RELATE(estensione, SDO_GEOMETRY(2003, null, null,SDO_ELEM_INFO_ARRAY(1, 1003,3),SDO_ORDINATE_ARRAY(1,1,20,20)),‘mask=inside‘)=‘TRUE‘;
Università degli Studi di Udine 94
SDO_RELATE - 7SDO_RELATE - 7
• Sono stati introdotti una serie di Sono stati introdotti una serie di operatatori SDO_RELATE specifici per operatatori SDO_RELATE specifici per le diverse relazioni topologiche:le diverse relazioni topologiche:– SDO_ANYINTERACTSDO_ANYINTERACT - SDO_CONTAINS- SDO_CONTAINS– SDO_OVERLAPSSDO_OVERLAPS - SDO_TOUCH- SDO_TOUCH– SDO_COVERSSDO_COVERS - SDO_EQUAL- SDO_EQUAL– SDO_INSIDESDO_INSIDE– SDO_COVEREDBYSDO_ONSDO_COVEREDBYSDO_ON– SDO_OVERLAPBDYDISJOINTSDO_OVERLAPBDYDISJOINT– SDO_OVERLAPBDYINTERSECTSDO_OVERLAPBDYINTERSECT
Università degli Studi di Udine 95
SDO_WITHIN_DISTANCE - 1SDO_WITHIN_DISTANCE - 1
• Determina se due oggetti spaziali si Determina se due oggetti spaziali si trovano a meno di una determinata trovano a meno di una determinata distanza (euclidea) tra di lorodistanza (euclidea) tra di loro
• Sintassi: Sintassi: SDO_WITHIN_DISTANCE(geometria1, SDO_WITHIN_DISTANCE(geometria1,
ageom, parametri)ageom, parametri)
Università degli Studi di Udine 96
SDO_WITHIN_DISTANCE - 2SDO_WITHIN_DISTANCE - 2
• La geometria1 sLa geometria1 specifica una colonna pecifica una colonna geometrica che contiene l'insieme di geometrica che contiene l'insieme di geometrie che sono valutate per geometrie che sono valutate per determinare se stanno entro la determinare se stanno entro la distanza specificata dall'oggetto aGeomdistanza specificata dall'oggetto aGeom
• aGeom saGeom specifica una colonna pecifica una colonna geometrica o una variabile geometrica geometrica o una variabile geometrica a partire dalla quale misurare la a partire dalla quale misurare la distanza da geometria1distanza da geometria1
Università degli Studi di Udine 97
SDO_WITHIN_DISTANCE - 3SDO_WITHIN_DISTANCE - 3• Parametri:Parametri:
– distancedistance: s: specifica il valore della distanzapecifica il valore della distanza ed ed è obbligatorioè obbligatorio
– min_resolution min_resolution e/oe/o max_resolution max_resolution: è : è opzionale e specifica che devono essere opzionale e specifica che devono essere considerate solo le geometrie il cui MBR ha considerate solo le geometrie il cui MBR ha almeno un lato di lunghezza uguale o almeno un lato di lunghezza uguale o maggiore e/o minore o uguale al valore maggiore e/o minore o uguale al valore specificatospecificato
– querytypequerytype: settato a filter esegue : settato a filter esegue esclusivamente il filtro primario, altrimenti esclusivamente il filtro primario, altrimenti (se non specificato), esegue anche il filtro (se non specificato), esegue anche il filtro secondariosecondario
– unitunit: specifica un‘unità di misura associata : specifica un‘unità di misura associata alla distanzaalla distanza Università degli Studi di Udine 98
SDO_WITHIN_DISTANCE - 4SDO_WITHIN_DISTANCE - 4
• Deve essere usato all‘interno della Deve essere usato all‘interno della clausola WHEREclausola WHERE
• Ritorna vero se la distanza tra i due Ritorna vero se la distanza tra i due oggetti geometrici specificati è oggetti geometrici specificati è minore del valore specificato dal minore del valore specificato dal parametro distance, falso altrimentiparametro distance, falso altrimenti
Università degli Studi di Udine 99
SDO_WITHIN_DISTANCE - 5SDO_WITHIN_DISTANCE - 5
Esempio.Esempio. Data la tabella geometrica così Data la tabella geometrica così definita definita EDIFICIO (id, descrizione, estensione) determinare la descrizione determinare la descrizione degli edifici che si trovano ad una degli edifici che si trovano ad una distanza inferiore a 20m dal punto così distanza inferiore a 20m dal punto così definito definito SDO_GEOMETRY (2001, null, null, SDO_ELEM_INFO_ARRAY(1,1,1), SDO_ORDINATE_ARRAY(4,4))
Università degli Studi di Udine 100
SDO_WITHIN_DISTANCE - 6SDO_WITHIN_DISTANCE - 6
SELECT descrizione
FROM EDIFICIO
WHERE SDO_WITHIN_DISTANCE (estensione,
SDO_GEOMETRY(
2001,null,null,
SDO_ELEM_INFO_ARRAY(1,1,1),
SDO_ORDINATE_ARRAY(4,4)),
‘distance=20‘)= ‘TRUE‘;
Università degli Studi di Udine 101
SDO_JOIN - 1SDO_JOIN - 1
• Esegue un join spaziale basato su una Esegue un join spaziale basato su una o più relazioni topologicheo più relazioni topologiche– non è un vero e proprio operatore non è un vero e proprio operatore spaziale ma una funzione su tabellespaziale ma una funzione su tabelle
• Sintassi:Sintassi:SDO_JOIN(tabella1, colonna1, tabella2, SDO_JOIN(tabella1, colonna1, tabella2, colonna2, parametri, ordine)colonna2, parametri, ordine)
Università degli Studi di Udine 102
SDO_JOIN - 2SDO_JOIN - 2
• tabella1 e geometria1 specificano tabella1 e geometria1 specificano una tabella ed una sua colonna una tabella ed una sua colonna geometricageometrica
• tabella2 e geometria2 specificano tabella2 e geometria2 specificano una seconda tabella ed una sua una seconda tabella ed una sua colonna geometricacolonna geometrica
Università degli Studi di Udine 103
SDO_JOIN - 3SDO_JOIN - 3• Parametri (opzionali):Parametri (opzionali):
– maskmask: specifica la relazione topologica di : specifica la relazione topologica di interesseinteresse• default = filterdefault = filter
– distancedistance: specifica una distanza di : specifica una distanza di tolleranza che deve essere considerata tolleranza che deve essere considerata prima di verificare il controllo topologicoprima di verificare il controllo topologico
– unitunit: specifica un‘unità di misura associata : specifica un‘unità di misura associata alla distanzaalla distanza
• Ordine (opzionale): Ordine (opzionale): specifica se l‘ordine di specifica se l‘ordine di elaborazione delle tabelle coinvolte nel join elaborazione delle tabelle coinvolte nel join deve essere preservatodeve essere preservato
Università degli Studi di Udine 104
SDO_JOIN - 4SDO_JOIN - 4
• Deve essere usato all‘interno della Deve essere usato all‘interno della clausola FROMclausola FROM
• Ritorna un oggetto Ritorna un oggetto SDO_ROWIDSET, che consiste in SDO_ROWIDSET, che consiste in una tabella di oggetti una tabella di oggetti SDO_ROWIDPAIRSDO_ROWIDPAIR
Università degli Studi di Udine 105
SDO_JOIN - 5SDO_JOIN - 5
Esempio.Esempio. Data la tabella Data la tabella geometrica geometrica EDIFICIO (id, descrizione, estensione), selezionare, per ogni edificio, selezionare, per ogni edificio, tutti gli edifici con esso in tutti gli edifici con esso in relazione ANYINTERACTrelazione ANYINTERACT
Università degli Studi di Udine 106
SDO_JOIN - 6SDO_JOIN - 6
SELECT a.descrizione, b.descrizione
FROM TABLE(SDO_JOIN('EDIFICIO', ‚'estensione', 'EDIFICIO', 'estensione',
'mask=ANYINTERACT')) c,
EDIFICIO a,
EDIFICIO b
WHERE c.rowid1 = a.rowid
AND c.rowid2 = b.rowid
ORDER BY a.descrizione;
Università degli Studi di Udine 107
Funzioni aggregate - 1Funzioni aggregate - 1
• Le funzioni aggregate vengono Le funzioni aggregate vengono utilizzate per aggregare i risultati utilizzate per aggregare i risultati ottenuti da un‘interrogazioneottenuti da un‘interrogazione
• Analoghe alle funzioni aggregate Analoghe alle funzioni aggregate tradizionali, lavorano su dati tradizionali, lavorano su dati spazialispaziali
Università degli Studi di Udine 108
Funzioni aggregate - 2Funzioni aggregate - 2
• SDO_AGGREGATE_CENTROID Ritorna SDO_AGGREGATE_CENTROID Ritorna una geometria che è il centro di gravità una geometria che è il centro di gravità (centroide) della geometria specificata(centroide) della geometria specificata
• SDO_AGGR_CONVEXHULL Ritorna una SDO_AGGR_CONVEXHULL Ritorna una geometria che è il convex hull (bordo geometria che è il convex hull (bordo convesso) delle geometrie specificateconvesso) delle geometrie specificate
• SDO_AGGR_LRS_CONCAT Ritorna una SDO_AGGR_LRS_CONCAT Ritorna una geometria LRS (Linear Referencing geometria LRS (Linear Referencing System) che concatena gli oggetti System) che concatena gli oggetti geometrici LRS specificatigeometrici LRS specificati
Università degli Studi di Udine 109
Funzioni aggregate - 3Funzioni aggregate - 3
• SDO_AGGR_MBR Ritorna il SDO_AGGR_MBR Ritorna il contorno del rettangolo minimo contorno del rettangolo minimo che contiene tutte le geometrie che contiene tutte le geometrie specificatespecificate
• SDO_AGGR_UNION Ritorna un SDO_AGGR_UNION Ritorna un oggetto geometrico che è l'unione oggetto geometrico che è l'unione topologica (operazione OR) degli topologica (operazione OR) degli oggetti geometrici specificatioggetti geometrici specificati
Università degli Studi di Udine 110
Funzioni aggregate - 4Funzioni aggregate - 4
• Molte funzioni accettano in input un Molte funzioni accettano in input un parametro di tipo SDOAGGRTYPE così parametro di tipo SDOAGGRTYPE così definito:definito:
CREATE TYPE SDOAGGRTYPE AS OBJECT(geometry SDO_GEOMETRY,
tolerance NUMBER);
Università degli Studi di Udine 111
Funzioni aggregate - 5Funzioni aggregate - 5
• Data la tabella geometrica così definita Data la tabella geometrica così definita TERRENI (id, estensione, utilizzo) determinare l‘unione dei terreni determinare l‘unione dei terreni utilizzati per scopi agricoli.utilizzati per scopi agricoli.
SELECT SDO_AGGR_UNION(SDOAGGRTYPE(t.estensione,0.005))
FROM TERRENI as t WHERE t.utilizzo=‘agricolo‘;
Università degli Studi di Udine 112
Indici - 1Indici - 1
• Permettono di ottenere una Permettono di ottenere una maggiore efficienza nell’accesso maggiore efficienza nell’accesso dei dati spazialidei dati spaziali
• Possono essere di due tipi:Possono essere di due tipi:– R-TreeR-Tree–QuadtreeQuadtree
Università degli Studi di Udine 113
Indici - 2Indici - 2
• Creare un indice R-Tree sull’attributo Creare un indice R-Tree sull’attributo geometrico geometrico estensione della tabella della tabella territorioCREATE INDEX territorio_ind ON territorio(estensione) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
• Per creare un indice di tipo Quadtree Per creare un indice di tipo Quadtree bisogna aggiungere un parametrobisogna aggiungere un parametroPARAMETER (‘SDO_LEVEL=8’)
Università degli Studi di Udine 114
Indici - 3Indici - 3
• Se si vuole fare in modo che un Se si vuole fare in modo che un attributo di tipo SDO_GEOMETRY attributo di tipo SDO_GEOMETRY contenga solo un tipo di geometria contenga solo un tipo di geometria bisogna usare la keyword bisogna usare la keyword layer_gtypelayer_gtype nella clausola nella clausola PARAMETERS del comando CREATE PARAMETERS del comando CREATE INDEXINDEX
Università degli Studi di Udine 115
Indici - 4Indici - 4
• Creare un indice R-Tree sull’attributo Creare un indice R-Tree sull’attributo geometrico geometrico estensione della della tabella_con_poligono imponendo che la imponendo che la geometria sia di tipo poligono:geometria sia di tipo poligono:
CREATE INDEX polygono_ind ON tabella_con_poligono(estensione) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS (‘layer_gtype=POLYGON’);
Università degli Studi di Udine 116
Indici - 5Indici - 5• Prima di creare un indice è necessario aggiornare la Prima di creare un indice è necessario aggiornare la
vista USER_SDO_GEOM_METADATA che descrive vista USER_SDO_GEOM_METADATA che descrive dimensione, estremi e tolleranza sulle diverse dimensione, estremi e tolleranza sulle diverse dimensionidimensioni
INSERT INTO USER_SDO_GEOM_METADATA VALUES (‘nomeTabella’, ‘nomeAttributoGeometrico’,
SDO_DIM_ARRAY( -- griglia 20x20 SDO_DIM_ELEMENT(‘X’,0,20,0.005),
SDO_DIM_ELEMENT(‘Y’,0,20,0.005)),
null);
Università degli Studi di Udine 117
Esercizio - 1Esercizio - 1
• Lo scenario è quello di un Lo scenario è quello di un produttore di bibita analcolica che produttore di bibita analcolica che ha identificato aree geografiche di ha identificato aree geografiche di interesse dal punto di vista del interesse dal punto di vista del marketing di diversi prodotti marketing di diversi prodotti (cola). (cola).
Università degli Studi di Udine 118
Esercizio - 2Esercizio - 2
Università degli Studi di Udine 119
Esercizio - 3Esercizio - 3
• Creazione di una tabella (COLA_MARKETS) Creazione di una tabella (COLA_MARKETS) che permette di memorizzare dati spazialiche permette di memorizzare dati spaziali
• Aggiornamento della vista Aggiornamento della vista USER_SDO_GEOM_METADATA USER_SDO_GEOM_METADATA per per riflettere la dimensione delle areeriflettere la dimensione delle aree
• Creazione di un indice spaziale Creazione di un indice spaziale (COLA_SPATIAL_IDX)(COLA_SPATIAL_IDX)
• Inserimento delle istanze relative ai Inserimento delle istanze relative ai quattro oggetti spaziali (quattro oggetti spaziali (cola_acola_a, , cola_bcola_b, , cola_ccola_c, , cola_dcola_d))
• Esecuzione di alcune interrogazioni spazialiEsecuzione di alcune interrogazioni spaziali
Università degli Studi di Udine 120
CreazioneCreazione
• Creazione di una tabella geografica dal Creazione di una tabella geografica dal nome cola_markets con tre attributi: nome cola_markets con tre attributi: l’identificatore (mkt_id), il nome (name) l’identificatore (mkt_id), il nome (name) e la geometria associata (shape).e la geometria associata (shape).
CREATE TABLE cola_markets (CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY,mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(10),name VARCHAR2(10),
shape SDO_GEOMETRY);shape SDO_GEOMETRY);
Università degli Studi di Udine 121
Indice - 1Indice - 1• Aggiornamento della vista Aggiornamento della vista USER_SDO_GEOM_METADATA per la USER_SDO_GEOM_METADATA per la creazione degli indicicreazione degli indici
INSERT INTO USER_SDO_GEOM_METADATA VALUES ( ’cola_markets’, ’shape’,
SDO_DIM_ARRAY( -- 20X20 grid SDO_DIM_ELEMENT(’X’, 0, 20, 0.005),
SDO_DIM_ELEMENT(’Y’, 0, 20, 0.005)), NULL – SRID
);
Università degli Studi di Udine 122
Indice - 2Indice - 2
• Creazione dell’indiceCreazione dell’indice
CREATE INDEX cola_spatial_idx
ON cola_markets(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX; -- Preceding
created an R-tree index. -- Following line was for an earlier quadtree -- index:
PARAMETERS(’SDO_LEVEL = 8’);
Università degli Studi di Udine 123
InserimentoInserimento
• Inserimento delle quattro istanze Inserimento delle quattro istanze relative agli oggetti presenti sul relative agli oggetti presenti sul piano di interesse (cola_a, cola_b, piano di interesse (cola_a, cola_b, cola_c, cola_d)cola_c, cola_d)
Università degli Studi di Udine 124
INSERT INTO cola_markets VALUES(INSERT INTO cola_markets VALUES(
1,1,
’’cola_a’,cola_a’,
SDO_GEOMETRY(SDO_GEOMETRY(
2003, -- poligono bidimensionale 2003, -- poligono bidimensionale
NULL,NULL,
NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ELEM_INFO_ARRAY(1,1003,3),
-- rettangolo (1003 = exterior)-- rettangolo (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) SDO_ORDINATE_ARRAY(1,1, 5,7)
-- sono necessari solo due punti per definire-- sono necessari solo due punti per definire
-- un rettangolo-- un rettangolo
;;
Università degli Studi di Udine 125
INSERT INTO cola_markets VALUES(INSERT INTO cola_markets VALUES(
2,2,
’’cola_b’,cola_b’,
SDO_GEOMETRY(SDO_GEOMETRY(
2003, -- poligono bidimensionale2003, -- poligono bidimensionale
NULL,NULL,
NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), SDO_ELEM_INFO_ARRAY(1,1003,1),
-- poligono (1003=exterior)-- poligono (1003=exterior)
SDO_ORDINATE_ARRAY (5,1, 8,1, 8,6, 5,7, 5,1)SDO_ORDINATE_ARRAY (5,1, 8,1, 8,6, 5,7, 5,1)
))
););
Università degli Studi di Udine 126
INSERT INTO cola_markets VALUES(INSERT INTO cola_markets VALUES(
3,3,
’’cola_c’,cola_c’,
SDO_GEOMETRY(SDO_GEOMETRY(
2003, -- poligono bidimensionale2003, -- poligono bidimensionale
NULL,NULL,
NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), SDO_ELEM_INFO_ARRAY(1,1003,1),
-- poligono (exterior)-- poligono (exterior)
SDO_ORDINATE_ARRAYSDO_ORDINATE_ARRAY (3,3, 6,3, 6,5, 4,5, 3,3)(3,3, 6,3, 6,5, 4,5, 3,3)
))
););
Università degli Studi di Udine 127
INSERT INTO cola_markets VALUES(INSERT INTO cola_markets VALUES(
4,4,
’’cola_d’,cola_d’,
SDO_GEOMETRY(SDO_GEOMETRY(
2003, -- poligono bidimensionale2003, -- poligono bidimensionale
NULL,NULL,
NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4), SDO_ELEM_INFO_ARRAY(1,1003,4),
-- cerchio-- cerchio
SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)
))
););
Università degli Studi di Udine 128
Interrogazione - 1Interrogazione - 1
• Determinare l‘intersezione topologica Determinare l‘intersezione topologica delle geometrie di cola_a e cola_cdelle geometrie di cola_a e cola_c
SELECT SDO_GEOM.SDO_INTERSECTION( c_a.
shape, c_c.shape, 0.005)
FROM cola_markets c_a, cola_markets c_c
WHERE c_a.name='cola_a' AND
c_c.name='cola_c';
Università degli Studi di Udine 129
Interrogazione - 2Interrogazione - 2
• Determinare se le geometrie di cola_b e Determinare se le geometrie di cola_b e cola_d sono non disgiunte (anyinteract)cola_d sono non disgiunte (anyinteract)
SELECT SDO_GEOM.RELATE(c_b.shape,
'ANYINTERACT', c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name='cola_b' AND c_d.name='cola_d';
Università degli Studi di Udine 130
Interrogazione - 3Interrogazione - 3
• Determinare l‘area di tutti i Determinare l‘area di tutti i prodotti colaprodotti cola
SELECT name,
SDO_GEOM.SDO_AREA(shape,0.005)
FROM cola_markets;
Università degli Studi di Udine 131
Interrogazione - 4Interrogazione - 4
• Determinare l‘area di cola_aDeterminare l‘area di cola_a
SELECT c.name,
SDO_GEOM.SDO_AREA(c.shape,0.005)
FROM cola_markets c
WHERE c.name = 'cola_a';
Università degli Studi di Udine 132
Interrogazione - 5Interrogazione - 5
• Determinare la distanza fra le Determinare la distanza fra le geometrie cola_b e cola_dgeometrie cola_b e cola_d
SELECT
SDO_GEOM.SDO_DISTANCE( c_b.shape, c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name='cola_b' AND
c_d.name='cola_d';
Università degli Studi di Udine 133
Interrogazione - 6Interrogazione - 6
• Determinare le aree di mercato che Determinare le aree di mercato che intersecano cola_cintersecano cola_c
SELECT x.name
FROM cola_markets c, cola_markets x
WHERE c.name='cola_c' AND
SDO_RELATE( x.shape, c.shape,
'mask=OVERLAPBDYINTERSECT')= ‘TRUE‘;
Università degli Studi di Udine 134
Interrogazione - 7Interrogazione - 7
• Determinare le geometrie che si trovano Determinare le geometrie che si trovano ad una distanza inferiore a 2 da cola_dad una distanza inferiore a 2 da cola_d
SELECT x.name
FROM cola_markets d, cola_markets x
WHERE d.name='cola_d' AND x.name<>'cola_d' AND SDO_WITHIN_DISTANCE(x.shape, d.shape, 'distance=2')='TRUE';