Kunta-alan tuottamien paikkatietoaineistojen kanssa tekemisissä ollut paikkatietoammattilainen lienee joskus kuullut termin KuntaGML. KuntaGML on Suomen kuntaliiton organisoimissa kehitysprojekteissa kehitetty formaatti kuntien tuottamien paikkatietoaineistojen yhdenmukaistamiseksi ja siirtämiseksi tietojärjestelmästä toiseen. KuntaGML perustuu OGC:n GML-formaattiin.
KuntaGML:n tietorakenne poikkeaa tavallisen GML:n tietorakenteesta. Suurin eroavaisuus tavalliseen GML:ään on se, että KuntaGML sisältää ns. kompleksisia tietotyyppejä mistä johtuen KuntaGML-aineistot ovat haasteellisia monillr normaaleja GML-aineistoja lukeville paikkatietosovelluksille.
Tässä artikkelissa ihmetellään, miten KuntaGML WFS-rajapinnan aineistoja voidaan lukea avoimen lähdekoodin paikkatietosovellus GRASS GIS:llä. GRASS GIS:n tuki KuntaGML-rajapinnalle ei ole täydellinen, mutta sitä voi hyödyntää KuntaGML-rajapintojen tutkimiseen.
GRASS GIS on avointen paikkatietosovellusten raskassarjalainen
GRASS GIS on erittäin monipuolisen toimintovalikoiman sisältävä avoimen lähdekoodin paikkatietosovellus. GRASS GIS:n käyttölogiikka poikkeaa hieman muista yleisesti käytetyistä paikkatietosovelluksista, mistä johtuen jotkut pitävät GRASS GIS:iä hieman vaikeasti lähestyttävänä paikkatietosovelluksena.
Tähän fiilikseen oli helppo yhtyä, etenkin käytön alkuvaiheessa. Aikansa sovellusta käytettyään GRASS GIS:n logiikkaan alkaa kuitenkin tottua. Niille jotka eivät totu, tarjoaa tässä artikkelissa esitetty skripti toivottavasti vähän helpotusta elämään 🙂
Omasta mielestäni GRASS GIS:n mahtavin ominaisuus on se, että sen toimintaa voi ohjata komentoriviltä. Tämä mahdollistaa mm. sen, että aineistoja voidaan sarjakäsitellä ja työnkulkuja automatisoida.
GRASS GIS:n ajaminen komentoriviltä ei varsinaisesti ole mitään avaruustiedettä, mutta sen saaminen toimimaan ns. stand alone -periaatteella (ilman, että ennakkoon ei ole määritelty LOCATION- ja MAPSET-arvoja) vaatii melkoisen komentokavalkaadin suorittamisen ennen varsinaisten GRASS-komentojen suorittamista.
GRASS GIS:n on saatavilla useille eri käyttöjärjestelmille. Tässä esimerkissä GRASS GIS -paikkatietosovellusta käytetään Windows 10 -käyttöjärjestelmässä Windows-järjestelmän komentoriviä (CMD.exe) hyödyntäen. Muiden käyttöjärjestelmien komentoriviä hyödynnettäessä komennot tulee kirjoittaa ko. komentorivin syntaksia noudattaen.
GRASS käyntiin ilman sessiota
Erotuksena käytännölliseen GDAL-kirjastoon, ei GRASS GIS -työkalujen ajaminen onnistu pelkästään työkalua komentoriviltä kutsumalla. Toimiakseen GRASS GIS -paikkatietojärjestelmän työkalut vaativat mm. tietyllä tavalla määritellyn datahakemiston vaadittuine kansioineen ja tiedostoineen. Tämän lisäksi myös eräitä GRASS:n tarvitsemia ympäristömuuttujia tulee olla määritelty.
Käytetyn GRASS GIS -paikkatietosovelluksen versio vaikuttaa myös skriptin toimintaan, sillä skriptissä kutsutaan nimen omaisesti GRASS GIS -sovelluksen versiota 7.4 (uusin versio kirjoitushetkellä). Vaikutusta on myös QGIS:n versiolla, sillä tässä tapauksessa GRASS GIS on asennettu QGIS-paikkatieto-ohjelman asennuksen yhteydessä (GRASS majailee QGIS:n asennuspolussa).
Viittaaminen johonkin tiettyyn levyasemalla olevaan hakemistorakenteeseen toimisi hyvin, mikäli skriptiä ajettaisiin koneilla joissa on vakioitu kansiorakenne. Tällaista tilannetta ei kuitenkaan ole, joten ajon alkajaisiksi skripti kysyy käyttäjältä kansiota, jonka sisälle skripti luo GRASS GIS:n vaatiman kansiorakenteen tarvittavine tiedostoineen. Kohdehakemistoksi sopii vaikkapa käyttöjärjestelmän TEMP-kansio.
Skripti muodostaa lennossa GRASS GIS -paikkatietosovelluksen tarvitsemat WIND, VAR- ja GISRC-tiedostot. WIND-tiedosto liittyy GRASS GIS -sovelluksen sijainnin (LOCATION) hallintaan ja käynnistettäessä GRASS GIS -sessiota sitä ei vielä tässä tapauksessa tiedetä. Tästä johtuen käynnistysvaiheessa luodaan tyhmä WIND-tiedosto, joka ei sisällä mitään tiettyä sijaintia. Sijainti asetetaan myöhemmin käyttäjän antaman EPSG-tunnisteen perusteella.
VAR-tiedostossa määritellään tietokanta-ajuri, jota GRASS GIS käyttää tiedon tallentamiseen ohjelman sisällä. Uudemmat versiot GRASS GIS -paikkatietosovelluksesta hyödyntävät SQLite-tietokantaa ja vanhemmat yleensä dBASE-tietokantaa. Tässä esimerkissä käytetään SQLite-pohjaista tietokantaa.
GISRC-tiedostossa määritellään käytettävä datahankemisto sekä käynnistyksen yhteydessä ladattava sijainti ja karttajoukko. Tiedostossa määritellään lisäksi se, että GRASS GIS-halutaan käynnistyvän ilman graafista käyttöliittymää.
Lisäksi skriptissä tulee määritellä ympäristömuuttujat, jotka kertovan GRASS GIS:lle mm. mistä kansiosta GRASS GIS löytää tarvittavat ohjelmapätkät ja suorituksenaikaiset skriptit. Nyt kun kaikki tarvittavat ennakkovalmistelut on tehty, voidaan skriptissä kutsua varsinaista GRASS GIS -sovellusta (grass74.bat). Alla skriptin sisältö kokonaisuudessaan. Linkki valmiiseen komentojono-tiedostoon löytyy artikkelin lopusta.
:: KuntaGML-rajapinnan aineistoja OGC GeoPackageen muuntava GRASS-skripti - paikkatietomies.fi @ECHO OFF :: QGIS-ohjelman hakemisto SET QGIS_KANSIO = "C:\Program Files\QGIS 3.2" :: GRASS GIS:n käynnistävän BAT-tiedoston sijainti SET GRASS_BAT_SIJAINTI = %QGIS_KANSIO%\bin\ :: Kirjoitetaan ruudulle skriptin käynnistyksen alkusanat ECHO KuntaGML-rajapinnan aineistoja OGC GeoPackageen muuntava GRASS-skripti - paikkatietomies.fi ECHO GRASS GIS -paikkatietosovelluksen alustusskriptin (grass74.bat) tulee olla kansiossa %GRASS_BAT_SIJAINTI% ECHO --- ECHO Aloita antamalla prosessoinnissa tarvittavia tietoja (paina jotakin) PAUSE > NUL :: Pyydä käyttäjältä WFS-rajapinnan tietoja SET /P WFS_GETCAPABILITIES_URL= Anna WFS-rajapinnan GetCapablities URL (lopeta kysymysmerkkiin): SET /P WFS_TASON_NIMI= Anna muunnettavan WFS-tason nimi palvelimella: SET /P WFS_TASON_EPSG_TUNNISTE= Anna WFS-tason EPSG-tunniste (esim. EPSG:3067 tulee antaa muodossa 3067): SET /P ULOSKIRJOITTETAVAN_TIEDOSTON_NIMI= Anna tallennettavan GeoPackage-tiedoston nimi: SET /P PROSESSOINTIKANSIO= Anna prosessointikansion polku (esim. C:\TEMP): :: Tiedot annettu, ilmoitetaan käyttäjälle etenemisestä ECHO Tarvittavat tiedot annettu. Aloita aineiston haku WFS-rajapinnasta (paina jotakin) PAUSE > NUL :: GRASS GIS -ohjelman hakemisto SET GISBASE = %QGIS_KANSIO%\apps\grass\grass-7.4.1 :: Prosessointikansion luonti SET PROSESSOINTIKANSIO_POLKU = %PROSESSOINTIKANSIO%\GRASS :: Määritellään luotu hakemisto GRASS GIS:n datahakemistoksi SET GISDBASE = %PROSESSOINTIKANSIO_POLKU% :: Määritellään GRASS-sijainti SET LOCATION_NAME = GRASS_SIJAINTI :: Määritellään GRASS-karttajoukko SET MAPSET = KUNTAGML :: Käynnistetään GRASS tekstitilassa SET GUI = text :: Luodaan prosessointihakemisto MKDIR %PROSESSOINTIKANSIO_POLKU% :: Luodaan GRASS GIS:n sijaintia ja karttajoukkoa varten kansiot MKDIR %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME% MKDIR %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\PERMANENT MKDIR %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET% MKDIR %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\sqlite :: Muodostetaan karttajoukon WIND-tiedosto ECHO proj: 0 > %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO zone: 0 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO north: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO south: 0 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO east: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO west: 0 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO cols: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO rows: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO e-w resol: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO n-s resol: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO top: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO bottom: 0 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO cols3: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO rows3: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO depths: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO e-w resol3: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO n-s resol3: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND ECHO t-b resol: 1 >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND :: Muodostetaan PERMANENT-karttajoukon DEFAULT_WIND-tiedosto COPY %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\PERMANENT\DEFAULT_WIND" :: Kopioidaan luotu WIND-tiedosto PERMANENT-karttajoukkoon COPY %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\WIND %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\PERMANENT\WIND" :: Muodostetaan VAR-tiedosto ECHO DB_DRIVER: sqlite > %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\VAR ECHO DB_DATABASE: %GISDBASE%\%LOCATION_NAME%\%MAPSET%\sqlite\sqlite.db >> %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\VAR :: Kopioidaan VAR-tiedosto PERMANENT-karttajoukkoon COPY %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\%MAPSET%\VAR %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\PERMANENT\VAR" :: Määritellään GISRC-tiedoston sijainti SET GISRC = %GISBASE%\gisrc :: Muodostetaan GISRC-tiedosto ECHO GISDBASE: %GISDBASE% > %GISRC% ECHO LOCATION_NAME: %GISDBASE%\%LOCATION_NAME% >> %GISRC% ECHO MAPSET: %GISDBASE%\%LOCATION_NAME%\%MAPSET% >> %GISRC% ECHO GUI: %GUI% >> %GISRC% :: Asetaan tarvittavat polut SET PATH=%PATH%;%QGIS_KANSIO%\bin SET PATH=%PATH%;%GISBASE%\bin SET PATH=%PATH%;%GISBASE%\lib SET PATH=%PATH%;%GISBASE%\scripts :: Luodaan kansio johon tallennetaan GeoPackage-tiedosto MKDIR %PROSESSOINTIKANSIO_POLKU%\GPKG :: Ajetaan GRASS GIS:n WFS-rajapintaa lukeva komento CALL %QGIS_KANSIO%\bin\grass74.bat %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\PERMANENT --exec v.in.wfs url=%WFS_GETCAPABILITIES_URL% output=%ULOSKIRJOITTETAVAN_TIEDOSTON_NIMI% name=%WFS_TASON_NIMI% srs=EPSG:%WFS_TASON_EPSG_TUNNISTE% maximum_features=100000 :: Ajetaan GRASS GIS:n komento jolla asetetaan PERMANENT-karttajoukon sijainniksi käyttäjältä pyydetty EPSG-koodi CALL %QGIS_KANSIO%\bin\grass74.bat %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\PERMANENT --exec g.proj --quiet -c epsg=%WFS_TASON_EPSG_TUNNISTE% :: Ilmoitetaan käyttäjälle, että tiedot on haettu WFS-rajapinnalta ECHO Aineisto haettu WFS-rajapinnalta. Aloitetaan aineiston kirjoitus GeoPackage-muotoon (paina jotakin) PAUSE > NUL :: Kirjoitetaan WFS-tason sisältö GeoPackage muotoon käyttäjän antamaan kansioon CALL %QGIS_KANSIO%\bin\grass74.bat %PROSESSOINTIKANSIO_POLKU%\%LOCATION_NAME%\PERMANENT --exec v.out.ogr input=%ULOSKIRJOITTETAVAN_TIEDOSTON_NIMI%@PERMANENT output=%PROSESSOINTIKANSIO_POLKU%\GPKG\%ULOSKIRJOITTETAVAN_TIEDOSTON_NIMI%.gpkg format=GPKG :: Ilmoitetaan käyttäjälle, että valmista tuli ECHO Valmista tuli! GeoPackage-tiedosto on tallennuttu sijaintiin: %PROSESSOINTIKANSIO_POLKU%\GPKG PAUSE > NUL CMD /k
Skripti hakee, muuntaa ja tallentaa
Kuten ylläolevaa skriptiä tarkastelemalla voidaan havaita, tulee melkoiset seremoniat suorittaa ennen kuin skriptissä voidaan kutsua varsinaista GRASS GIS -paikkatietosovellusta. Skriptissä käytettävistä komentorivikomennoista ei tässä yhteydessä sen enempää (halukkaat voivat tiedustella lisätietoja sähköpostitse tai kommentoida artikkelia).
KuntaGML-rajapinnan lukemiseen käytetään GRASS GIS -järjestelmän v.in.wfs -työkalua, joka suoriutuu tästä tehtävästä näennäisesti hyvin. Parametreiksi ko. työkalulle annetaan käyttäjältä skriptin suorituksen alussa pyydetyt WFS-rajapinnan GetCapabilities-dokumentin URL-osoite, WFS-tason nimi palvelimella, EPSG-tunniste ja karttatason nimi GRASS GIS:n sisällä. Haettavien kohteiden määrä on tässä esimerkissä rajattu 100 000 kappaleeseen (maximum_features=100000), joka riittänee useimmissa tapauksissa.
Seuraavassa vaiheessa GRASS GIS -sovellukseen ladatulle aineistolla määritellään koordinaattijärjestelmä (GRASS GIS -istuntoa alustettaessahan luotiin ns. tyhmä sijainti, joka nyt päivitetään oikeaksi). Karttatasolle määritellään sijainti g.proj -työkalulla, jolle annetaan parametriksi käyttäjältä skriptin suorituksen alussa pyydetty EPSG-tunniste.
Viimeisessä vaiheessa GRASS GIS -paikkatietosovellukseen ladattu WFS-aineisto tallennetaan GeoPackage-muotoon. GeoPackage on OGC:n kehittämä formaatti paikkatietoaineistojen tallentamiseen. GeoPackagen hienous on siinä, että sen sisään voi tallentaa useita karttatasoja (GeoPackage perustuu SQLite-tietokantaan) ja jopa sijaintitiedon sisältäviä rasterikuvia. Tuki GeoPackage-formaatille on nykyään vakio-ominaisuutena useimmissa paikkatieto-ohjelmissa.
Tallennus GeoPackage-formaattiin tapahtuu GRASS GIS:n v.out.ogr -työkalulla. Parametreiksi ko. työkalulle annetaan uloskirjoitettavan karttatason nimi GRASS GIS -sovelluksessa, muodostettavan GeoPackage-tiedoston nimi täydellisen tiedostopolun kanssa. Koordinaattijärjestelmän v.out.ogr -työkalu lukee karttatasojoukosta.
Testaillaan skriptiä
Skriptiä voi käyttää niinkin yksinkertaisesti, että lataa oheisen ZIP-pakatun komentojono-tiedoston omalle tietokoneelleen, purkaa sen ja tuplaklikkaa sitä. Skriptin suoritus käynnistyy, jolloin se avaa Windows-käyttöjärjestelmän komentokehoitteen ja ilmoittaa suorituksen alkamisesta (kuva 1).

Suorituksen alussa käyttäjää pyydetään syöttämään KuntaGML-aineiston hakemisessa tarvittavia tietoja. Tällaisia tietoja ovat KuntaGML-rajapinnan osoite (kysymysmerkkiin päättyen), WFS-tason nimi palvelimella, WFS-tason EPSG-tunniste, tallennettavan GeoPackage-tiedoston nimi ja työkansio. Kun tarvittavat tiedot on annettu, voidaan skriptin suoritus käynnistää (kuva 2).
Tässä esimerkissä tietoja noudetaan Lahden kaupungin testikäytössä olevalta avoimelta KuntaGML-rajapinnalta. Lisätietoja Lahden kaupungin tarjoamista avoimista paikkatietoaineistoista ja rajapinnoista löydät Lahden kaupungin Paikkatietoaineistot-internetsivuilta.

Mikäli skriptissä kutsuttava GRASS GIS onnistuu noutamaan aineistoja KuntaGML-rajapinnalta, ei skriptin konsoliin tulostu mitään epämäärisiä virheilmoituksia – ainoastaan suorituksenaikaisia varoitus-tasoisia ilmoituksia. Skripti toimii ainoastaan autentikoimattomien KuntaGML-rajapintojen tapauksissa, joten jos haluat testata jotakin autentikointia vaativaa KuntaGML-rajapintaa tällä skriptillä, tarvitsee skriptiä muokata. Onnistuneen KuntaGML-aineiston noudon (ja sijainnin asettamisen) jälkeen käyttäjälle annetaan ilmoitus onnistuneesta hausta ja käyttäjää pyydetään etenemään GeoPackage-aineiston kirjoitukseen (kuva 3).

Mikäli kaikki menee putkeen myös aineiston uloskirjoituksessa, vältytään konsolissa virheilmoituksilta. Mikäli aineiston haku KuntaGML-rajapinnalta on jostakin syystä epäonnistunut, tulee virheilmoituksia luonnollisesti myös uloskirjoituksen yhteydessä. Suorituksen lopuksi skripti tulostaa konsoliin vielä tiedostopolun, josta luotu GeoPackage-tiedosto on löydettävissä, mikäli aineisto on siis onnistuneesti haettu KuntaGML-rajapinnalta ja muunnettu GeoPackage-muotoon (kuva 4).

Katsellaan lopputulosta
Otetaan selvää, että millaista aineistoa skripti tallensi GeoPackage-tiedostoon ja avataan se jollakin sitä tukevalla paikkatietosovelluksella. Tässä esimerkissä GeoPackage avataan QGIS-paikkatietosovelluksella. Aineiston avaamisvaiheessa huomataan, että GeoPackage-tiedosto sisältää piste- ja aluegeometrioita. Tässä tullaan artikkelin alkusanoissakin todettuun KuntaGML-formaatin haasteellisuuteen paikkatietosovelluksille.
Näyttää siltä, että osa aluemuotoista paikkatietokohteista (tässä tapauksessa kaavayksiköistä) ei tule perille saakka alueina, vaan geometrioita muuntautuu jossakin vaiheessa prosessia pistemäisiksi. Tämä arvio perustuu seuraavaan visuaalisesti tehtyyn havaintoon: alueella, jolta näyttäisi puuttuvan aluemainen geometria, on kuitenkin pistemäinen geometria. Tätä havaintoa tukee myös se, että pistemäisen geometrioiden omaisuustiedot näyttäisivät vastaavan ympäröivien kaavayksiköiden ominaisuustietoja loogisuutensa puolesta.
Vaihe, jossa alueet muuntuvat pisteiksi, on mitä ilmeisemmin jo KuntaGML-rajapinnalta tehtävä haku (GRASS:n konsoliin tulostuu jo siinä vaiheessa viestejä, että rajapinnalta tuotiin pistemäisiä paikkatietokohteita). Se mistä tämä johtuu, onkin sitten asia jota tulee selvitellä tarkemmin. Todennäköisesti kyse on GRASS GIS -paikkatietosovelluksen kyvystä käsitellä kompeksisia tietotyyppejä.
Valtaosa aluemuotoisista paikkatietokohteista tulee kuitenkin perille ongelmitta ominaisuustietoineen, jolloin niitä voi jatkohyödyntää haluamallaan tavalla. Alla olevassa esimerkissä (kuva 5) tarkastellaan Lahden kaavayksiköitä Lahdenseudun Opaskartan (haettu Lahden kaupungin WMS-rajapinnalta) päällä. Oheisessa kuvassa aluemuotoiset kaavayksiköt (oikein muodostuneet paikkatietokohteet) on esitetty sinisellä viivasymbolilla ja pistemäiset kaavayksiköt (paikkatietokohteet joiden geometria ei todennäköisesti ole oikein) punaisella pistesymbolilla.

Lopputulema
Skripti näyttäisi toimivan, mikäli KuntaGML-rajapinta on autentikoimaton ja palauttaa kelvollisen vastauksen WFS-standardin mukaiseen GetFeature-kyselyyn.
Halusin verrata GRASS GIS:n kykyä lukea KuntaGML-rajapintaa johonkin muuhun samaan toiminnallisuuteen kykenevään sovellukseen, joten kokeilin toteuttaa saman muunnoksen (KuntaGML WFS > OGC GeoPackage) myös eräällä kaupallisella KuntaGML-rajapintoja lukemaan kykenevällä ETL-sovelluksella. Pieneksi ihmetyksekseni havaitsin lopputuloksen olevan pääosin samanlainen, itse asiassa kaupallinen toteutus palauttaa paikkatietokohteita hieman vähemmän. GRASS GIS:n kyky suoriutua hommasta on siis vähintäänkin kohtuullinen.
Tässä vaiheessa on lisäksi hyvä todeta, ettei skripti ei ole mitenkään erityisen viimeistelty ja saattaa sisältää logiikkaa, jota ei välttämättä tarvita, ja joka ei ole kaikkien CMD-ohjelmoinnin parhaiden käytäntöjen mukaista. GRASS GIS:n saaminen toimimaan stand alone -periaatteella luetutti melkoisen määrän aiheeseen liittyviä englanninkielisiä ohjeita/keskustelupalstalankoja, ja vaati muutaman harjoituskerran ennen kuin tieto alkoi siirtymään. Lisäksi internetin GRASS-ohjeet ovat pääasiassa Linux-ympäristöön suunnattuja, mistä johtuen niitä joutui hieman soveltelemaan Windowsin-komentorivin puolella.
Homma kuitenkin kannatti, sillä nyt ollaan hitusen viisaampia mm. siinä, miten GRASS GIS:iä voidaan käyttää komentoriviltä itsenäisesti. Tätä osaamista tulen takuulla hyödyntämään jatkossa, sillä GRASS GIS -paikkatietojärjestelmässä on useita mielenkiintoisia ja testaamisen arvoisia työkaluja, joita on on kätevää ajaa osana GDAL-kirjaston työkaluihin muuten turvaavassa skriptissä.
Kovasti olisi toiveissa, että GRASS GIS -ohjelmiston kyky lukea KuntaGML-rajapintoja, ilman että aineistojen geometrioita hajoilee matkalla, paranisi jatkossa. KuntaGML-tukea toivoisi toki myös huomattavasti helpommin käytettävissä olevaan GDAL-kirjastoon. Mikäli KuntaGML-rajapintoja haluaa tutkia jollakin muulla avoimen lähdekoodin paikkatietosovelluksella, kannattaa jatkotutkimukset suunnata Gaia 3 -nimiseen paikkatietosovellukseen, joka osaa myös avata KuntaGML-rajapintoja.
Ja tässä vielä linkki, jonka kautta voit ladata skriptin ZIP-pakattuna. Skriptiä voi kokeilla, hyödyntää ja jatkokehittää vapaasti omiin tarkoituksiin sopivaksi. Ja näin loppuun on vielä paikallaan lausua kiitokset Lahden kaupungille avoimesta KuntaGML-rajapintatoteutuksesta, jota saatoin käyttää tässä esimerkissä demoaineistona.
Täydennys 21.7.2021: Artikkelissa käytetty Lahden kaupungin ylläpitämä KuntaGML-rajapinta ei näyttäisi olevan enää toiminnassa.