GIS-automatisointi ja ohjelmointi/skriptaus Harri Antikainen
Mistä nyt puhutaan? Automatisointi: Mikä tahansa tapa teettää tietokoneella asioita ilman että käyttäjän tarvitsee tehdä muuta kuin laittaa prosessi alulle ArcGIS:ssä automatisointi tapahtuu joko ModelBuilderin avulla tai ohjelmoimalla/skriptaamalla Ohjelmointi/skriptaus: Koodin kirjoittamista Maallikon kannalta ohjelmointi ja skriptaus käytännössä sama asia Kuitenkin keskeinen ero löytyy: o Ohjelmoinnissa koodi käännetään konekielelle ja yleensä koodi vaikeaa laatia o Skriptauksessa koodia ei käännetä, yleensä myös paljon yksinkertaisempaa o Ohjelmoimalla toteutettu koodi toimii yleensä skriptikoodia tehokkaammin 2
GIS-automatisointi ja ohjelmointi/skriptaus Yleensä ottaen automatisointi tulee aiheelliseksi jos useista vaiheista koostuva toimintoketju on tarpeen suorittaa useita kertoja Automatisoinnin toteuttamisen vaatima aika ja vaiva on pienempi kuin prosessin toistaminen manuaalisesti käsin Ohjelmointi/skriptaus on erityisesti tarpeen kun: automatisoitavaan tehtävään liittyy monimutkaista logiikkaa halutaan laajentaa ArcGIS:n toiminnallisuutta halutaan toteuttaa kokonaan uusia GIS-toimintoja 3
ModelBuilder ModelBuilder tarjoaa graafisen suunnittelukäyttöliittymän, jolla voidaan muodostaa erilaisia toimintoketjuja (geoprosesseja) Kuvake löytyy ArcMapin ikoniriviltä: 4
ModelBuilder Tosin itse teen mieluummin seuraavasti: 1) Luodaan ensin ArcCatalog-näkymän johonkin hakemistoon uusi toolbox (Hiiren oikea New Toolbox), tai etsitään olemassa oleva toolbox 2) Sitten lisätään toolboxin alle uusi malli (hiiren oikea New Model...) 3) Sitten vain aletaan tekemään mallia Tämä menettely siksi että mallin pitää joka tapauksessa olla jonkin toolboxin alla: on parempi että mallin tekee heti oikeaan paikkaan 5
ModelBuilder - esimerkki Tehdään ModelBuilderilla malli joka toteuttaa seuraavan geoprosessin : Muodostetaan pisteiden (esim. pesäpaikat) ympärille bufferit, joiden mukaan sitten leikataan piparimuotin tavoin alueet polygonitasolta (esim. maankäyttötyypit) 6
ModelBuilder ModelBuilder-näkymään voidaan tuoda ArcToolboxin työkaluja hiirellä vetämällä 7
ModelBuilder ModelBuilder-näkymään otetut työkalut voidaan kytkeä toisiinsa Connect toiminnolla, esim. tässä Buffer-työkalun tulos voidaan kytkeä suoraan syötteeksi Clipille Ole tarkkana, että teet kytköksen oikeiden parametrien välille!! Tässä tapauksessa Buffer tuottaa alueita joilla halutaan leikata toisia alueita, joten siksi Buffer-analyysin tulos on kytkettävä nimenomaan Clipin Clip Features -kohtaan Connect 8
ModelBuilder Niistä mallin parametreista, joita käyttäjän halutaan voivan kontrolloida, tehdään mallin muuttujia hiiren oikea Make Variable From Parameter parametrin nimi 9
ModelBuilder Kaikki edellisessä vaiheessa muuttujiksi määritellyt syötteet sekä ne tulosteet, joiden nimen käyttäjä saa määrätä, asetetaan mallin parametreiksi (Model Parameter) Parametriksi määritellyn pallukan viereen tulee tällöin näkyviin P 10
ModelBuilder Valmis malli, jossa parametreina on Buffertyökalun syötteeksi tuleva (piste)taso ja bufferin leveys, leikattava rasteri sekä tuloksena syntyvä bufferitaso Parametrien nimet on myös muutettu (Rename...) selkeämmiksi Muista tallentaa malli! (Save) 11
ModelBuilder Malli voidaan nyt ajaa toolboxinsa alta, jolloin käyttäjä pääsee antamaan mallille parametreiksi määritellyt syötteet Kahden toiminnon ajaminen onnistuu nyt siis yhdellä kertaa Turhat välivaiheet jäävät siten pois 12
Ohjelmointi ja skriptaus ArcGIS:iä voi ohjelmoida mm..net:llä, C++:lla ja Javalla, mutta tämä menee jo hyvin edistyneelle tasolle Yleisimmin ohjelmointitarpeet täyttää Python-kielinen skriptaus Python on yleinen ohjelmointikieli, joka ei itsessään ole mitenkään sidoksissa ArcGIS:in Python on suhteellisen yksinkertainen kieli, mutta ilman mitään ohjelmointikokemusta on vaikeaa lähteä toteuttamaan skriptausta Mainittakoon, että Python-skriptaus toimii myös ilmaisessa QGISohjelmistossa, mutta ArcGIS:lle ja QGIS:lle tehdyt skriptit eivät ole keskenään vaihdettavissa 13
Python Python-skripti on sinänsä tavallinen tekstitiedosto (tosin.pypäätteinen) jota voi kirjoittaa millä tahansa tekstieditorilla Kannattaa kuitenkin hyödyntää jotain koodieditoria, esim. IDLE 14
Python Esim. skripti, joka sanoo Huomenta jos kello vähemmän kuin 12, ja muussa tapauksessa Päivää Tuodaan (import) tarvittavat ohjelmistokirjastot: arcpy tarjoaa ArcGIS:n toiminnot käyttöön Pythonissa datetime puolestaan sisältää aikaan liittyviä toimintoja Selvitetään tämänhetkinen tunti ja tallennetaan se muuttujaan nykyinen_tunti If-else ehtorakenne, jossa tulostetaan arcpy:n AddMessagefunktiota käyttäen joko Huomenta! tai Päivää! riippuen nykyinen_tunti-muuttujan arvosta. Huomaa sisennykset! Pythonissa eri koodilohkot määritellään aina sisennysten avulla! 15
Python Esimerkkiskriptin tuottama tulostus ArcMapin Results-näkymässä: 16
ModelBuilder-esimerkki Python-skriptinä ModelBuilder-mallin voi eksportoida Python-skriptiksi Tätä skriptiä tosin editoitu eksporttauksen jälkeen 17
Python (+ ohjelmointi ylipäätään) ja GIS Pythonia (ja myös oikeaa ohjelmointia) käytetty monissa GIStutkimusryhmän hankkeissa Joissakin tutkimushankkeissa työ on jopa 90%:sti pelkkää skriptausta/ohjelmointia Omassa GIS-työssä olen tähän mennessä tehnyt ~ 40 ohjelmaa ~ 100 skriptiä Geoinformatiikassa ja GIS:ssä pärjää myös ilman ohjelmointitaitoa, mutta tällöin mahdollisuudet tehdä asioita ovat hyvin rajalliset Ohjelmointi ainakin jollakin tasolla on siten erittäin suositeltava taito! 18
Esimerkkiä tämänhetkisestä tutkimuksesta Hanke Kelan kanssa, 700.000 Kelan korvaamaa taksimatkaa sisältävä aineisto Tampereen alueelta Kuinka paljon säästetty matkoja yhdistämällä, kuinka paljon matkoja olisi voinut yhdistää vielä lisää? Skriptaamalla tehtyä (Python): Taksimatkan laskennallisen hinnan määrittäminen Jos yhdistetty kuljetus olisi ajettu erillinä kuljetuksina, mitä reitejä olisi silloin ajettu (ja kuinka paljon ne olisivat maksaneet)? Millaisia reittiyhdistelmiä yhdistelemättömistä taksimatkoista on löydettävissä (siten että lopputuloksena olisi ollut rahallinen säästö)? 19