Post gis base_postgresql_tools_sql_base

35
Trento, maggio 2014 POSTGRESQL E POSTGIS PostGIS base

description

Slide che mostrano elementi base del geodb PostGis/Postgresql, configurazioni e comandi sql base per interagire con il geodb.

Transcript of Post gis base_postgresql_tools_sql_base

Page 1: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014

POSTGRESQL E POSTGISPostGIS base

Page 2: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS2

PostGIS e' un'estensione per la base di dati relazionale ad oggetti PostgreSQL che consente di gestire nella base di dati oggetti territoriali.

PostGIS permette di create delle “colonne” con tipo geometrico e include il supporto per gli indici spaziali di tipo R-Tree basati sulle geometrie e le funzioni per l'analisi e il trattamento degli oggetti territoriali.

COS’È POSTGIS

Page 3: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS3

TIPI GEOMETRICI PRINCIPALI

Implementa tutti i tipi base previsti dal Simple FeatureModel:

� POINT – punto � LINESTRING – linea � POLYGON – poligono � GEOMETRY – geometria generica� MULTIPOINT – collezione di punti� MULTILINESTRING – collezione di linee� MULTIPOLYGON – collezione di poligoni� GEOMETRYCOLLECTION – collezione generica

Page 4: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS4

Per aggiungere un tipo geometrico ad una tabella ènecessario eseguire il seguente comando

AddGeometryColumn(nome_schema, nome_tabella, nome_colonna,sistema_di_riferimento, tipo_geometrico,dimensione_coordinate)

Esempio: select addgeometrycolumn ('public', 'un_vol', 'un_vol_sup', '25832', 'POLYGONZ', 3);

AGGIUNTA DI UN TIPO GEOMETRICO

Page 5: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS5

Gli indici spaziali sono uno elemento chiave, infatti permettono di gestire ai database spaziali un grande insieme di dati senza sacrificare le performance.

L’indicizzazione velocizza la ricerca organizzando i dati secondo un albero di ricerca che può essere percorso velocemente per l’individuazione di un record specifico.

L'indicizzazione spaziale calcola per ogni record il reativoenvelope in modo da velocizzare non solo la ricerca ma anche la valutazione delle proprietà poichè alcune proprietà, se non valgono per l'envelope, automaticamente non varranno sulle geometrie che hanno generato quell'envelope

INDICI SPAZIALI

Page 6: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS6

Per creare un indice spaziale si utilizza il comando:

CREATE INDEX nome_indice ON nome_tablella USING GIST (colonna_geometrica);

Esempio: CREATE INDEX un_vol_S1 ON un_vol USING GIST (un_vol_sup)

È inoltre consigliato creare indici anche per i dati non spaziali, tali indici possono essere creati con il comando:

CREATE INDEX nome_indice ON tablella (colonna);

CREAZIONE DI UN INDICE

Page 7: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS7

La semplice creazione di un indice non automaticamente implica un uso efficiente dello stesso da parte di PostgreSQL. Ogni volta che si crea un nuovo indice o dopo molte operazioni di UPDATE, INSERT o DELETE è consigliabile lanciare il comando VACUUM per chiedere a PostgreSQL di utilizzare ogni spazio resosi libero dopo le operazioni citate.

Il pianificatore di query di PostgreSQL sceglie intelligentemente se usare o meno un indice per valutare una query. è necessaeio tenere presente che la ricerca con indice non sempre la più veloce quindi ènecessario utilizzare il comando ANALYZE per aggiornare le statistiche

Attenzione: VACUUM non aggiorna le statistiche, cosìcome ANALYZE non recupera lo spazio libero.

VACUUM E ANALYZE

Page 8: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS8

Entrambi i comandi possono essere lanciati, anche in modo contestuale, su una singola tabella, una singola colonna o un intero database.

VACUUM ANALYZE sul database corrente:VACUUM ANALYZE

VACUUM ANALYZE sul una singola tabella:VACUUM ANALYZE nome_tabella

VACUUM ANALYZE sul una singola colonna:VACUUM ANALYZE nome_tabella (nome_colonna)

VACUUM E ANALYZE / 2

Page 9: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS9

GEOMETRY ACCESSORS

Di seguito sono elencati i metodi per recuperare alcune proprietà di una geometria generica

� ST_GeometryType - Ritorna il tipo geometrico � ST_Boundary - Ritorna il boundary� ST_CoordDim - Ritorna la dimensione delle coordinate� ST_Dimension - Ritorna la dimensione della geometria� ST_Envelope - Ritorna l'envelope contenente la geometria� ST_SRID - Ritorna il sistema di riferimento utilizzato� ST_IsSimple - Ritorna TRUE se la geometria è semplice� ST_IsValid - Ritorna TRUE se la geometria è ben formata� ST_IsEmpty - Ritorna TRUE se la geometria è vuota

Page 10: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS10

GEOMETRY ACCESSORS TIPIZZATI

Metodi definiti solo per le geometrie lineari

� ST_IsClosed - Ritorna TRUE se la linea è chiusa

� ST_IsRing - Ritorna TRUE se la linea è chiusa e semplice

� ST_StartPoint - Ritorna il punto iniziale della linea

� ST_EndPoint - Ritorna il punto finale della linea

Metodi definiti solo per le geometrie poligonali

� ST_ExteriorRing - Ritorna la frontiera esterna del poligono

� ST_NumInteriorRings - Ritorna il numero di ring interni

� ST_InteriorRingN(geom, n) - Ritorna l’ennesimo ring interno

Metodi definiti solo per le collezioni geometriche

• ST_NumGeometries - Ritorna il numero di geometrie della collezione

• ST_GeometryN(geom, n) - Ritorna l’ennesima geometria della collezione

Page 11: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS11

RELAZIONI TOPOLOGICHE - FUNZIONI PRINCIPALI

� ST_Contains(A,B) - TRUE se nessun punto di B cade nell'exterior di A, e almeno un punto di B cade nell'interior di A.

� ST_ContainsProperly(A,B) - TRUE se tutti i punti di B cadono nell'interior di A

� ST_Covers(A,B) - TRUE se nessun punto di B cade nell'exterior di A� ST_CoveredBy(A,B) - TRUE se nessun punto di A cade nell'exterior di B� ST_Crosses(A,B) - TRUE se A e B hanno alcuni punti di interior in

comune.� ST_Disjoint(A,B) - TRUE se le due geometrie non hanno punti di

interazione� ST_Equals(A,B) - TRUE se A e B rappresentano la stessa geometria.� ST_Intersects(A,B) - TRUE se le due geometrie hanno punti di

interazione� ST_Overlaps(A,B) - TRUE se A e B si sovrappongono parzialmente� ST_Touches(A,B) - TRUE se le geometrie hanno almeno un punto di

contatto ma non condividono alcun punto di interior.� ST_Within(A,B) - TRUE se A è completamente contenuta B

Page 12: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS12

FUNZIONI GEOMETRICHE PRINCIPALI

� ST_Buffer(A,m) – Calcola il buffer di m metri applicato alla geometria A

� ST_ConvexHull(A) – Calcola il convex hull (che è la minima geometria convessa che contiene la geometria A)

� ST_Difference(A,B) – Calcola la geometria che rappresenta le parti di A non coperte da B

� ST_Intersection(A,B) – Calcola l'intersezione tra A e B

� ST_SymDifference(A,B) – Calcola la geometria che rappresenta le parti di A non coperte B e le parti di B non coperte A

� ST_Union(geoms) – Calcola la geometria che rappresenta l'unione point set delle geometrie passate come argomento

Page 13: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS13

ALTRE FUNZIONI INTERESSANTI� ST_Area(A) - Ritorna l'area (in metri quadrati) del (multi) polygon

� ST_Centroid(A) - Ritorna il centroide della geometria.

� ST_Distance(A,B) – La distanza minima tra le geometrie A e B

� ST_MaxDistance(A,B) – La distanza massima tra le geometrie A e B

� ST_Length(A) - La lunghezza 2D di una curva o multicurva

� ST_3DLength(A) - La lunghezza 3D di una curva o multicurva

� ST_Perimeter(A) – La lunghezza 2D del perimetro del (multi) polygon

� ST_3DPerimeter (A) - La lunghezza 3D del perimetro del (multi) polygon

� ST_PointOnSurface(A) - Ritorna un punto della superfice del poligono

� ST_LineMerge(multilinestring) - Ritorna un insieme di linenestringriordinando e se possibile fondendo le parti della multilinestring di ingresso

� ST_AsEWKT (A) – Ritorna la geometria nel formato EWKT

� ST_GeomFromEWKT(A) – Legge una geometria dal formato EWKT

� ST_Force2D(A) – Elimina la coordinata Z (funzione planar del GeoUML)

� ST_Force3D(A) – Aggiunge la coordinata Z settata a 0

Page 14: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS14

POSTGRESQL E POSTGISTools SQL

Page 15: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS15

OpenOffice può essere utilizzato come interfaccia per l’interazione con un database generico permettendo la creazione, modifica e cancellazione del contenuto.

OpenOffice permette di gestire diverse basi di dati attraverso l’utilizzo di driver di connessione; uno dei metodi per far interagire OpenOffice

È possibile scaricare gratuitamente il driver JDBC da http://jdbc.postgresql.org/

OPENOFFICE

Page 16: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS16

Aprire OpenOffice

CONFIGURAZIONE DI OPENOFFICE

Selezionare il menùStrumenti -> Opzioni -> Java

Page 17: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS17

Cliccare su Classpath… e aggiungere la libreria JDBC di PostgreSQL

CONFIGURAZIONE DI OPENOFFICE / 2

Chiudere OpeOffice per rendere permanenti e modifiche

Page 18: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS18

Aprire OpenOffice Base e selezionare “Collega a un database esistente” -> JDBC

ISTAURARE LA CONNESSIONE A POSTGRESQL

Compilare i parametri di connessione e digitare Avanti >>

Page 19: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS19

Inserire username e password e testare la connessione.

Salvare il database ed aprirlo

ISTAURARE LA CONNESSIONE A POSTGRESQL / 2

Ricapitoliamo i parametri di connessioneFormato URL del database

jdbc:postgresql://host:port/database

Classe del driver di PostgreSQLorg.postgresql.Driver

Page 20: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS20

INTERFACCIA DI VISUALIZZAZIONE DATI

Page 21: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS21

INTERFACCIA DI VISUALIZZAZIONE DATI / 2

Page 22: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS22

POSTGRESQL E POSTGISBasi del linguaggio SQL

Page 23: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS23

� SQL (“Structured Query Language”)linguaggio che permette il dialogo con il DBMS

� DDL (“Data Definition Language”)creazione modifica e cancellazione di database, schemi,

tabelle e proprietà correlate

� DCL (“Data Control Language”)controllo degli utenti e delle autorizzazioni

� DML (“Data Manipulation Language”)inserimento, modifica, selezione e cancellazione dei

dati

DEFINIZIONI

Page 24: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS24

CREATE TABLE table_name ( column_name data_type [ column_constraint [ ... ] ][, ... ]

)

Tra i vincoli (column_constraint ) si ricordano:� PRIMARY KEY� NOT NULL � DEFAULT default_value� UNIQUE index_parameters� REFERENCES referenceTable ( referenceColumn )

CREAZIONE DI UNA TABELLA

Page 25: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS25

TIPI DI DATI NUMERICI

Alcuni tipi di dato numerici disponibili in PostgreSQL

Nome Descrizione Range

smallint small-range integer -32768 to +32767

integer typical choice for integer-2147483648 to+2147483647

bigint large-range integer-9223372036854775808 to9223372036854775807

decimaluser-specified precision, exact

no limit

numericuser-specified precision, exact

no limit

real variable-precision, inexact 6 decimal digits precision

double precision variable-precision, inexact15 decimal digitsprecision

Page 26: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS26

TIPI DI DATI TEMPORALI

Tipi di dato per la gestione temporale disponibili in PostgreSQL

Nome Descrizione Minimo Massimo

timestamp date and time (no time zone) 4713 BC 294276 AD

timestamp with time zone

date and time, with time zone

4713 BC 294276 AD

date date (no time) 4713 BC 5874897 AD

time time (no date) 00:00:00 24:00:00

Time with time zone times, with time zone 00:00:00 24:00:00

Page 27: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS27

ALTRI TIPI DI DATO

Tipi di dato per la gestione dei caratteri disponibili in PostgreSQL

Nome Descrizione

character varying(n), varchar(n) variable-length with limit

character(n), char(n) fixed-length, blank padded

text variable unlimited length

Tipo Nome Descrizione

Boolean booleanCan have one of only two states: "true" or "false". A third state, "unknown", is represented by the SQL null value.

Binary blob Binary Large Object can store binary data of any kind

Da ricordare anche…

Page 28: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS28

Per creare una tabella:CREATE TABLE un_vol (

classid varchar(70) PRIMARY KEY,datafine date ,dataini date NOT NULL,un_vol_ex varchar(80) NOT NULL,un_vol_qe double precision NOT NULL

);

Quando si vorrà eliminarla sarà sufficiente eseguire:DROP TABLE un_vol

ESEMPIO DI CREAZIONE E CANCELLAZIONE TABELLA

Page 29: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS29

La query di selezione più basilare senza clausole di filtro sui valori è la seguente:

SELECT colonna [, ...] FROM tabella

Nel caso in sui si voglia selezionare tutte le colonne si può usare: SELECT * FROM tabella

Esempi:� SELECT classid, datafine, dataini, un_vol_qe FROM un_vol

� SELECT * FROM un_vol

QUERY DI SELEZIONE BASE

Page 30: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS30

La query di inserimento permette di inserire una tupla (riga) in una tabella definita nel database:

INSERT INTO tabella ( colonna [, ...] ) VALUES ( colonna [, ...] )

Una query alternativa:INSERT INTO tabella ( colonna [, ...] )

SELECT colonna [, ...] FROM altra_tabella

Esempio: INSERT INTO un_vol (classid, dataini, un_vol_ex, un_vol_qe) VALUES ('1‘, DATE '2014-05-08','altezza', 6.0)

QUERY DI INSERIMENTO

Page 31: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS31

La query di aggiornamento permette di aggiornare una o più tuple (rige) in una tabella del database:

UPDATE tabella SET colonna = valore [, ...]Esempio: UPDATE un_vol SET un_vol_qe = 6.5

La query di cancelazione permette di cancellare una o piùtuple (rige) in una tabella del database:

DELETE FROM tabellaEsempio: DELETE FROM un_vol

ATTENZIONE: La richiesta di aggiornamento e cancellazione è applicata a tutte le tuple presenti nella tabella della base dati

QUERY DI AGGIORNAMENTO E CANCELLAZIONE

Page 32: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS32

La clausola where ci permette di “filtrare” le tuple a cui applicare le query di selezione, modifica e canellazione

WHERE nomeColonna operatore valore

Operatori:� = uguale � <> diverso� > maggiore, >= maggiore uguale� < minore, <= minore uguale� IS NULL filtra il contenuto uguale a null� IS NOT NULL filtra il contenuto diverso a null

CLAUSOLA WHERE

Page 33: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS33

L’applicazione delle precedenti query è limitata alla sola tupla con identificativo (classid) uguale a 1

� SELECT classid, datafine, dataini, un_vol_qe FROM

un_vol WHERE classid = ‘1’

� SELECT * FROM un_vol WHERE classid = ‘1’

� UPDATE un_vol SET un_vol_qe = 6.5 WHERE classid =

‘1’

� DELETE FROM un_vol WHERE classid = ‘1’

È possibile applicare più di una clausola utilizzando gli operatori AND e/o OR

ESEMPI DI WHERE

Page 34: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS34

La clausola order by ordina presentazione risultato all’utente su una o più colonne in modo ascendente (ASC) o discendente (DESC)

ORDER BY nomeColonna1 DESC, nomeColonna2 ASC

Esempio:SELECT classid, datafine, dataini, un_vol_qe FROM

un_vol ORDER BY un_vol_qe DESC, classid ASC

CLAUSOLA ORDER BY

Page 35: Post gis base_postgresql_tools_sql_base

Trento, maggio 2014 – Basi di PostGIS35

Un Join serve a combinare (unire) le tuple di due o piùtabelle di un database tramite un’espressione booleana.

Sintassi:Tablella1 [tipoDiJoin] Tabella2 ON espressione

L’espressione più classica è colonnaTab1 = colonnaTab2

Tipologie di Join:� INNER JOIN (solitamente il default)� LEFT JOIN � RIGHT JOIN� FULL JOIN

INTERROGAZIONE MULTI TABELLA (JOIN)