GML-tiedostojen luku
3D-Win / Tiedosto / Formaatit / Vektoritiedosto / GIS
Avainsanat: GML, KuntaGML
Artikkelin toiminnot 3D-Win 6.4.1 alkaen
Julkaistu 18.04.2018, Mikko Syrjä
GML on GIS-tiedostojen siirtämiseen tarkoitettu XML-pohjainen formaatti, jota käytetään yleisesti verkon karttapalveluissa. Se määrittelee geometristen rakenteiden (piste, viiva, alue) ja ominaisuustiedon esitystavat, mutta ei vielä varsinaisia kohdetyyppeja ja ominaisuuksia. Näitä varten palvelun on määriteltävä erillinen schema-tiedosto, jossa on kuvattu mahdolliset kohdetyypit sekä kullekin sallitut ominaisuustiedot arvojoukkoineen. Tällaisia määrittelyjä ovat esimerkiksi Kunta GML http://www.paikkatietopalvelu.fi/ ja Maanmittauslaitoksen kiinteistötietojen kyselypalvelu https://www.maanmittauslaitos.fi/kiinteistot/asiantuntevalle-kayttajalle/kiinteistotietojen-rajapintapalvelut/kiinteistotietojen-0.
3D-Win GML-muunnin osaa lukea useimpia GML-tiedostoja ja tulkata niiden schema-tiedostoista ominaisuustietojen määrittelyt. Ilman schema-määrittelyä olevista tiedostosta voidaan lukea kohteiden geometriat, mutta koodaus ja ominaisuudet jäävät tällöin puuttumaan. Maanmittauslaitoksen maastotietokannan GML-tiedostot poikkeavat hieman normaalista ja niitä varten on erillinen MtkGml-muunnin.
GML-tiedostojen kirjoittaminen ei tällä hetkellä ole mahdollista.
Asetukset
GML-muuntimen määrittelyn Muut-kohdan asetuksissa ylemmässä laatikossa ovat yleiset GIS-asetukset ja alemmasssa laatikossa GML-asetukset. Ominaisuuksien määrittelyt eivät ole käytössä, koska ne koskevat vain tiedostojen kirjoitusta. Merkkaa alueet ja Laske alueen piste -asetuksilla voidaan luettaessa normaalisti merkata sulkeutuvat viivat alueiksi tai laskea alueille referenssipiste.
Kieli-asetuksella voidaan valita joistakin monikielisistä GML-tieodostoista luettavaksi paikannimet halutulla kielellä.
Koodit ja Ominaisuudet -asetuksiin voidaan laittaa etukäteen luetusta schema-tiedostosta tulkatut koodien ja ominaisuuksien määrittelyt. Useimmissa tapauksissa tämä ei ole tarpeellista, koska schema voidaan lukea ja tulkata aina tarvittaessa. Jos schema kuitenkin on monimutkainen tai palvelu on hidas, voi käyttöä nopeuttaa näiden tiedostojen avulla. Tästä lisää alla.
Lue schema -asetuksella schema-tiedosto luetaan ja tulkataan aina GML-tiedoston luvun yhteydessä. Käyttäjä ja Salasana -asetukset voidaan tarvita joidenkin suojattujen palveluiden kanssa.
Scheman tulkkaus
Schemaa etsitään ensin luettavan tiedoston kanssa samasta hakemistosta. Schema-tiedostolla on oltava sama nimi kuin luettavalla tiedostolla ja sen tiedostopääte on oltava .xsd. Jos tätä ei löydy, schema luetaan GML-tiedoston otsikkotiedoissa annetusta URL-osoitteesta. Kummassakin tapauksessa schema yleensä sisältää viittauksia muihin schema-tiedostoihin, jotka sitten myös ladataan ja tulkataan. Tämä voi joskus olla hidasta.
Tulkatut kohdetyypit ja ominaisuudet kirjoitetaan aina käyttäjän asetushakemistossa oleviin tiedostoihin auto_code_tag.txt ja auto_attr_tag.txt. Ensimmäinen sisältä listan kohdetyypeistä ja toinen ominaisuuksista.
Esimerkiksi Vantaan WFS-palvelun kohdetyyppilistan auto_code_tag.txt alku:
! wfs_175409_kaupunginraja.gml.vantaa
http://gis.vantaa.fi/geoserver/gis^ajokaistat
http://gis.vantaa.fi/geoserver/gis^kantakartta_tarkka
http://gis.vantaa.fi/geoserver/gis^kantakartta_yleiskuva
http://gis.vantaa.fi/geoserver/gis^keskilinjat
http://gis.vantaa.fi/geoserver/gis^kiinteistot
http://gis.vantaa.fi/geoserver/gis^kiinteistot_kiha
http://gis.vantaa.fi/geoserver/gis^kiinteistot_rajamerkit
http://gis.vantaa.fi/geoserver/gis^kiinteistot_rakenteilla
http://gis.vantaa.fi/geoserver/gis^kiinteistot_rasitteet
http://gis.vantaa.fi/geoserver/gis^kiintopiste
Vastaavan ominaisuuslistan auto_attr_tag.txt alku:
! wfs_175409_kaupunginraja.gml.vantaa
http://gis.vantaa.fi/geoserver/gis^ALKUPERAINEN_GLOBALID
http://gis.vantaa.fi/geoserver/gis^ASEMAKAAVAGUID
http://gis.vantaa.fi/geoserver/gis^GlobalID
http://gis.vantaa.fi/geoserver/gis^KAAVAMAARAYSGUID
http://gis.vantaa.fi/geoserver/gis^KAAVAMERKINTA
http://gis.vantaa.fi/geoserver/gis^KAAVATUNNUS
http://gis.vantaa.fi/geoserver/gis^KAYTTOTARKOITUS
http://gis.vantaa.fi/geoserver/gis^KERROSLUKU
http://gis.vantaa.fi/geoserver/gis^KOHTEENVAIHE
http://gis.vantaa.fi/geoserver/gis^KORTTELINUMER
Kummassakin tapauksessa itse GML-tiedostossa käytetään lyhyempiä nimiavaruuksia (esim. http://gis.vantaa.fi/geoserver/gis^kiinteistot = gis:kiinteistot). Nämä aliakset kuitenkin määritellään GML-tiedoston alussa ja voivat vaihdella tiedostosta toiseen. Siksi koodi- ja ominaisuuslistoissa käytetään globaalisti yksilöiviä tunnuksia. Vaikka tähän yksilöintiin käytetäänkin URL-osoitteita, vastaavaa nettisivua ei silti välttämättä ole olemassa.
Nämä tiedostot voidaan kopioida toisille nimille (esim. vantaa_code_tag.txt ja vantaa_attr_tag.txt) ja laittaa ne GML-muuntimen Muut-asetusten kohtiin Koodit ja Ominaisuudet. Kun vielä poistetaan Lue schema -asetus, niin luku toimii nopeammin ilman hidasta scheman tulkkausta. Yleensä tätä varten kannattaa tehdä erillinen muunninmäärittely (esim. GML Vantaa).
Kohdetyyppi siirtyy suoraan kohteen koodiksi ja ominaisuudet kohteen ominaisuuksiksi. Esimerkiksi edellisellä määrittelyllä luetulla tontilla on seuraavat tiedot:
Sekä kohdetyyppien että ominaisuuksien nimistä poistetaan nimiavaruudet automaattisesti.
Luku ilman schemaa
Joskus tulee vastaan GML-tiedostoja, joista joko puuttuu schema-tieto tai jostain syystä sitä ei pystytä tulkkaamaan. Muunnin osaa yleensä lukea geometrian (pisteet, viivat, alueet), mutta ominaisuustieto jää puuttumaan.
Joissain yksinkertaisissa tapauksissa ominaisuuksiin tarvittavat ohjaintiedostot voidaan luoda käsin. Seuraavassa esimerkki, miten sen voi tehdä.
Avataan viereinen GML-tiedosto tekstieditoriin tutkittavaksi.
Tiedostosta nähdään, että siinä on alussa kiinteistö (re:RealEstates) ja sen alla yksi palsta (re:Parcel). Palstan sisällä on sitten toistuvia st:Stand -kohteita eli metsäkuvioita. Niillä on geometria (gdt:PolygonGeometry) ja seuraavia ominaisuustiedolta näyttäviä rivejä:
<co:ChangeState>0</co:ChangeState>
<co:ChangeTime>2021-04-23T11:32:35</co:ChangeTime>
<st:CompleteState>0</st:CompleteState>
<st:StandNumber>2</st:StandNumber>
<st:StandNumberExtension />
<st:MainGroup>7</st:MainGroup>
<st:StandBasicDataDate>2021-04-23</st:StandBasicDataDate>
<st:Area>0.168</st:Area>
Kukin xml-tag kuuluu johonkin nimiavaruuteen (re:, st:, co:, jne.). Nämä ovat vain lyhenteitä, jotka ovat voimassa vain tässä tiedostossa. Oikeat pitkät nimiavaruudet on listattu tiedoston alussa. Esimerkiksi alusta löytyy määrittely xmlns:re="http://standardit.tapio.fi/schemas/forestData/realEstate". Se kertoo että esimerkikiksi re:Parcel on oikeasti http://standardit.tapio.fi/schemas/forestData/realEstate:parcel. Lyhenne vain korvataan oikealla arvolla. Koska oikea nimiavaruus sisältää kaksoispisteen, käytetään ohjaintiedostossa nimiavaruuden ja tagin välissä erottimena hattu-merkkiä ^.
Nyt voidaan tiedoston alusta hakea oikeat vastineet nimiavaruuslyhenteille co sekä st ja muodostaa ohjaintiedostot. Kohdetyypiksi tulee st:Stand ja toiseen tiedostoon listataan ominaisuudet:
forest_code_tag.txt
! forestpropertydata.xml
http://standardit.tapio.fi/schemas/forestData/Stand^Stand
forest_attr_tag.txt
! forestpropertydata.xml
http://standardit.tapio.fi/schemas/forestData/common^ChangeState
http://standardit.tapio.fi/schemas/forestData/common^ChangeTime
http://standardit.tapio.fi/schemas/forestData/Stand^CompleteState
http://standardit.tapio.fi/schemas/forestData/Stand^StandNumber
http://standardit.tapio.fi/schemas/forestData/Stand^StandNumberExtension
http://standardit.tapio.fi/schemas/forestData/Stand^MainGroup
http://standardit.tapio.fi/schemas/forestData/Stand^StandBasicDataDate
http://standardit.tapio.fi/schemas/forestData/Stand^Area
Nämä tiedostot sitten laitetaan GML-muuntimen asetuksiin Muut-painikkeen takana kuten yllä on dokumentoitu. Kun alkuperäinen tiedosto sitten luetaan tällä muuntimella, metsäkuviot tulevat alueina, joilla on tiedostosta luetut ominaisuudet:
<?xml version="1.0" encoding="iso-8859-1"?>
<ForestPropertyData xmlns="http://standardit.tapio.fi/schemas/forestData"
xmlns:re="http://standardit.tapio.fi/schemas/forestData/realEstate"
xmlns:st="http://standardit.tapio.fi/schemas/forestData/Stand"
xmlns:ts="http://standardit.tapio.fi/schemas/forestData/treeStand"
xmlns:tst="http://standardit.tapio.fi/schemas/forestData/treeStratum"
xmlns:dts="http://standardit.tapio.fi/schemas/forestData/deadTreeStrata"
xmlns:tss="http://standardit.tapio.fi/schemas/forestData/treeStandSummary"
xmlns:op="http://standardit.tapio.fi/schemas/forestData/operation"
xmlns:sf="http://standardit.tapio.fi/schemas/forestData/specialFeature"
xmlns:gdt="http://standardit.tapio.fi/schemas/forestData/common/geometricDataTypes"
xmlns:co="http://standardit.tapio.fi/schemas/forestData/common"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="http://standardit.tapio.fi/schemas/forestData ForestData.xsd">
<re:RealEstates>
<re:RealEstate id="123456">
<re:MunicipalityNumber>123</re:MunicipalityNumber>
<re:AreaNumber>456</re:AreaNumber>
<re:GroupNumber>23</re:GroupNumber>
<re:UnitNumber>23</re:UnitNumber>
<re:RealEstateName>test</re:RealEstateName>
<re:Parcels>
<re:Parcel id="123456">
<re:ParcelNumber>0</re:ParcelNumber>
<st:Stands>
<st:Stand id="7654321">
<st:StandBasicData>
<co:ChangeState>0</co:ChangeState>
<co:ChangeTime>2021-04-23T11:32:35</co:ChangeTime>
<st:CompleteState>0</st:CompleteState>
<st:StandNumber>2</st:StandNumber>
<st:StandNumberExtension />
<st:MainGroup>7</st:MainGroup>
<st:StandBasicDataDate>2021-04-23</st:StandBasicDataDate>
<st:Area>0.168</st:Area>
<gdt:PolygonGeometry>
<gml:pointProperty>
<gml:Point srsName="EUREF-FIN">
<gml:coordinates>450303.2334,6915925.3443</gml:coordinates>
</gml:Point>
</gml:pointProperty>
<gml:polygonProperty>
<gml:Polygon srsName="EUREF-FIN">
<gml:exterior>
<gml:LinearRing>
<gml:coordinates>
450311.3932,6915962.4267
450311.316,6915903.2803
...
450261.4043,6915970.9325
450311.3932,6915962.4267
</gml:coordinates>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:polygonProperty>
</gdt:PolygonGeometry>
</st:StandBasicData>
</st:Stand>
<st:Stand id="7654322">
<st:StandBasicData>
...
Toiminnon ohjesivu: GML vektoriformaatti
Keskustelu aiheesta: 3D-Forum/GML-formaatti
Lue lisää: GIS-ominaisuudet