Tule kuulemaan Eurooppalaisten kaupunkien tarjoamista mahdollisuuksia 4.6.

Järjestämme viikon päästä maanantaina 4.6. kello 17-20 ainutlaatuisen avoimen tilaisuuden kiinnostuneille. Tilaisuus järjestetään Forum Virum Helsingin tiloissa, niin kuin aiempikin supersuosittu Helsingin kaupungin kehittäjätilaisuus.

Olemme saaneet CitySDK-hankeen kautta eurooppalaisia yhteistyökumppaneita eri puolilta Eurooppaa esittelemään kaupunkien tarjoamista mahdollisuuksista sovelluskehittäjille. Tilaisuudessa on Amsterdamin, Lissabonin, Manchesterin, Istanbulin ja Helsingin kaupunkien edustajat, jotka kertovat minkälaisia mahdollisuuksia heillä on tarjota avoimen datan ja rajapintoja saralla. Kuulemme myös kiinnostavia esimerkkejä eri kaupunkien suosituista sovelluksista.

Tulkaa mukaan tutustumaan, missä Euroopassa mennään kaupunkien kehittämisessä ja mitkä sovellukset ovat muissa kaupungeissa suosittua. Tilaisuudessa on erinomainen mahdollisuus verkottua eri kaupunkien edustajien kanssa ja saada uusia ideoita miten kehittää parempia palveluita kaupunkilaisille. Tervetuloa mukaan!

Posted in API, Avoin data | Leave a comment

Tervetuloa Helsingin kaupungin kehittäjätapaamiseen to 10.5.!

Olemme järjestämässä torstaina 10.5 Helsingin kaupungin kehittäjätapaamista. Tälläisiä tilaisuuksia ei ole aikaisemmin järjestetty, joten kyseessä on ensimmäinen ja historiallinen tilaisuus! Kannattaa siis ehdottomasti tulla paikalle, jos kiinnostaa kuulla kaupungin tarjoamista mahdollisuuksista kehittää sovelluksia kaupungin avointa dataa ja avoimia rajapintoja hyödyntäen. Tilaisuus on avoin kaikille.

Tilaisuus järjestetään kello 17-19 ja se pidetään Forum Virium Helsingin tiloissa. Osoite on Katariinankatu 3 ja käynti sisäpihan kautta. Tilaisuuteen pitää rekisteröityä ma 7.5. mennessä osoitteessa http://digiumenterprise.com/answer/?sid=832317&chk=B6PGQZ9G.

Liittykää myös tilaisuuden Facebook-sivulle. Täältä myös löytyy lisätietoa.

Tilaisuudessa on tarkoitus kertoa muutamista kaupungin tarjoamista mahdollisuuksista sovelluskehittäjille. Pääsette kuulemaan niiden taustoista ja tulevaisuuden suunnitelmista. Tilaisuudessa halutaan kuulla palautetta suoraan kehittäjiltä. Toiveena on, että vuoropuhelusta kehittäjien kanssa tulee jatkuvaa ja näitä tilaisuuksia on myös tarkoitus järjestää jatkossa lisää.

Ensimmäisessä tilaisuudessa kerrotaan CitySDK -projektista ja Palvelukartan REST-rajapinnasta. Lisää aiheita voi vielä tulla. Paikalla on myös kaupungin Talous- ja suunnittelukeskuksen tietotekniikkaosaston tietotekniikkapäällikkö ja muitakin kaupungin työntekijöitä, joten tietoa kaupungin asioista on tarjolla.

Haluamme antaa myös kenelle tahansa mahdollisuuden kertoa ideoista, kokemuksista tai sovelluksista, joita ovat tehneet tai haluaisivat tehdä. Ottakaa yhteyttä minuun, jos haluatte oman pitchausslotin.

Tervetuloa mukaan!

Posted in API, Avoin data | 17 Comments

Tavoitteena parempi kaupunki

Ericsson on tehnyt aika hyvän videon, jossa kuvataan vallitsevaa kaupungistumissuuntausta, sen seurauksia ja miten kaupunkeja tutkitaan ja yritetään tehdä paremmiksi paikoiksi ihmisille. Videossa kerrotaan 10.24 minuutin kohdalla Bostonin Citizen Connect -projektia, joka hieman valottaa myös sitä mitä aloitin juuri tekemään Helsingin kaupungin leivissä CitySDK-hankkeessa (PDF).

Posted in Uncategorized | Tagged | Leave a comment

Uusi duuni kaupungilla

Olen aloittanut työt Helsingin kaupungilla. Tehtävänä on kehittää kaupunkilaisten mahdollisuuksia antaa palautetta kaupungin toiminnasta. Kaupungin omilla sivuilla eri virastoilla on palautesivuja vähän siellä sun täällä ja tähän olisi tarkoitus saada selkeyttä. Kaupungin sisäistä palautteen käsittelyä on myös tarkoitus parantaa.

Mikä minuun tässä projektissa ensimmäisenä herätti kiinnostusta oli se, että kaupungin palautejärjestelmään on myös tarkoitus kehittää avoin rajapinta. Tuota rajapintaa voi käyttää erilaiset sovellukset kuten kännykkäsovellukset, joilla palautetta kuvan ja tarkan sijainnin kanssa voi helposti lähettää suoraan kaupungille. Vastaavia  palveluja ja rajapintoja on jo käytössä Amerikassa eri kaupungeissa (esim. San Francisco), jossa on yleisesti käytössä Open311 GeoReport v2 rajapinta.

Lisäksi tämä hanke on osa EU CitySDK-hanketta (PDF), jossa on tarkoitus avata avoimia rajapintoa muihinkin palveluihin ja kaupunkeihin. On minusta erittäin kiinnostavaa, että kaupungit ovat lähteneet kehittämään järjestelmiä tähän suuntaan. Tässä on otettu askel eteenpäin “perinteisen” avoimen datan tarjoamisesta ja nyt ollaan kehittämässä uusia tapoja, joilla kaupunkilaiset voivat paremmin osallistua kaupungin kehittämiseen. Tähän annetaan parempia työkaluja kuten rajapintoja, joihin kaupunkilaiset voivat myös lähettää.

Kaupunkien järjestelmien kehittämisessä on uskomattoman paljon potentiaalia parantaa kaupunkien toimintaa ja kaupunkilaisten elämää. Se jos mikä on mielettömän innostavaa!

Posted in API, Avoin data, Yleistä | 4 Comments

Puhelutiedot ohjelma on nyt Android Marketissa!

Vihdoinkin sain itseäni otettua niskasta kiinni ja laitettua tämän viimeisimmän Puhelutiedot-ohjelman Android Marketiin. Käykääpä kokeilemassa!

Tämä onkin jo minun kolmas ohjelma Marketissa :)

Posted in Android, Avoin data | Leave a comment

Helsingin kaupungin ja puhelinmyyjien numerot lisätty

Julha.apk
Edellisessä postauksessa oli juttua tuosta “Kuka julkishallinnon henkilö soittaa?” Android-sovelluksesta. Se on nyt saanut jatkoa. Tiesittekö, että Helsingin kaupungilla on hyvin dokumentoitu rajapinta omiin yhteystietoihin. No minä en ainakaan tiennyt, mutta onneksi sain tästä vinkin ja tottakai tuo oli otettava mukaan. Löytyisiköhän muistakin kaupungeista?

Lisäksi eksyin jotakin kautta tälläiselle Puhelinmyyja.info sivuille, jossa on ainakin joskus pidetty listaa puhelinmyyjien käyttämistä puhelinnumeroista. Ne on voinut ladata omaan puhelimeen, minkä jälkeen ainakin osan puhelinmyyjien soitoista on voinut tietää etukäteen. Kuulosti hyödylliseltä, joten nappasin nuokin numerot mukaan. Lisäsin vielä mahdollisuuden raportoida, jos joku tuntematon soittaja oli puhelinmyyjä, koska se tuntui kätsyltä lisältä.

Nyt siis ohjelma tunnistaa julkishallinnosta, Helsingin kaupungilta ja puhelinmyyjiltä tulleita puheluita. Jos kiinnostaa, niin kokeilkaapa ja kertokaa saitteko puhelinmyyjiä kiinni. Tuolla QR:lläkin voi ohjelman ladata.

Posted in Avoin data | 3 Comments

Kuka julkishallinnon henkilö soittaa?

Apps4Finland-kisaa järjestäessä tuli käytyä läpi kaikenlaista avointa dataa, mitä on tarjolla. Joidenkin kohdalla tuli ideoita datan käytöstä ja yhden kohdalla jopa tein oman pikku sovelluksen, koska se tuntui tarpeelliselta. Kun tarvittavat palaset ja sopivasti luppoaikaa löytyi, niin sovelluksen tekeminen oli suoraviivainen juttu.

Sovellus on kopio noista Kuka soittaa? -tyylisistä palveluista. Se kuitenkin käyttää yhteystietojen selvittämiseen ainoastaan julkishallinnon työntekijöiden yhteyshakemiston Julha:n dataa. Ohjelma yrittää selvittää Julhan yhteystiedoilla soittajan nimen ja organisaation, jos minulle tulee puhelu tuntemattomasta numerosta.

Ohjelmassa on monia pikku asioita, joiden takia se viehättää. Ensinnäkin tietenkin se, että se käyttää avointa dataa ja luulenpa että Julhan data on aika vähän käytetty joten on hauska olla avaamassa uusia latuja. Nykyään kun kännyköihin on vaikka mitä sovelluksia, niin juuri tälläisiä minusta hyödyllisten kännykkäsovelluksien pitäisi olla eli ne toimii automaattisesti juuri silloin kuin sinä sitä tarvitset. Ne eivät ole hukassa eikä niiden käyttöä unohda.

Sovellus on kaiken lisäksi todella yksinkertainen. Se käyttää suoraan Julhan LDAP -rajapintaa ja kaikki oleellinen oikeastaan tapahtuu yhdessä ohjelman tiedostossa.

Laitan ohjelman jossain vaiheessa Android Markettiin jakoon. Nyt sen koodi löytyy gitoriuksesta. Mukaan saa tulla jatkokehittämään ja kiinnostavaa olisi esimerkiksi pohtia voisiko Julhasta saatavalla soittajan organisaatio- ja paikkakuntatiedoille keksiä jotain uusia käyttöideoita.

Posted in API, Avoin data, Mobiileista | 2 Comments

Apps4Finland kisan palkinnot on jaettu

Tasan 7 kuukautta sitten kirjoitin, että olen aloittanut Apps4Finland-kilpailun projektipäällikkönä. Aika on mennyt kuin siivilla. Nyt kilpailun voittajat on julkistettu, palkittu ja juhlittu upeassa Apps4Finland -gaalassa Vanhalla ylioppilastalolla.

Miltäkö nyt tuntuu? Katsokaa vastaus vaikka tältä videolta (4.44 alkaen).

Eli oikein hyvältä tuntuu. :)

Posted in Apps4Finland, Avoin data | Leave a comment

Kulttuuria ja paikkadataa

Ensi viikko on kiireinen viikko. Silloin Helsingissä on kaksi kiinnostavaa tilaisuutta, joita olen ollut järjestämässä.

Tiistaina 20.9 kello 15 alkaen järjestämme “Workshop on Open Location Data” -työpajan, jossa on tarkoitus tarkastella erilaisten konkreettisten demojen kautta, miten avoinna olevaa paikkatietoa voi ottaa käyttöön. Kaikille jotka ovat puuhailleet paljon Google Mapsin sen sellaisten kanssa, tämä aivan varmasti avartaan hieman paikkatiedon maailmaa ja mahdollisuuksia. Ainakin minulle on käynyt niin.

Torstain 22.9 tilaisuudessa on hieman eri aihe, mutta vähän sama lähestyminen. Torstaina Lasipalatsissa “Culture Hack Evening” -tilaisuudessa katsellaan hieman, mitä kulttuuriin liittyvää dataa meillä onkaan tarjolla. Sen jälkeen pohditaan mihin ja miten data saataisiin paremmin käyttöön. Hieman erikoinen nimi on saatu Culture Hack Day- tapahtumasta, josta vaikutteita on ammennettu. Ihan häkkäilyn asteelle ei taideta illan aikana päästä, mutta ajatusten vaihtoon teknisesti orientoituvien (eli häkkeri/nörtti) ja kulttuurisektorin ihmisten kanssa pyritään pääsemään.

Tilaisuuksissa on vielä muutamia vapaita paikkoja joten tulkaa rohkeasti mukaan! Ilmoittautukaa linkeistä, niin saadaan kaikille sämpylät järjestettya :)

Posted in API, Apps4Finland, Avoin data | Leave a comment

Uusia aluevaltauksia

Tässäpä on teille tehtävä. Alla on erilaisia karttakuvia samalta alueelta. Mikä alla olevista kuvista pitää sisällään jokia, metsiä, peruskartan, peltoja ja teitä.

Apps4Finland-kilpailuun liittyen on päässyt tutustumaan Maanmittauslaitoksen avaamaan karttatietoon. Samalla on tutustunut paremmin, siihen mitä karttamaailma oikeasti pitää sisällään. Maanmittauslaitoksen vektoripohjaisesta ilmaisaineistosta avautuu uusia asioita helposti käyttöön, mistä nuo kuvatkin on osoitus.

Toisena esimerkkinä voisi olla rajatieto, joka on aina kiinnostavaa (kun siis puhutaan sijaintipalveluista). Kartta-aineistosta voi erottaa kuntien väliset rajat omaksi KML-tiedostoksi, jonka voi sitten vaikka esittää Google Mapsissa.


Näytä suurempi kartta

Jos tämä herätti kiinnostuksesi, tervetuloa jatkamaan asioiden oppimista Apps4Finlandin järjestämään avoimen paikkatiedon työpajaan 20.9 Helsingissä :)

PS. Vastauksen muuten kysymykseen saa sillä, kun muistaa että Suomi on oikeasti täynnä metsää! Nuo kuvat on muuten tehty ilmaisella QGIS-ohjelmalla ja se oli yllättävä helppoa!

Posted in Apps4Finland, Avoin data, sijaintipalvelut | 4 Comments

Karttoilla on eroja

Maanmittauslaitos on avannut omia karttatietojaan laajempaan käyttöön. Joillekin on ehkä jäänyt epäselväksi, mitä eroja vaikka Maanmittauslaitoksen ja esim. Google Mapsin kartoilla on. Tein pienen vertailun Kolin kansallismaisema-alueelta. (Erot olisivat pienempiä kaupunkialueilla.)

Ensimmäisenä on Maanmittauslaitoksen ortokuva verrattuna Google Mapsin satelliittikuviin.

   

Seuraavana on Maanmittauslaitoksen maastokartta ja Google Mapsin normaalikartta.

   

Viimeisenä vielä OpenStreetmap kartta samalta alueelta.

Minkä kartan sinä ottaisit mukaan mieluiten tuolle alueelle?

Posted in Apps4Finland, Avoin data | 1 Comment

Avoin data pelien maailmassa

Vaikka olen järjestämässä Apps4Finland-kilpailua, en ole ajatellut pitää kynttilää vakan alla ideoiden suhteen. Tässä näitä tulee ja näitä saa ihan häpeilemättä varastaa.

Kun muita avoimen data kilpailuja katsoo, niin sieltä aina silloin tällöin tulee vastaan pelejä, jotka jollain tavalla pohjautuvat avoimeen dataan. Apps4Finland-kilpailuiden 3-vuotisessa historiassa niitä ei ole jostain syystä näkynyt, vaikka Suomesta puhutaan nykyään pelien ihmemaana. Onhan täällä Angry Birds ja sijaintiin pohjautuva Shadowcities-peli, jota New york Times hehkutti mobiilipelaamisen tulevaisuutena, mutta Apps4Finland-kilpailussa pelejä ei ole näkynyt.

Voisi kuvitella, että pääkaupunkiseudun tilastodatan pohjalta voisi kehitellä hauskoja trivial pursuit -tyylisiä tietopelejä, joissa pitää arvata onko Munkkiniemessä enemmän asukkaita kuin Etelä-Haagassa. Entäpä kummassa paikassa tulotaso on korkeampi tai ympäristötilastojen perusteella uudempia asuintaloja.

Peliin voisi lisätä paikkaan liittyviä asioita, kuten että pitäisi osata sanoa karttapisteestä mikä kaupunginosa on kyseessä. Tai pelaajan pitäisi osata näyttää puhelimella, mihin suuntaan pitäisi lähteä, jos haluaisi oman ympäristönsä keskimääräisen koulustustason nousevan.

Entäpä sitten olemassa olevat pelit kuten Shadowcities, jonka slogan on “Your city is a game”. En ole pelannut peliä (ei saatavilla Androidille), mutta tiedän, että pelissä hyödynnetään kaupunkien karttatietoa. Siihen se kaupunkidatan käyttö kuitenkin taitaa jäädä. Jos kerran tuolle tielle on lähdetty, niin voisihan mukaan ottaa muutakin dataa. Kaupungeista on paljon dataa saatavilla.

Mitä jos Shadowcities pelaajien valtaamilla alueilla olisi jotain vaikutusta pelin kulkuun, kuten jos on kunkkuna paikassa jossa on paljon koulutettuja ihmisiä, olisi sillä vaikutusta pelaajan saamiin taitoihin ja loitusuihin (huom! en ole pelannut peliä). Tai jos alkaa räiskiä palvelukartan tiedon pohjalta lasten leikkipuiston tai päiväkodin vieressä, niin tästä huolimattomasta toiminnasta olisi seurauksena pistemenetyksiä. Tai pelissä voisi kiinnittää pienen pommitervehdyksen vierestä viilettävän sporan kyytiin ja katsoa mitä tuhoa se saa aikaiseksi parin korttelin päässä lymyävien vihollisten joukossa. Nyt kaupunki alkaisi olemaan mukana pelissä ihan eri tasolla.

Taidan lopettaa ennenkuin innostun liikaa. Toivottavasti tämä herätti ideoita. Jään nyt odottelemaan innolla Shadowcities ja muiden pelintekijöiden kiinnostavia Apps4Finland-kilpailutöitä :)

Posted in Apps4Finland, Avoin data | Leave a comment

Avoimen datan perkuu -talkoot

Aina kun kehittäjien kanssa keskustelee Apps4Finland-kilpailusta, keskustelu nopeasti kääntyy siihen, että mistä sitä kiinnostavaa avointa dataa löytyy, josta voisi tehdä sovelluksia. Kysymykseen on ollut hieman huonoja vastauksia tähän saakka.

Kysyjän on lähinnä voinut ohjata ihmettelemään data.suomi.fi tai hri.fi datakatalogeja. Huonoja on ne ovat oikeastaan vain sen takia, että niistä on vaikea löytää kiinnostavat ja sovelluksille sopivat datasetit.

Tämän takia olenkin aloittanut Avoimen datan perkuu -talkoot. Tarkoitus on setviä noista katalogeista parhaimmat datat ja laittaa ne esille tuonne Apps4Finland-sivun datakatalogisivulle.

Olen aloittanut työn käymällä läpi data.suomi.fi -sivun ja erottanut siitä kaikki turhat RSS syötteet erikseen. Lisäksi olen vähän koittanut merkata, mitkä noista jäljellä olevista datoista on kiinnostavia ja mitä listasta puuttuu. Työ on vielä kesken joten tulkaa mukaan talkoisiin auttamaan löytämään kiinnostavat avoimen datan setit!

PS. Olen aloittanut myös tekemään lopullista datalistaa, joka tulisi tuonne Apps4Finland-sivulle tämän perkuutalkoon seurauksena. Sitäkin saa kommentoida!

Posted in Apps4Finland, Avoin data | Leave a comment

Kun hätä yllättää, auttaako palvelukartan REST-rajapinta?

Pääkaupunkiseudun palvelukartta on hulppea, mutta ehkä kuitenkin aika tuntematon, tietovarasto kaikista Helsingin, Espoon, Vantaan ja Kauniaisten toimipisteistä ja palveluista. Kesäkuussa tuohon palvelukarttaan tuli REST-rajapinta.

Tutkailin sen käyttöä yksinkertaista esimerkkiä käyttäen. Mitä jos tekisin sovelluksen, joka auttaisi vessahädän yllättämäksi joutunutta kansalaista ja näyttäisi pääkaupunkiseudulta lähimmän yleisen vessan, jonne rynnätä. Ensimmäinen ongelma oli löytää REST-rajapinnan web-osoite, josta hädänhetkellä löytyy ne vessat. REST-rajapinta ja sen kuvaus ei tässä kauheasti auttanut. Kun vihdoin oikea osoite löytyy, tulos on tälläinen:

<service>
  <id>8920</id>
  <parent__id>8800</parent__id>
  <name__fi>Yleisövessat</name__fi>
  <name__sv>Allmänna toaletter</name__sv>
  <name__en>Public toilets</name__en>
  <child__ids/>
     <unit__ids>
         <int>10929</int>
         <int>10935</int>
         <int>10939</int>
         ...
     </unit__ids>
</service>

Jos hätä yllättää Hietalahdentorilla, niin tuo lista numeroita ei paljoa auta. Pitää tietää, että Hietalahden torilla on onneksi yleisövessa ja sen numero on 10927. Tuolla tiedolla saa esiin vessan koordinaatit ovat 60.162735, 24.928944, joiden avulla löytää oikeaan paikkaan.

Oikeastaan helpompi tapa vessojen löytymiselle on hakea palvelukartalta vessat ja klikkaamalla kartan yläkulmassa olevaa Vie-linkkiä ja valitsemalla “Vie Google Earthiin …”. Sieltä saa vastaukseksi KML-tiedoston, jossa on kaikki vessat koordinaatteineen ja osoitteineen. Tuossahan on oikeastaan kaikki tieto, mitä tarvittiinkin sovveluksen tekemiseen yhdessä paketissa!

Kun tuota palvelukartan linkkiä katsoo, niin sehän on REST-rajapinta itsessään, joka palauttaa XML-tiedoston takaisin. Ainoa mikä pitää tietää on tuo vessojen “themes” numero 8920, jonka löytää palvelukarttaa selaamalla. Tuo numero on muuten sama, mitä varsinaisessa REST-rajapinnan käytössäkin tarvitsee. Mieleen tulee kysymys, että mihinkäs tuota REST-rajapintaa oikeastaan tässä tarvittiinkaan?

Posted in API, Avoin data | 2 Comments

Maanmittauslaitoksen rasterikartat Androidiin

En pystynyt sittenkään pitämään näppejäni irti avoimen datan koodailuista. Olin jo vähän aikaa miettinyt, että olisi kiva kokeilla, miten noita Maanmittauslaitoksen esim. maastokarttoja saisi kännykkään näppärästi. iPhonessa on muutama ohjelma, jotka jotain noista kartoista näyttää. Ajattelin kuitenkin, että olisi parempi tehdä yleinen kirjasto, jonka avulla kuka tahansa saisi nuo kartat mukaan Android ohjelmiinsa.

Tämän tekeminen tuntui aika isolta hommalta, kunnes törmäsin avoimeen osmdroid-kirjastoon. Sillä pystyy helposti näyttämään Android-kännyköissä erilaisia karttoja, kuten OpenStreetMap-kartan. Vielä kun Maanmittauslaitoksella oli sopivan oloinen web rajapinta karttoihin eli Web Map Service-palvelun (WMS), joka on mahdollisesti tulossa aivan vapaaseen käyttöön, tuntui karttojen yhdistäminen osmdroid-ohjelmaan suoraviivaiselta jutulta.

Ensin piti hakea tunnukset rajapinta-palveluun, jotka saikin sutjakkaasti. Sitten osmdroid-softaa piti puukottaa hieman lisäämällä sinne uusi lähde karttojen laatoille (eng. tile).

public class TileSourceFactory {
	...
	public static final OnlineTileSourceBase MML =
			new MML__XYTileSource("Maanmittauslaitos",
						ResourceProxy.string.mml,
						0, 18, 256, ".png",
						"http://opendata.fi/tiles/proxy.php");
	...
	private static ArrayList mTileSources;
		static {
			mTileSources = new ArrayList();
			mTileSources.add(MML);
			...
	}
}

Kuten koodista näkyy, tein oman “karttaproxyn” verkkoon (kyllä opendata.fi -domain on minulla käytössä :) ). Varsinainen karttojen laattalähde (MML__XYTileSource) yksinkertaisesti kertoi, miten tuohon minun proxyyn kysely pitää tehdä.

public class MML__XYTileSource extends XYTileSource {
	....
	@Override
	public String getTileURLString(final MapTile aTile) {
		return getBaseUrl()+"?zoom=" + aTile.getZoomLevel() +
				+ "&X=" + aTile.getX() + "&Y=" + aTile.getY();
	}
}

Tuolla proxyllä lähinnä kierretään WMS-palvelun vaatima HTTP Basic tunnistautuminen. Nyt kännykän sijaan proxy tunnistautuu palveluun käyttäjätunnuksella ja salasanalla. Proxy myös muuntaan nuo OpenStreetMap laattanumerot WGS-84 koordinaateiksi ja sitten vielä WMS-palvelun käyttämiksi ETRS-TM35FIN tasokoordinaateiksi.

$url = "https://ws.nls.fi/rasteriaineistot/image?service=WMS" .
                    "&version=1.1.1&request=GetMap&width=256&height=256".
                    "&format=image%2Fpng&layers=maastokartta_500k".
                    "&styles=normal&srs=EPSG%3A3067&bgcolor=ffffff".
                    "&transparent=false&time=&bbox=";

$zoom = $_GET['zoom'];
$X = $_GET['X'];
$Y = $_GET['Y'];

//Lasketaan kulmien koordinaatit minimi NE ja maksimi NE
$Y=$Y+1;
$wgs2 = tiles_to_wgs84($X,$Y,$zoom);
$etr2= wgs_etrs($wgs2['lat'], $wgs2['lon']);

$X = $X + 1;
$Y = $Y - 1;
$wgs4 = tiles_to_wgs84($X,$Y,$zoom);
$etr4= wgs_etrs($wgs4['lat'], $wgs4['lon']);

$url .=  $etr2['E'] .",".$etr2['N'].",".$etr4['E'].",". $etr4['N'];

PHP:n cURL-functioilla käydään hakemassa karttakuva Maanmittauslaitoksen WMS-palvelusta, josta se heitetään se suoraan kännykkäsovellukselle.

$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

// Getting binary data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "käyttäjätunnus:salasana");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
$image = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

$im = @imagecreatefromstring($image);

header("Content-type: image/png");
imagepng($im);
imagedestroy($im);

Laskentakaavat joilla OpenStreetMap laattanumerot muutetaan WGS-84 koodinaateiksi ja sitten vielä ETRS-TM35FIN tasokoordinaateiksi piti hakea kissojen ja koirien kanssa netistä. Lopullinen totuus löytyi täältä ja täältä.

function tiles_to_wgs84($x,$y,$zoom){
        $n = pow(2, $zoom);
        $lon_deg =$x / $n * 360.0 - 180.0;
        $lat_rad = atan(sinh( pi() * (1 - 2 * $y / $n)));
        $lat_deg = $lat_rad * 180.0 / pi();

        $wgs = array();
        $wgs['lat'] = $lat_deg;
        $wgs['lon'] = $lon_deg;
        return $wgs;
}

function wgs_etrs($la, $lo){
        $Ca = 6378137.0;
        $Cb = 6356752.314245;
        //WGS84 ellipsoid
        //$Cf = 1.0 / 298.257223563;
        $Cf = 1.0 / 298.257222101;
        $Ck0 = 0.9996;
        $Clo0 = deg2rad (27.0);
        $CE0 = 500000.0;
        $Cn = $Cf / (2.0 - $Cf);
        $CA1 = $Ca / (1.0 + $Cn) * (1.0 + pow($Cn, 2.0) / 4.0 + pow($Cn, 4.0) / 64.0);
        $Ce = sqrt(2.0 * $Cf - pow($Cf, 2.0));
        $Ch1 = 1.0/2.0 * $Cn - 2.0/3.0 * pow($Cn, 2.0) + 37.0/96.0 * pow($Cn, 3.0) - 1.0/360.0 * pow($Cn, 4.0);
        $Ch2 = 1.0/48.0 * pow($Cn, 2.0) + 1.0/15.0 * pow($Cn, 3.0) - 437.0/1440.0 * pow($Cn, 4.0);
        $Ch3 = 17.0/480.0 * pow($Cn, 3.0) - 37.0/840.0 * pow($Cn, 4.0);
        $Ch4 = 4397.0/161280.0 * pow($Cn, 4.0);
        $Ch1p = 1.0/2.0 * $Cn - 2.0/3.0 * pow($Cn, 2.0) + 5.0/16.0 * pow($Cn, 3.0) + 41.0/180.0 * pow($Cn, 4.0);
        $Ch2p = 13.0/48.0 * pow($Cn, 2.0) - 3.0/5.0 * pow($Cn, 3.0) + 557.0/1440.0 * pow($Cn, 4.0);
        $Ch3p = 61.0/240.0 * pow($Cn, 3.0) - 103.0/140.0 * pow($Cn, 4.0);
        $Ch4p = 49561.0/161280.0 * pow($Cn, 4.0);

        $la = deg2rad($la);
        $lo = deg2rad($lo);
        $l = $lo - $Clo0;
        $cos = cos($la)*$l;
        // Mittakaavakerroin
        //$Ck0 = $Ck0*(1 + 0.5 * pow($cos,2));
        //logger("mittakaavakerroin: $Ck0");
        $Q = asinh(tan($la)) - $Ce * atanh($Ce * sin($la));
        $be = atan(sinh($Q));
        $nnp = atanh(cos($be) * sin($lo - $Clo0));
        $Ep = asin(sin($be) * cosh($nnp));
        $E1 = $Ch1p * sin(2.0 * $Ep) * cosh(2.0 * $nnp);
        $E2 = $Ch2p * sin(4.0 * $Ep) * cosh(4.0 * $nnp);
        $E3 = $Ch3p * sin(6.0 * $Ep) * cosh(6.0 * $nnp);
        $E4 = $Ch4p * sin(8.0 * $Ep) * cosh(8.0 * $nnp);
        $nn1 = $Ch1p * cos(2.0 * $Ep) * sinh(2.0 * $nnp);
        $nn2 = $Ch2p * cos(4.0 * $Ep) * sinh(4.0 * $nnp);
        $nn3 = $Ch3p * cos(6.0 * $Ep) * sinh(6.0 * $nnp);
        $nn4 = $Ch4p * cos(8.0 * $Ep) * sinh(8.0 * $nnp);
        $E = $Ep + $E1 + $E2 + $E3 + $E4;
        $nn = $nnp + $nn1 + $nn2 + $nn3 + $nn4;

        $ETRS = array();
        $ETRS['N'] = $CA1 * $E * $Ck0;
        $ETRS['E'] = $CA1 * $nn * $Ck0 + $CE0;

        return $ETRS;
}

Kun nämä saadaan tehtyä, ilmestyy tälläinen hieman sekava kartta kännykkään.

Kun tuota kuvaa tarkemmin katsoon, niin ohjelma lataa karttalaattoja hieman pieleen. Vierekkäiset karttalaatat eivät aivan täsmälleen osu kohdalleen ja siksi kuva on vähän sekava. Syy on (kai) se, että nuo WMS-palvelun laattojen koordinaatiolasku ei ole noista eri koordinaatistoista (WGS-84 ja ETRS-TM35FIN) johtuen ihan niin suoraviivainen kuin miten sen olen tehnyt. Tähän oikeastaan jätin homman, koska ajattelin, että ehkä joku geo-viisaampi osaisi neuvoa, miten jatkaa tästä eteenpäin.

Toivottavasti en tallonut kenenkään varpaille, koska tämä aihe liippaa myös hyvin läheisesti Apps4Finland-kilpailua, jota olen järjestämässä. Tämä kuitenkin osoitti, että tuollaisen ohjelman tekeminen ei ole mahdotonta ja vaikka homma jäi vielä aika pahasti vaiheeseen (esim. zoomauksen ottaminen paremmin huomioon proxyssä), tästä on hyvä jatkaa kenen tahansa ja tehdä kiinnostava ja etenkin toimiva sovellus Androidiin, joka käyttää noita karttoja. Ja tietenkin toivon näkeväni noita sovelluksia myös Apps4Finland-kilpailussakin!

Posted in Android, Apps4Finland, Avoin data | 17 Comments