9 Harjoitus 8: Geoprosessointi
Harjoituksen sisältö - Harjoituksessa tutustutaan PostGISin geoprosessointifunktioihin.
Harjoituksen tavoite - Harjoituksen jälkeen opiskelija tuntee geoprosessointifunktioiden perusteet.
9.0.1 Valmistautuminen
Avaa pgAdmin selaimeen ja kirjaudu sisään. Avaa Query Tool (Valitse trainingdatabase -> Ylhäältä Tools -> Query Tool).
9.1 Harjoitus 8.1: Keskipisteet
Kirjoitetaan yhdessä SQL-terminaaliin seuraava komento:
SELECT
ST_Centroid(wkb_geometry) as "Centroids of first 10"
FROM
nlsfi.hallintoalue
LIMIT 10;Komento tuottaa kymmenen ensimmäisen alueen keskipisteet.
9.2 Harjoitus 8.2: Keskipisteiden määritys
Ovatko kaikki keskipisteet alueiden sisäpuolella? Kuinka monta pistettä jää ulkopuolelle?
SELECT ...Huomaa, että saat selville vastauksen myös tulostamalla kaikkien sellaisten kuntien nimet, joiden keskipiste jää alueen ulkopuolelle ja laskemalla tulostaulukon rivien lukumäärän.
-- vaihtoehto 1 ST_Contains- funktiolla
-- CTE:llä
WITH notin AS(
SELECT
...
FROM
...
WHERE
NOT ...
SELECT
count(...)
FROM
notin;-- vaihtoehto 2 - ST_Within- funktiolla
SELECT
...
FROM
...
WHERE
NOT ...;Ratkaisuvaihtoehto 1 (käytetään ST_Contains-funktiota):
WITH notin AS(
SELECT
kunta_ni1 as "withST_Contains"
FROM
nlsfi.hallintoalue
WHERE
NOT ST_Contains(wkb_geometry, ST_Centroid(wkb_geometry)))
SELECT
count(notin."withST_Contains")
FROM
notin;Ratkaisuvaihtoehto 2 (käytetään ST_Within-funktiota):
SELECT
kunta_ni1 as "with ST_Within"
FROM
nlsfi.hallintoalue
WHERE
NOT ST_Within(ST_Centroid(wkb_geometry), wkb_geometry);9.3 Harjoitus 8.3: Etäisyydet
Miten paljon harjoituksessa 8.2 löydettyjen kuntien painokeskipisteet eroavat ST_PointOnSurface–funktion pisteistä?
SELECT
...
FROM
...
WHERE
NOT ...;-- Millä PostGIS- funktiolla voit laskea etäisyyden pisteiden välillä?
SELECT
kunta_ni1 as "Kunta",
round(etäisyys(ST_PointOnSurface(wkb_geometry), ST_centroid(wkb_geometry)))
as "Distance PntOnSurface and Centroid"
FROM
nlsfi.hallintoalue
WHERE
NOT ...;
-- rajaa pois pisteet, jotka ei ole polygonin sisällä.SELECT
kunta_ni1 as "Kunta",
round(ST_Distance(ST_PointOnSurface(wkb_geometry), ST_centroid(wkb_geometry)))
as "Distance PntOnSurface and Centroid"
FROM
nlsfi.hallintoalue
WHERE
NOT ST_Within(ST_Centroid(wkb_geometry), wkb_geometry);9.4 Harjoitus 8.4: Vyöhykkeet
Muodostetaan tiestölle vyöhyke:
SELECT
ogc_fid, ST_Buffer(wkb_geometry, 100) as geom
FROM
nlsfi.tieviiva
WHERE
tienumero = 66;Muodosta vyöhykkeestä näkymä ja visualisoi se QGISissä. Voit myös muodostaa useamman vyöhykkeen eri etäisyyksille.
DROP VIEW IF EXISTS nlsfi.view_road_buffer;
CREATE VIEW nlsfi.view_roadbuffed AS (
WITH buffers AS (
...
UNION
...
)
SELECT
row_number() OVER() AS vid, geom, buffer
FROM
buffers
);DROP VIEW IF EXISTS nlsfi.view_roadbuffer;
CREATE VIEW nlsfi.view_roadbuffer AS (
WITH buffers AS (
SELECT
..., 100 as buffer -- täydennä ST_Buffer funktio
FROM
nlsfi.tieviiva
WHERE
... -- valitse tienumeron 66 mukaan
UNION
SELECT
..., 250 as buffer -- täydennä ST_Buffer funktio
FROM
nlsfi.tieviiva
WHERE -- valitse tienumeron 66 mukaan
...
)
SELECT
row_number() OVER() AS vid, geom, buffer
FROM
buffers
);DROP VIEW IF EXISTS nlsfi.view_roadbuffer;
CREATE VIEW nlsfi.view_roadbuffer AS (
WITH buffers AS (
SELECT
ST_Buffer(wkb_geometry, 100) as geom, 100 as buffer
FROM
nlsfi.tieviiva
WHERE
tienumero = 66
UNION
SELECT
ST_Buffer(wkb_geometry, 250) as geom, 250 as buffer
FROM
nlsfi.tieviiva
WHERE
tienumero = 66
)
SELECT
row_number() OVER() AS vid, geom, buffer
FROM
buffers
);Editoi alkuperäistä tieviivaa QGIS:ssä.
9.5 Harjoitus 8.5: Geometrioiden yhdistäminen
Muodosta (yhdistä) hallintoalueista maakuntien raja -aineisto:
DROP TABLE IF EXISTS tmp.maakunnat;
CREATE TABLE tmp.maakunnat as (
SELECT
ST_Union(wkb_geometry), maaku_ni1 as "Maakunnan nimi"
FROM
nlsfi.hallintoalue
GROUP BY
maaku_ni1
);Vastaavasti, aineiston voi muodostaa myös hyödyntämällä näkymiä:
DROP VIEW IF EXISTS tmp.view_maakunta;
CREATE VIEW tmp.view_maakunta AS (
SELECT
ST_Union(wkb_geometry), maaku_ni1
FROM
nlsfi.hallintoalue
GROUP BY
maaku_ni1
);9.5.1 PostGISin tehokkuus
Yksi suurimmista hyödyistä PostGISin käytössä on sen tehokkuus suuria tietoaineistoja käsiteltäessä.
9.5.1.1 Lisätehtävä
Suurin osa geoprosessoinnin työkaluista löytyy myös QGISistä, mutta PostGISin tehokkuus tulee esille erityisesti, jos kokeilet tehdä saman operaation QGISin työkaluilla ja PostGISillä. Huomaatko eron?