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?