Dataverkenning AppsForNoordHolland: INSPIRE


The Dutch province of Noord Holland and Dutch open data advocates HackDeOverheid are holding an open data app competition, with a coding event happening next week at a very special venue. I was asked to shed some light on the geospatial data sources made available, which is what this post in Dutch is about. More info at the website.

Komende zaterdag vindt aan het andere einde van de wereld – nou ja, voor mij dan – de eerste publieke bijeenkomst code event in het kader van Apps For Noord-Holland plaats. De provincie Noord-Holland en een handvol andere overheden en semi-overheden hebben databronnen opengesteld waarmee we aan de slag kunnen.

Veel van die data is geografisch – de gegevens hebben betrekking op een specifieke plek; een punt, een lijn, een vlak. De wereld van de geodata is een beetje een aparte; als je met geodata wat wil aanvangen moet je een klein beetje weten van de specifieke bestandsformaten en zaken als coordinaatsystemen en projecties. Daar zijn gelukkig uitstekende bronnen voor, waarvan ik er in de loop van deze dataverkenning een paar zal geven.

Kijkend naar de beschikbare databronnen ligt bij de meeste voor de hand wat je kunt verwachten: zwemwaterkwaliteit, bedrijventerreinen, wegwerkzaamheden. Ik neem er in deze verkenning een beetje een obscure uit: INSPIRE. Eerst maar eens proberen om in een paar zinnen uit te leggen wat INSPIRE is. Daarna gaan we naar de data kijken. En passant geef ik wat tips voor (open source) software om het bekijken en verwerken van geodata behapbaar te maken – ook voor niet-GISsers.

INSPIRE

In 2007 heeft de Europese Commissie de INSPIRE-richtlijn vastgesteld. Hierin wordt bepaald dat alle lidstaten landsdekkende, actuele data beschikbaar moeten stellen over 34 thema’s, die een breed spectrum beslaan van geografische namen tot geologie. Het doel van INSPIRE is om de beleidsvorming over mileu-gerelateerde thema’s te ondersteunen, maar de gegevens zijn in principe voor iedereen beschikbaar. Niet allemaal tegelijk trouwens; de thema’s die onder Annex I vallen moeten eind volgend jaar beschikbaar zijn, maar de thema’s die onder Annex III vallen uiterlijk pas in 2019. Daar kopen we dus nog even niks voor, maar de lidstaten beginnen al wel met Annex I-thema’s over de brug te komen. Bijvoorbeeld dus Noord-Holland, waar we nu naar aan het kijken zijn.

Kaartservice schmaartservice

Je kunt de data volgens opgave hier bekijken in een interactieve kaartservice. Een beetje geduld is wel gevraagd, ik moest ruim 10 seconden wachten op mijn kaart. Verplaatsen en inzoomen gaat daarna wel wat sneller.

Zo’n kaartservice is geinig om de data even snel te bekijken, maar er zit geen legenda bij en je kunt de data vanaf hier ook niet downloaden of verder gebruiken. Laten we deze webpagina dus maar laten voor wat-ie is en de data downloaden op de datapagina. Ongeduldig? Hier (32MB .zip) is een directe link.

Als we het ZIP-bestand uitpakken krijgen we een brij aan bestanden. Tijd voor een spoedcursus SHAPE – dat is het formaat waarin we deze data geleverd krijgen.

SHAPE

SHAPE-bestanden – formeel ESRI Shape naar de softwarebouwer die het formaat heeft ontworpen als uitwisselingsformaat voor geodata – kunnen door alle GIS-software worden ingelezen. Het is daarmee een universeel uitwisselingsformaat. Met GIS-software bedoel ik dan de software die professionals gebruiken. Google Maps en Google Earth kunnen er niet rechtstreeks wat mee. Dat is meteen ook een van de belangrijkste beperkingen. Tegenwoordig komen formaten als KML en GeoJSON meer in zwang onder de neogeografen. Omzetten is gelukkig niet zo’n probleem, dat zien we straks.

De naam ‘Shape-bestand’ is eigenlijk misleidend. Een ‘Shape-bestand’ bestaat uit minimaal drie bestanden die onlosmakelijk met elkaar zijn verbonden, en nog een stuk of wat optionele bestanden:

  • Data.SHP – hierin zit de eigenlijke geodata: lijnen, punten, vlakken (‘e’en soort per Shape-bestand).
  • Data.DBF – hierin vind je de ‘attributen’, de metadata voor elk object. Voor een bestand met landgebruik zou je hierin bijvoorbeeld een veld ‘type’ kunnen aantreffen met waarden als ‘industrie’, ‘winkels’, ‘wonen’. De attributen worden opgeslagen in het oeroude Dbase-formaat met alle beperkingen (veldnamen maximaal 8 karakters bijvoorbeeld) van dien.
  • Data.SHX – dit bestand is een index op de objecten in het SHP-bestand, vergelijkbaar met een index op een gewone database. Dit bestand zorgt ervoor dat het bevragen van de data efficienter gaat.

Verder is er nog een hele ris optionele bestanden behorend bij ‘een Shape-bestand’ die vooral door specialistische software worden gebruikt. Ik laat die even voor wat ze zijn, behalve eentje die belangrijk is om iets van te begrijpen:

  • Data.PRJ – dit bestandje bevat een zogenaamde projectiestring, waarin wordt gedefinieerd hoe de driedimensionale aarde op een tweedimensionaal vlak wordt geprojecteerd. Er bestaan honderden verschillende projecties en bijbehorende coordinaatstelsels. In Nederland wordt het RD-stelsel gebruikt. Wereldwijd kom je meestal ‘Plate Carree‘ of ‘Spherical Mercator‘ tegen. Het omrekenen tussen projecties is meestal een van de eerste struikelblokken voor mensen die voor het eerst met geografische data werken.

En dan nu de data…

Goed, hehe, zullen we dan nu eindelijk eens naar de data gaan kijken? De eerste vraag is hoe dan. Met Google Earth kun je alvast geen Shape-bestanden openen. Gelukkig biedt de open source-wereld een hele goede oplossing: Quantum GIS, of kortweg Qgis. Dit gratis pakket kan 80% van de dingen die grote dure GIS-pakketten van vele duizenden euroos kunnen. Bij die 80% hoort zeker de functionaliteit die wij nodig hebben. Ik ga een paar dingen laten zien:

  • Qgis downloaden en installeren
  • Data Inladen
  • Classificeren
  • Projectie instellen
  • Exporteren in een bruikbaar formaat

Daarmee zou je genoeg bagage moeten hebben om deze – en ook andere – geodatabronnen te beoordelen en naar je hand te zetten.

Qgis downloaden en installeren

Quantum GIS is er in smaken voor Windows, Mac en Linux. Je kunt de nieuwste versie oppikken van http://www.qgis.org/. Er is geen automatische update-functionaliteit, dus als je Qgis vaker gaat gebruiken moet je af en toe eens terugkomen voor de nieuwste versie. Mijn ervaring is dat dat wel de moeite waard is.

Installeer Qgis volgens de instructies en starten maar.

Als eerste zie je een leeg scherm. Geen wizard of niks. Je bent meteen in het diepe van een GIS-pakket. Links is ruimte voor de kaartlagen. In een GIS wordt een kaartbeeld altijd opgebouwd uit lagen. Achter elke laag (layer) gaat een dataset schuil. Dat kan een bestand zijn of een database-tabel. Lagen kunnen elkaar overlappen – dat is zelfs heel gebruikelijk. We zullen zo zien hoe dat uitpakt. Laten we maar wat lagen gaan toevoegen.

Data inladen

Een GIS kent twee soorten lagen: raster en vector. Rasterlagen bestaan uit plaatjes; vectorlagen bestaan uit geometrische definities van lijnen, punten en vlakken. Photoshop versus Illustrator. Shape-bestanden zijn altijd vectorlagen. Kies dus uit het menu Layer → Add Vector Layer…

Je kunt meerdere lagen ineens toevoegen, zodat je in een klap alle zestien Shapes uit de INSPIRE-dataset van Noord-Holland op je scherm hebt – wel snel maar visueel wordt het nogal een zootje. Voor nu beginnen we er dus maar eens met eentje: DPDATA_geluid_prov_wegen.shp. Door het glanzende gebrek aan databeschrijvingen moet ik wat aannames doen op basis van de bestandsnaam. Ik denk dat het gaat om geluidscontouren van de provinciale wegen.

De kenner weet dat het hier om Noord-Holland gaat, maar verder zijn we nog niet zo gek veel wijzer. We kunnen een paar eenvoudige trucjes uithalen om iets meer over de data te weten te komen. Ten eerste kan je dubbelklikken op de naam van de laag in de linkerhelft van het scherm. Je krijgt dan een informatievenster met verschillende tabs, waaronder de attribuutvelden en de metadata. Ook kun je afzonderlijke objecten inspecteren; zoek naar het pijltje met ‘i’ in de knoppenbalk bovenaan en selecteer een object in de kaart. Je krijgt een venster met de attributen voor dat veld. Een addertje onder het gras is hier dat je alleen objecten kunt selecteren van de actieve laag – dat is de laag die links geselecteerd is.

Dit is allemaal leuk en aardig, maar bij een grote hoeveelheid data zoals we hier hebben krijg je er met deze tools nog geen gevoel bij. Het al genoemde gebrek aan beschrijvende gegevens bij de data noopt tot wat meer grasduinen in de data. Dat brengt ons bij de volgende stap: wat orde in de chaos aanbrengen.

Classificeren

Laten we eens gek doen en alle lagen ineens inladen. Dat duurt even – althans op mijn laptopje. Eenmaal ingeladen kun je zien dat Qgis alle lagen een willekeurige kleur heeft gegeven. Aangezien lagen elkaar overlappen zie je niet eens alle data, maar het is al een beste soep.

Met de vinkjes naast de lagen kun je individuele lagen zichtbaar en onzichtbaar maken. Je kunt lagen in de lijst ook verslepen naar een hogere of lagere positie; ze worden dan ook in de kaart verder bovenop of onderop getekend. Maar daarmee wordt het alleen maar een anders uitziende chaos. Het toverwoord om daar een einde aan te maken is classificeren!

Classificeren is het afhankelijk maken van de stijl (vulkleur, lijn, arcering) van de waarde van een van de attributen. Stel, je hebt een attribuut ‘hoogte’, dan kun je die laag classificeren zodat lager gelegen gebieden groen ingekleurd worden en hoger gelegen gebieden bruin. Je kunt op twee manieren classificeren: op individuele waarden – nuttig bij beschrijvende attributen, zoals type (denk aan wonen, industrie, winkels), of op intervallen voor numerieke attribuutwaarden zoals hoogte of bevolkingsdichtheid.

De magie schuilt in het venster met lageneigenschappen dat we al eerder tevoorschijn toverden. Hierin vind je de tab ‘Style’, die standaard op ‘Single Symbol’ staat. Als we eens kijken naar de laag met geluidscontouren die we al eerder bij de horens hadden, dan leent die zich uitstekend voor een classificatie in intervallen. Roep de eigenschappen voor die laag op, selecteer de ‘Style’ tab en selecteer ‘Graduated’ in plaats van ‘Single Symbol’. Verander ook de instelling ‘mode’ van ‘Equal Interval’ in ‘Natural Breaks’. Klik nu op ‘Classify’ en de voorgestelde classificatie op basis van de gemaakte instellingen komt tevoorschijn. Als je deze bevestigt wordt ook het kaartbeeld bijgewerkt en zie je een fraai kleurverloop. Zoom eventueel een beetje in om het beter te zien.

Misschien denk je ‘allemaal Spielerei’ – maar dat is het zeker niet! Een goede visualisatie van de data is essentieel om een idee te krijgen van het verhaal dat de data vertelt. Dat verhaal is de basis voor jouw gouden app-idee en heeft bijna altijd een verrassende plotwending. Die ontvouwt zich pas als je wat gaat spelen met de data, combineren, visualiseren. Dat is wat we nu doen. Dit is het resultaat van mijn grasduinsessie van eerder vandaag:

Hier kun je dit resultaat als Qgis-project downloaden. Als je dat bestand kopieert naar je map met INSPIRE-Shape-bestanden en opent in Qgis krijg je als het goed is precies deze visualisatie op je scherm. Als het niet werkt moet je waarschijnlijk paden aanpassen in het projectbestand. Zoek naar dergelijke regels:

<datasource>/home/mvexel/Downloads/ShapesInspire/DPDATA_CHW_ALG_VLAKKEN.shp</datasource>

Vervang waar nodig. Maar ik denk dat je die tijd beter kunt besteden aan zelf prutten met de data eerlijk gezegd.

Projectie instellen

Goed, terug naar het saaie werk. Als je goed hebt opgelet heb je misschien gezien dat de Shape-bestanden van de provincie Noord-Holland geen .PRJ-bestanden hebben. Foei Provincie! Hoe kunnen we zonder berschrijvende gegevens of .PRJ-bestand nu weten welke projectie de bestanden hebben? Dit is essentiele informatie bij een geodatabestand.

De context en mijn ervaring vertellen me dat de provincie het Nederlandse RD-stelsel heeft gebruikt, maar dat had er best ergens bij mogen staan. We moeten dit nu eerst aan Qgis vertellen, voordat we opdracht kunnen geven om de data naar een andere projectie om te rekenen en te exporteren.

Ook dit gaat in het venster van de laag-eigenschappen – ja, we moeten dit per laag instellen. Dit gaat met de instelling ‘Specify CRS’ in de ‘General’ tab. Stel daar in dat de laag in ‘EPSG:28992 – Amersfoort / RD New’ (sic) is gedefinieerd.

Exporteren in een bruikbaar formaat

Hier gaat het uiteindelijk allemaal om! We willen de data in zo’n formaat dat we er in onze webapplicatie, Android- of iPhone-app wat mee kunnen aanvangen. Mijn geinformeerde gok zegt dat het Shape-formaat niet voldoet, maar bijvoorbeeld KML wel. Laten we dus proberen de data naar dit formaat te exporteren.

Er is nog meer aan de hand: naast het juiste bestandsformaat is ook de juiste projectie essentieel! Als je jezelf geen gedonder op de hals wilt halen later bij het coden van je app – en gedonder met projecties, dat wil je niet – dan zorg je nu voor de juiste projectie van je data. De brave borsten van de provincie hebben keurig de Nederlandse RD-standaard aangehoden voor deze dataset – overigens niet in overeenstemming met de INSPIRE-richtlijn, maar dat vlug terzijde. Wij willen voor onze app graag de Google-standaard Spherical Mercator (of de oude standaard Plate Carree, de procedure is hetzelfde).

Selecteer eerst de laag die je verder wilt gaan gebruiken en vervolgens uit het menu Layer → Save as…

Hier kiezen we een doelbestand, KML als uitvoerformaat, en we specificeren de projectie als ‘Google Mercator’. Gebruik de zoekfunctie – het is een lange lijst met projecties! Geen wonder dat het, ook voor ervaren GISsers, een bron van verwarring blijft.

Druk nu op OK en je KML wordt gebakken!

Open het resultaat in een ander programma – bijvoorbeeld Google Earth – om te testen of het allemaal een beetje klopt:

Let niet op mij – ik moet nog iets instellen met fonts geloof ik. Maar het gaat erom dat de data klopt! Merk op dat de fraaie kleurtjes etc. niet mee zijn gekomen. Dat kan misschien wel maar daar gaat het niet om. Jouw app zal de data misschien helemaal niet willen laten zien, maar bijvoorbeeld gebruiken als onzichtbare drempel terwijl je je met je telefoon door het land verplaatst, of om een waarde te berekenen op basis van je huidige lokatie. En als je wil visualiseren, zal jouw kaartframework daar weer eigen voorzieningen voor hebben.

Mooi werk! We hebben nu KML-data in een projectie waar we allemaal wat aan hebben.

Conclusie

Pfoe. Het is uitgedraaid op een hele GIS-tutorial. Dat was helemaal niet de bedoeling maar wel leuk om te doen! En volgens mij ook nuttig. Met deze skills kun je een heleboel veel voorkomende uitdagingen met geodata te lijf. Veel succes komende zaterdag en daarna met de App-competitie!

Meer informatie

  • Een handleiding voor Qgis vind je hier.
  • Als je eens een projectie moet opzoeken, dan doe je dat op SpatialReference.org
  • Andere open source GISsen die ik ken zijn GRASS, gvSIG en uDig, maar ik gebruik zelf het liefste Qgis vanwege stabiliteit en toegankelijkheid. Een nog grotere lijst vind je hier.
  • Wil je geodata snel en makkelijk op het web beschikbaar maken? Kijk dan zeker eens naar de OpenGeo Suite. Deze link is naar de gratis Community-editie maar er is ook een Enterprise-editie met support enzo.
  • Over projecties kun je eindeloos lezen. De documentatie van Google Earth bevat een toegankelijk verhaal over projecties en datums (daar hadden we het nog niet eens over gehad…)

Informatiereservaten


Waar maken locals (blauw) en toeristen (rood) foto's van Londen? Een deel van het sociale informatielandschap in beeld gebracht door Eric Fischer / http://www.flickr.com/photos/walkingsf/4671589629

Op zoek naar de nieuwe leegtes in de stad en hun betekenis.

Een artikel op de website van Mediamatic – eigenlijk een pitch voor een nieuw idee en daarom daar en niet hier.

De sociale media zorgen voor een informatierevolutie en -explosie – maar niet overal. De stad kent informatiereservaten, plekken waarover niet getweet, geflickrd of geblogd wordt. Waar zijn die plekken en waarom bestaan ze?

Lees de hele pitch hier.

Volgens mij kun je fan worden van de pitch, maar ik weet niet of dat wat uitmaakt voor mijn kans om het idee te mogen pitchen.

Als je mee wil werken aan het realiseren van dit idee, graag! Ik heb datapornografen en datatovenaars nodig!

Open OV-data: niet in 2015, maar nu!


This is a post in Dutch arguing the need for open transit data in the Netherlands. A version in English may or may not follow.

In dit filmpje wordt met een aantal sprekende voorbeelden duidelijk gemaakt waarom actuele en betrouwbare gegevens over verkeer en – in het bijzonder – openbaar vervoer vrij beschikbaar zouden moeten zijn. Open data leidt tot innovatie, tot meer bronnen waar je als burger voor informatie terecht kan, en daardoor betere verplaatsingskeuzes en veiliger verkeer.

Open data over openbaar vervoer en verkeer is op steeds meer plaatsen werkelijkheid aan het worden. In de VS zijn al flink wat voorbeelden te vinden: volgens de website citygoround.org hebben 114 van de meer dan 800 aanbieders van OV in de VS open data beschikbaar. Hieronder zijn MTA in New York en het Massachussets Department of Transport die in het filmpje voorkomen.

In Europa gaat het er, in weerwil van de goede bedoelingen van de Europese Commissie die er mooie plannen en dure congressen aan wijdt, nog niet zo voortvarend aan toe. Londen heeft had een feed met live-informatie over de Underground. Op nationaal niveau heeft Groot-Brittanië grote plannen met open data: er is een dataportaal dat feestelijk werd geopend door de vader van de hyperlinked informatie: Tim Berners-Lee. Sir Tim maakte zich trouwens in een TED-talk al sterk voor een wereld van open data.

Verder is het in Europa met een lampje zoeken naar open data over transport. Een korte zoektocht op het internet levert nog wel wat op. De Franse stad Rennes heeft een open OV-data API. Er zijn vast nog wel een paar voorbeelden te vinden. Maar niet in Nederland. Nee – hier willen we het in één keer grondig aanpakken, met een Nationaal Datawarehouse Openbaar Vervoersinformatie. De aanbesteding – het was bijna onderhands aan 9292ov gegund – komt er volgend jaar, en dan kan worden begonnen met bouwen – en polderen om alle OV-bedrijven zover te krijgen dat ze hun gegevens afstaan. In 2015 moet het allemaal af zijn. En of er dan een open API komt op die gegevens, dat weet zelfs mevrouw Huizinga niet.

Ondertussen gaat de echte wereld gewoon door. Met mooie dingen maken op open data die wel bestaat. En wij sukkelen maar voort met een OV-reisinformatiewebsite waar we tien jaar geleden al niet trots op waren. Daarom zou ik willen zeggen tegen de GVBs en de Connexxions van dit land: doe er gewoon niet aan mee, huur een paar developers in en publiceer je eigen open datafeeds. En ga dan, net als de mensen van de Newyorkse metro en het Massachussets Department of Transport, in je luie stoel zitten. De creatieve toepassingen, die je zelf nooit had kunnen bedenken, komen dan heel erg vlug. Als jullie zorgen voor de open data, dan zorg ik voor een unconference die tot de laatste stoel gevuld is met creatieve mensen die staan te popelen om geweldige OV-apps te gaan maken. Deal?