3D-Win / Tiedosto / Formaatit / Vektoritiedosto / GIS
Avainsanat: KML, GDAL, GPX, GIS, Google, Drone
Artikkelin toiminnot 3D-Win 6.7.0 alkaen
Julkaistu 04.05.2021, Mikko Syrjä
KML on Googlen käyttämä XML-pohjainen formaatti, jolla voidaan viedä aineistoja esimerkiksi Google Earth ja Google Maps -ohjelmiin. Lisäksi monet drone-ohjelmistot käyttävät sitä lentoalueiden määrittelyyn.
3D-Win osaa kirjoittaa KML-tiedostoja kolmella eri tavalla: GDAL/OGR-muuntimella, GPX-muuntimella tai Text-formaatin kautta. Seuraavassa lyhyt selvitys näiden eroista ja käyttötapauksista.
Kaikissa alla olevissa vaihtoehdoissa KML-formaattiin kirjoitetaan leveys- ja pituuspiirit asteina eli muuntimen XYZ-asetuksiin on laitettava muunnos alkuperäisistä koordinaateista asteiksi:
Alkuperäisen koordinaatiston automaattitunnistus vaihtoehdolla "Auto" toimii Suomessa yleisesti käytettyjen koordinaatistojen kanssa. Desimaalien määräksi kannattaa laittaa tarpeeksi iso arvo, jotta riittävä tarkkuus säilyy. Käännä XY -asetus tarvitaan GDAL/OGR ja Text -muuntimien kanssa. GPX-muunnin ei sitä tarvitse, vaan kirjoittaa X-koordinaatin oletuksena leveyspiiriksi.
GDAL/OGR
GDAL/OGR on GDAL-kirjastoa käyttävä yleinen GIS-muunnin. Se tukee useita eri formaatteja, joista KML löytyy nimellä LIBKML. Normaalin tekstimuotoisen KML-formaatin lisäksi se tukee myös KMZ-muotoa, joka on käytännössä ZIP-pakattu KML-tiedosto. Yleiskuvaus muuntimesta löytyy omalta sivultaan.
Muunnin tukee kirjoituksessa viivojen leveyksiä sekä viivojen ja alueiden värejä. Yksittäisten kohteiden piirtotiedoissa annettu läpinäkyvyys toimii myös, mutta viivatyyppejä tai aluerasterointityyppejä formaatti ei tue. Kuvaustekniikan kirjoitus vaatii, että muuntimen asetuksissa on annettu käytettävä kooditiedosto (tiedoston nimi tai * ohjelman kooditiedostolle).
Koska muunnin toimii yleisen GDAL-rajapinnan läpi, se käyttää yleistä GIS-rakennetta, jossa koko tiedosto muodostaa yhden tason ja kohteet oman tasonsa sen alla. Tiedoston rakenne näyttää tältä:
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document id="root_doc"> <name>Pernaja.kml</name> <Style id="POINT_100"> <LineStyle> <color>ff808080</color> <width>2</width> </LineStyle> </Style> ... <Document id="Pernaja"> <name>Pernaja</name> <Placemark id="Pernaja.1"> <styleUrl>#LINE_123</styleUrl> <LineString> <coordinates> 25.9840968280868,60.3810901597075,8.956 25.9842914055615,60.3811055756903,8.467 ... 25.9900053312939,60.3827382944824,14.423 25.9902614413823,60.3827719498192,14.276 </coordinates> </LineString> </Placemark> ...
Alussa on päätaso "root_doc", jossa on ensin kuvaustekniikka Style-blokkeina. Sitten tulevat varsinaiset kohteet omalla tasollaan. Google Earth -ohjelmassa tiedosto näyttää tältä:
Kirjoitettaville kohteille voidaan myös antaa nimi. Tämä tapahtuu GIS-ohjaintiedoston kautta:
[kml] NAME string 32
Yllä oleva ohjaintiedosto kml.dat kirjoittaa GDAL/OGR muuntimeen erityisen ominaisuuden NAME, jonka se tunnistaa kohteen nimeksi. Tämä nimi kirjoittuu sitten kunkin formaatin ymmärtämäksi nimeksi. Tässä tapauksessa voimme käyttää nimenä viivan numeroa kentässä T2. Ensin muuntimen kenttäasetuksissa siirretään T2 ominaisuudeksi NAME ja sitten edellä määritetty ohjaintiedosto lisätään muunninkohtaisiin asetuksiin:
Kun tiedosto kirjoitetaan, nimi siirtyy KML tiedoston <name> -kohtaan. Esimerkiksi tässä viiva numero 613:
<Placemark id="Pernaja.123"> <name>613</name> <styleUrl>#AREA_201</styleUrl> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates> 25.9851221356109,60.3814660649514,7.729 25.9852430096027,60.3813987885137,7.757 25.9853290255942,60.3814366672482,7.74 25.9852081516379,60.3815039437637,7.74 25.9851221356109,60.3814660649514,7.729 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark>
GDAL/OGR-muunnin on paras tapa, kun viedään aineistoa Googlen ohjelmiin. Värit siirtyvät oikein ja viivojen suhteelliset leveydet säilyvät. Sen rakenne ei kuitenkaan kelpaa kaikkiin muihin ohjelmiin, vaan on käytettävä muita tapoja.
GPX
Toinen tapa on käyttää GPX-muunninta GPSBabel-ohjelman kanssa. Se muodostaa kohteista GPS-tallentimien käyttämiä reitti (route) tai jälki (track) -tyyppisiä viivoja ja muuntaa ne sitten KML-tiedostoksi. Varsinaisen viivan lisäksi jokainen viivan piste kuvautuu omaksi reitti- tai jälkipisteekseen, jolle siirtyy myös alkuperäisen pisteen numero. Kuvaustekniikkaa ei tällä tavalla voida kirjoittaa, vaan viivat menevät vakiovärillä.
GPX-muuntimen muunninkohtaisin asetuksiin laitetaan GPSBabel ohjelman sijainti ja valitaan formaatiksi KML. Alareunan asetuksista valutaan haluttu viivamuoto ja muuntimen yleisiin asetuksiin käydään muuttamassa tiedostopäätteeksi *.kml.
Tiedosto näyttää Google Earth -ohjelmassa tältä:
GPX ja GPSBabel -yhdistelmä on käyttökelpoinen, kun pitää viedä sekä viivat että niiden pisteet numeroineen. Erityisesti tallennetut tai suunnitellut reitit siirtyvät hyvin tässä muodossa.
Text
Viimeisenä vaihtoehtona on Text-formaatin käyttö. Tätä tarvitaan joidenkin drone-ohjelmistojen kanssa, koska ne eivät hyväksy kumpaakaan edellisistä muodoista. Tyypillisesti dronet haluavat aluerajauksen yksinkertaisena polygonina KML-tiedoston päätasolla. Koska edellä mainitut kirjoitustavat käyttävät ulkopuolisia ohjelmia tai kirjastoja, ei niiden tuottamaan muotoon pääse kovin helposti vaikuttamaan.
Text-formaatti osaa kuitenkin kayttää mallinetiedostoa. Se on tekstitiedosto, jonne on makrolla #COORDLIST määritetty paikka koordinaatilistaukselle. Esimerkiksi voidaan tehdä seuraavanlainen malline kml-tiedostoa varten:
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document id="root_doc"> <name>#FILENAME</name> <Placemark> <name>#FILENAME</name> <Polygon> <tessellate>1</tessellate> <outerBoundaryIs> <LinearRing> <coordinates> #COORDLIST </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Document> </kml>
Sitten määritellään Text-muunnin tämän mallinetiedoston kanssa. Itse kirjoitettavaksi formaatiksi laitetaan [X@26,Y,Z|] ja kirjoitetaan viivat. Hakasuluissa oleva määrittely toistaa sitä kaikille viivan pisteille. Ensimmäisenä oleva X-koordinaatti hyödyntää kentän leveyttä sisennyksenä ja viimeinen pystyviiva kirjoittaa rivinvaihdon.
Tämä muunnin toimii vain kirjoitettaessa yksittäisiä sulkeutuvia alueita. Esimerkiksi edellisen esimerkkiaineiston avokallio:
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document id="root_doc"> <name>Pernaja.xy.tdw</name> <Placemark> <name>Pernaja.xy.tdw</name> <Polygon> <tessellate>1</tessellate> <outerBoundaryIs> <LinearRing> <coordinates> 25.98855783,60.38199404,16.73200000 25.98858871,60.38193327,14.90300000 ... 25.98858682,60.38204412,17.46300000 25.98855783,60.38199404,16.73200000 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Document> </kml>
Tulos näkyy Google Earth-ohjelmassa alueena:
Tämä tiedosto on riittävän yksinkertainen kelvatakseen drone-ohjelmiin lentoalueen rajaukseksi.
Eri tarkoituksiin voidaan tarvita hieman erliaisia mallineita. Seuraavassa joitain:
- kml_template_polygon.kml Yllä esitelty aluerajaus.
- kml_template_route.kml Pelkkä reittiviiva.