MML:n Muutostietopalvelun hyödyntäminen FME:llä

Onpa kulunutkin pitkä aika edellisestä postauksesta. Ehkä voisin tihentää blogin päivitystahtia :).

FME 2015 ja FeatureReader

Uutisia uutisia, FME 2015 on julkaistu, jos et ole sitä vielä ladannut, käy lataamassa täältä: http://www.safe.com/support/support-resources/fme-downloads/

FME 2015

Uusi versio sisältää suuren määrän parannuksia ja päivityksiä, ja FeatureReader on yksi niistä. FeatureReaderilla voi lukea aineistosta jostain lähteestä käyttäen jotain toista aineistoa syötteenä. Esim. tiettyä kuntarajaa voisi käyttää maastotietokannan lukemiseen. Tämä on ollut ennenkin mahdollista, mutta uudessa versiossa FeatureReaderin tulosportit voi niputtaa yhteen ja samaan, jolloin mm. muutostietopalvelun hyödyntäminen FME:llä on kätevää (siitä lisää myöhemmin):

FeatureReader

Vasemmalla FME 2014:n FeatureReader ja Maastotietokannan kohdeluokat tulosportteina. Oikealla FME 2015:n FeatureReader ja samat Maastotietokannan kohdeluokat portissa Generic.

Aineistojen lataaminen muutostietopalvelusta

Mennään seuraavaksi muutostietopalvelun hyödyntämiseen. Muutostietopalvelusta saa listattua aineistot, jotka ovat päivittyneet käyttäjän syöttämän päivämäärän jälkeen. Palvelusta saa myös aineistojen karttalehtien latauslinkit, ja FME pystyy lataamaan aineistot ilman, että dataa tarvitsee välitallentaa. Tavallisestihan käyttäjät joutuvat lataamaan karttalehtiä Maanmittauslaitoksen tiedostolatauspalvelusta valiten karttalehtiä, tehden tilauksen ja lopulta ladaten aineistot sähköpostiin tulleen linkin kautta.

Aineistojen lataaminen palvelusta toimii seuraavasti: Listataan tietyn päivämäärän jälkeen päivittyneet aineistot urlilla

https://tiedostopalvelu.maanmittauslaitos.fi/tp/feed/mtp/?

Urlin perään tulee apikey, joka pitää käydä tilaamassa muutostietopalvelusta: https://tiedostopalvelu.maanmittauslaitos.fi/tp/mtp/tilaus

Esim.

https://tiedostopalvelu.maanmittauslaitos.fi/tp/feed/mtp/?api_key=123

Kun aineistot on listattu, saat kullekin aineistolle uuden urlin, jonka perään voit syöttää päivämäärän, esim:

https://tiedostopalvelu.maanmittauslaitos.fi/tp/feed/mtp/maastotietokanta/kaikki?api_key=123&updated=2013-01-01T00:00:00

Tästä saat lopulta karttalehtikohtaisen urlin, jonka voit syöttää FeatureReaderille:

https://tiedostopalvelu.maanmittauslaitos.fi/tp/tilauslataus/tuotteet/maastotietokanta/kaikki/etrs89/gml/T5/T52/T5212L_mtk.zip?api_key=123

FME-prosessi

Varsinaisen FME-prosessin ensimmäinen osa koostuu seuraavista transformereista:

  1. Creator, jolla luodaan aineistolistauksen käynnistävä kohde.
  2. AttributeCreator, jolla luodaan aineistolistauksen url.
  3. HTTPCaller, jolla pyydetään muutostietopalvelusta aineistot.
  4. XMLFragmenter, jolla puretaan muutostietopalvelusta tuleva listaus XML:stä kohteiksi entry-elementin avulla.
  5. TestFilter, jolla jaetaan eri tyyppiset aineistot, esim. maastotietokanta ja ortokuvat.
  6. DateFormatter ja Tester, joilla testataan onko aineisto päivittynyt käyttäjän antaman päivämäärän jälkeen.
  7. DateFormatter, jolla muotoillaan käyttäjän antama päivämäärä muodosta 20130101 muotoon 2013-01-01T00:00:00.

Muutostietopalvelun_aineistojen_listaus

FME-prosessin toinen osa koostuu seuraavista transformereista:

  1. HTTPCaller, johon syötetään XMLFragmenterista saatu aineiston URL (attribuutti link{0}.href).
  2. AttributeKeeper, jolla poistetaan turhat attribuutit.
  3. XMLFragmenter, jolla puretaan XML jälleen entry-elementin avulla.
  4. FeatureReader, johon syötetään XMLFragmenterista saadut linkit (attribuutti link.href).
  5. Datan kirjoitus

Muutostietopalvelun_aineistojen_lataus

Lopulta datan voi kirjoittaa mihin tahansa FME:n tukemista formaateista. Itse käytän usein jotain kantaa, kuten PostGIS-kantaa, johon kirjoitan muuttuneet karttalehdet.

Hyödyt

Tavallisesti aineistojen lataaminen ja muuntaminen käyttäjän haluamaan formaattiin on hankalaa. Muutostietopalvelu auttaa, mutta sekin vaatii automaattisen prosessin rakentelun, mitä kautta selvitetään, mitkä aineistot ovat päivittyneet. Onneksi aineistojen lataamisen ja viennin esim. kantaan voi automatisoida täysin FME:llä. Kun listaa muuttuneet karttalehdet tietystä aineistosta FME:llä, koko aineistoa ei tarvitse ladata MML:n tiedostolatauspalvelusta, vaan vain muuttuneet karttalehdet riittää. Myös datan välivarastointi jää pois, koska FME voi lukea aineistot suoraan tiedostolatauspalvelusta ja lennosta muuntaa haluamaasi formaattiin.

Kertaus

Tärkeimmät transformerit, mitä tarvitset ovat Creator, AttributeCreator, HTTPCaller, XMLFragmenter ja FeatureReader. Ja toki Inspector, jos kaikki ei mene niinkuin pitää :).

Mainokset

FME ja PDF-kartan tekeminen

Tässä taannoin eräs asiakas kyseli, pystyykö FMEllä tekemään PDF-karttaa, jossa pitäisi näkyä itse karttanäkymä, mutta sen lisäksi myös otsikko, legenda, mittakaava ja pohjoisnuoli. Kyllähän sellaisen pystyy tekemään. Siihen saa lisäksi kohdeluokat eri tasoille ja kohteiden ominaisuustietoja pystyy myös tarkastelemaan. Tässä on perusidea työtilasta:

  1. Aineistojen sisäänluku.
  2. PDF-kuvaustyylit.
  3. Piirtojärjestys ja sijoittelu.
  4. Legendan luonti.
  5. Mittakaavan ja pohjoisnuolen luonti.

1. Aineistojen sisäänluku

Käytin aineistona Maanmittauslaitoksen Maastotietokanta-GML:ää (FME 2013 SP1 tukee MTK-GML:ää) Espoon Keilaniemen alueelta, joka on ladattu vuonna 2012 (http://www.maanmittauslaitos.fi/avoindata_lisenssi_versio1_20120501). Otin aineistosta mukaan seuraavat kohdeluokat:

  • Kallioalue
  • Korkeuskäyrä
  • Korkeusarvo
  • Meri
  • Paikanimi
  • Puisto
  • Rakennus
  • Tieviiva
MTK-GML-lähtöaineistot.

MTK-GML-lähtöaineistot.

2. PDF-kuvaustyylit

FMEssä PDF-kuvaustyylit voi luoda PDFStylerilla. Jokaisen kohdeluokan kuvaustyylit määritellään eri PDFStylereissä. Tässä esimerkiksi Tieviivan PDFStyler. Jos olet käyttänyt PDFStyleria ennen, huomaatko jotain erikoista kohdissa Color ja Line Width:

Kuvaustyylien määrittäminen kohdeluokalle tieviiva.

Kuvaustyylien määrittäminen kohdeluokalle tieviiva.

FME 2013 SP1:ssä kuvaustyyli voidaan luoda eri tieluokille suoraan yhdessä PDFStylerissa. Kohdeluokka tieviiva sisältää eri tieluokkia, ja kuvaustyylien määrittämiseen ei tarvitse jakaa kohdeluokkaa ensin eri luokkiin ja sitten määrittää kuvaustyylit jokaiselle tieluokalle eri PDFStylereilla. Toiminnon nimi on Set to Conditional Value:

Set to Conditional Value -toiminto.

Set to Conditional Value -toiminto.

Seuraavassa on esimerkki värin määrityksestä tieluokalle (lausekkeiden tekeminen ei oikeasti ole noin hankalaa kuin kuvassa näyttää. Väriarvonkin saa kirjoittamisen sijasta valita väritaulukosta):

Värien määritys eri tieluokille.

Värien määritys eri tieluokille.

3. Piirtojärjestys ja sijoittelu

PDF koostuu frame-elementeistä ja niiden sisään sijoitettavista kohteista. Attribuutti pdf_frame_name määrittelee framen nimen. Piirtojärjestykseen vaikuttavat kaksi attribuuttia: pdf_feature_order ja pdf_frame_order. Ensimmäinen vaikuttaa kohteiden piirtojärjestykseen saman framen sisällä ja jälkimmäinen vaikuttaa frame-elementtien piirtojärjestykseen. Mitä pienempi lukuarvo attribuuteilla on, sitä aiemmin kohteet ja frame piirretään, eli ne jäävät myöhemmin piirrettävien alle.

Sijoitteluun voi vaikuttaa attribuutilla pdf_frame_rectangle, joka määrittelee sivun yksiköissä framen sijainnin. Esimerkiksi, jos kartta-framen pdf_frame_rectangle on 25 250 -25 -10 (minx, miny, maxx, maxy), kartta-frame sijoitetaan 25 yksikköä vasemmasta ja 25 yksikköä oikeasta reunasta sekä 250 yksikköä ala- ja 10 yksikköä yläreunasta:

Framen sijoittelu pdf_frame_rectangle-attribuutilla. Muista nimetä frame attribuutilla pdf_frame_name.

Framen sijoittelu pdf_frame_rectangle-attribuutilla. Muista nimetä frame attribuutilla pdf_frame_name.

4. Legendan luonti

FME perustuu aineistojen muokkaukseen prosessissa, joten legendaan ei voi napata jostain haluamiaan kartan kohteita yksitellen, vaan poiminta pitää määritellä prosessiin. Perusidea esimerkissäni on se, että kohteet poimitaan Samplerilla ja kohteiden sekä kohdeluokkatekstien määrittely tehdään 2DBoxReplacerilla ja Tilerilla:

Legenda luodaan 2DBoxReplacerilla, Tilerilla ja Samplerilla sekä joukolla muita transformereita.

Legenda luodaan 2DBoxReplacerilla, Tilerilla ja Samplerilla sekä joukolla muita transformereita.

5. Mittakaavan ja pohjoisnuolen luonti

Pohjoisnuolen luominen oli suhteellisen helppoa. Loin ensin kolmiogeometrian Creatorilla, jota duplikoin, siirsin x-suunnassa Offsetterillä ja käänsin Scalerilla. Seuraavaksi määrittelin kuvaustyylit PDFStylereilla ja lisäsin N-tekstin pohjoisnuolen alapuolelle. Tässä lopputulos:

FMEllä tehty pohjoisnuoli.

FMEllä tehty pohjoisnuoli.

Mittakaavan tekeminen ei ollut ihan niin helppoa, koska mittakaavan pitää olla kuitenkin kartan mittakaavassa. Loin ensin aineistosta rajaavan suorakaiteen BoundingBoxAccumulatorilla, pilkoin sen Tilerilla 1000 m levyisiksi ja 25 m korkeiksi tiiliksi, valtisin tiilistä vasemman alakulman ja tiilitin vasemman alakulman uudelleen 100 m levyisiksi tiiliksi. Nämä 100 m leveät tiilet muokkasin PDFStylereilla niin, että joka toinen niistä sai täyttövärikseen valkoisen ja joka toinen mustan. Lisäsin myös metrimäärät teksteinä mittakaavan alapuolelle:

FMEllä luotu kartan mittakaava.

FMEllä luotu kartan mittakaava.

Näiden vaiheiden jälkeen työtila näyttää tältä:

Työtila PDF-kartan luomiseen.

Työtila PDF-kartan luomiseen.

Tulos-PDF on tässä:

FMEllä luotu PDF-kartta.

FMEllä luotu PDF-kartta.

Ladattava PDF (lataa koneelle ja avaa Adobe Readerissa):

Keilaniemi-PDF

Työtilasta voisi luoda ajastetun prosessin, joka käynnistyisi esim. kerran kuukaudessa ja voisi kirjoittaa PDF-karttoja useistakin eri alueista kerralla.

FME 2013 SP1 julkaistu, tukee Maastotietokanta-GML:ää

Kuten viime kirjoituksessa kerroin, FME 2013 SP1 tukee Maanmittauslaitoksen Maastotietokanta-GML-formaatin sisäänlukua. FME 2013 SP1:n voi ladata täältä: http://www.safe.com/support/support-resources/fme-downloads/

FME 2013 SP1:een on tullut paljon muitakin hyödyllisiä ominaisuuksia, kuten Testerin ja TestFilterin upottaminen transformereihin:

Lue lisää FME 2013 SP1:stä: http://www.safe.com/highlight/fme2013/sp1/

3D-mallin tekoa Maanmittauslaitoksen aineistoista

Kun Maanmittauslaitos avasi digitaaliset maastotietoaineistonsa, olin heti ensimmäisten joukossa lataamassa niitä Maanmittauslaitoksen tiedostopalvelusta: https://tiedostopalvelu.maanmittauslaitos.fi/tp/kartta. Palvelusta voi ladata tietomäärältään suurempia aineistoja karttalehdittäin ja pienempiä aineistoja kerralla koko Suomen laajudelta. Kannattaa tutustua, jos et ole vielä sivustolla käynyt. Muitakin tapoja hankkia aineistoja on. Niitä on saatavilla torrentteina: http://paikkatieto.com/2012/05/05/maanmittauslaitoksen-aineistot-torrent-palvelusta/ sekä niitä voi tilata Maanmittauslaitokselta.

Avoimien aineistojen joukossa on erittäin mielenkiintoinen aineisto laserkeilausaineisto. Latasin yhden testipalan Otaniemi-Tapiola-Keilaniemi -alueelta. Lisäksi latasin samalta alueelta ortokuvat sekä maastotietokannan karttalehtiä. Näillähän voi tehdä jo vaikka mitä hauskaa. Jotta testailuissa pääsee alkuun, kannattaa aloittaa maastotietokannan karttalehtien viemisellä kantaan esimerkiksi PostgreSQL/PostGIS:iin. Seuraavassa näet esimerkin maastotietokannan kohdemallin kohderyhmäkentän yhdistämisestä kullekin kohteelle kohdeluokkakoodin perusteella ja kirjoittamisesta PostgreSQL/PostGIS:iin.

Maastotietokannan kohteet PostGISiin

Maastotietokannan kohdemallin kohderyhmän yhdistäminen kullekin maastotietokannan kohteelle ja kirjoitus PostgreSQL/PostGIS:iin.

Kirjoituksen jälkeen FME:llä voi tarkastella visuaalisesti kohdeluokkia. Tässä on valittu rakennukset tarkastelun kohteeksi.

Rakennukset PostgreSQL/PostGIS:issä visualisoituna FME:ssä.

Rakennukset PostgreSQL/PostGIS:issä visualisoituna FME:ssä.

Kaiken tämän datan käsittelyn ja latauksen jälkeen mietin, miten saisin rakennuksille korkeudet. Laserkeilausaineistosta tietenkin! Tein FME:llä seuraavan testin, jossa luon kullekin rakennukselle korkeustiedon laserkeilausaineistosta. Lisäksi luon laserkeilausaineistosta maastomallin, ”liimaan” maastomalliin ortokuvan sekä korkeuden mukaan venytetyt rakennukset ja kirjoitan 3D PDF:ksi.

Aineistot 3D-malliksi 3D PDF:ään.

Aineistot 3D-malliksi 3D PDF:ään.

Pidemmittä puheitta seuraavassa on lopputulos.

3D-malli

3D-malli Otaniemi-Tapiola-Keilaniemi -alueesta.

Aineistojen käsittely 3D-malliksi oli mukavaa puuhaa sen jälkeen, kun ymmärsin käyttää Maastotietokannan kohdemalli-Excel:iä kohderyhmien selvittämiseksi ja kun aineisto oli PostgreSQL/PostGIS:issä. Jos kiinnostusta samanlaisen 3D-mallin tekemiseen riittää, autan mielelläni hommassa!

MML:n kuntarajat FME:llä

Innostuin testaamaan MML:n kuntarajojen lukua ja kirjoitusta muutamaan formaattiin FME:llä luettuani Pekka Sarkolan Twitter-viestin: ”MMLn kuntarajat käyttökelpoiseen muotoon (PDF): tinyurl.com/cragzzr”.

Safe Software:n mukaan FME osaa lukea Inspire-muotoista XML-dokumentteja sellaisenaan, sillä FME sisältää Inspire-skeematiedostot jo valmiiksi.Tämä tarkoittaa sitä, että näiden XML-dokumenttien sisäänluku ja kirjoitus eri formaatteihin on helppoa. Tämähän täytyy testata!

Aineiston lataus

Lataan kuntarajat XML-muotoisina osoitteesta http://www.maanmittauslaitos.fi/ilmaisetaineistot.

Aineiston sisäänluku

Valitsen formaatiksi INSPIRE GML:n ja aineistoksi kuntajaon mittakaavalla 1:100 000.

Inspire GML-luku

Valitaan tiedosto SuomenKuntajako_2011_100k.xml.

Saan tulokseksi FME:hen kaksi kohdeluokkaa, AdministrativeBoundary ja AdministrativeUnit.

AdministravieBoundary ja AdministrativeUnit

Aineiston kirjoitus

Jatketaan testiä kirjoittamalla hallintoyksiköt ja -rajat eri formaatteihin, joita voivat olla esimerkiksi MapInfo TAB, ESRI Shape, KML, PDF, DWG jne. Tein FME:llä muuntimen, joka muuntaa kuntarajat XML:stä mihin tahansa formaattiin:

Kuntarajat XML:stä mihin tahansa formaattiin.

Kun formaatin on valinnut 265 formaatista, painetaan OK, ja tarkastellaan tulosta.

Tulosaineiston tarkastelu

Kirjoitin ensin aineiston MapInfo TAB:iksi, ja tulos on haluttu, kun tarkastelen AdministrativeUnit.tab:ia.

Kuntarajat MapInfo TAB:ina.

AdministrativeUnit-kohdeluokka MapInfo TAB:ina.

Muita testaamiani formaatteja olivat KML, PDF ja DWG, joilla tulos olisi myös halutunlainen.

MML:n kuntarajojen vienti XML:stä eri formaatteihin osoittautui mielestäni varsin käteväksi.