5 Harjoitus 4: Spatiaaliset SQL-haut
Harjoituksen sisältö - Harjoituksessa tutustutaan paikkatietojen tallentamisen perusperiaatteisiin ja suoritetaan muutamia spatiaalisia SQL-hakuja.
Harjoituksen tavoite - Harjoituksen jälkeen opiskelijalla on käsitys, kuinka PostGIS-tietokannan spatiaalisia hakuoperaattoreita voidaan käyttää osana paikkatietoanalyysejä.
5.0.1 Valmistautuminen
Avaa pgAdmin selaimeen ja kirjaudu sisään. Avaa Query Tool (Valitse trainingdatabase -> Ylhäältä Tools -> Query Tool).
5.0.2 Paikkatietojen metatiedot
Kaikki PostGIS-tietokannassa olevat paikkatietotaulut on rekisteröity metatieto-tauluihin:
| geography_columns | Geography-tietotyypin paikkatietotaulut |
| geometry_columns | Geometry-tietotyypin paikkatietotaulut |
| raster_columns | Rasteritietoa sisältävät paikkatietotaulut |
| raster_overviews | Yleistettyjä rasteriaineistoja sisältävät paikkatietotaulut |
5.1 Harjoitus 4.1: Geometrioiden metatiedot
Tutki geometry_columns-taulua. Mitä tietoja eri tietokentät sisältävät?
SELECT *
FROM
geometry_columns;Onko geometry_columns taulu?
5.2 Harjoitus 4.2: Geometrian esittäminen
Tarkastellaan ensin paikkatietojen tallennusmuotoa PostGIS-paikkatietokannassa. Suorita seuraava SQL-lause:
SELECT
kunta_ni1, maaku_ni1, wkb_geometry
FROM
nlsfi.hallintoalue
WHERE
kunta_ni1 = 'Hanko';Tuloksesta nähdään, että sarakkeen wkb_geometry sisältö on koneluettavassa binäärimuodossa.
Vinkki: On mahdollista tarkastella geometrioita suoraan graafisessa käyttöliittymässä klikkaamalla pientä silmäikonia
geometriasarakkeen päällä. Mikäli aineistot ovat WGS84-koordinaattijärjestelmässä (EPSG: 4326), pgAdmin myös lisää niihin suoraan taustakartan OpenStreetMapista.
Aineistojen koordinaatistot löytyvät SRID-sarakkeesta. Yhdessä SRID-sarakkeessa voi olla vain yhden koordinaatiston metatiedot. Koordinaatit voi muuntaa paremmin ihmisluettavaan tekstimuotoon seuraavalla hakulausekkeella:
SELECT
kunta_ni1, maaku_ni1, ST_AsText(wkb_geometry)
FROM
nlsfi.hallintoalue
WHERE
kunta_ni1 = 'Hanko';5.3 Harjoitus 4.3: Funktiot
Kokeile myös seuraavia funktioita Hangon kunnan geometriatietoihin liittyen:
- ST_Boundary
SELECT
...
FROM
...
WHERE
...;SELECT
kunta_ni1, maaku_ni1, ST_Boundary() -- valitse funktioon geometria- sarake
FROM
skeema.taulu
WHERE
...; -- valitse Hangon kunta nimen perusteella.SELECT
kunta_ni1, maaku_ni1, ST_Boundary(wkb_geometry)
FROM
nlsfi.hallintoalue
WHERE
kunta_ni1 = 'Hanko';- ST_Centroid
SELECT
...
FROM
...
WHERE
...;kunta_ni1, maaku_ni1, ST_Centroid() -- valitse funktioon geometria- sarake
FROM
skeema.taulu
WHERE
...; -- valitse Hangon kunta nimen perusteella.SELECT
kunta_ni1, maaku_ni1, ST_Centroid(wkb_geometry)
FROM
nlsfi.hallintoalue
WHERE
kunta_ni1 = 'Hanko';- ST_Envelope
SELECT
...
FROM
...
WHERE
...;kunta_ni1, maaku_ni1, ST_Envelope() -- valitse funktioon geometria- sarake
FROM
skeema.taulu
WHERE
...; -- valitse Hangon kunta nimen perusteella.SELECT
kunta_ni1, maaku_ni1, ST_Envelope(wkb_geometry)
FROM
nlsfi.hallintoalue
WHERE
kunta_ni1 = 'Hanko';Huomaa, miten vastauksena tuleva geometrian tyyppi vaihtelee eri funktioiden kohdalla.
5.4 Harjoitus 4.4: Spatiaaliset indeksit
Tarkastele nlsfi.hallintoalue-taulun indeksejä.
Mitä indeksejä taululle on muodostunut?
Kuinka taulu eroaa tieviiva-taulun indekseistä? Mistä ero johtuu?
Indeksejä voi tarkastella sekä pgAdminin tai QGIS DB Managerin avulla että luomalla tarkoitukseen sopivan SQL-kyselyn.
Luodaan spatiaalinen indeksi taululle tieviiva:
CREATE INDEX tieviiva_wkb_geometry
ON nlsfi.tieviiva
USING GIST(wkb_geometry);pgAdminissa löydät indeksit valitsemalla Schemas > Tables > Indexes.
Jos käytät psql-komentoriviohjelmaa, voit tarkastella indeksejä seuraavilla psql-komennoilla:
\dt+ nlsfi.tieviiva
\di+ nlsfi.tieviiva
Mikä on tieviivoja sisältävän taulun koko ja miten suuri on siihen tehty indeksi?