Over Willy Tadema

open data - open standaarden - open source software - geo-informatie - OSGeo.nl - Open Cultuur Data - Visserijmuseum Zoutkamp - tuinieren - koken - filosofie - houtbewerking - mijn hond Roef

Het bevragen van een WFS in de browser – voorbeelden aan de hand van de BAG-service

Het leek me interessant en nuttig om wat meer te leren over het bevragen van een Web Feature Service (WFS) in de browser in het algemeen, en de WFS van de Basisregistratie Adressen en Gebouwen (BAG) in het bijzonder. Daarom ben ik maar eens in de materie gedoken 😉 Wat ik heb opgestoken, lees je in dit blog. De volgende bronnen waren daarbij erg behulpzaam:

WFS is een interface voor het opvragen van geografische vector data en bijbehorende administratieve data over het internet (zie Wikipedia). Je kunt een WFS bevragen met een HTTP GET of HTTP POST request. Een HTTP GET request (kortweg: GET) is een verzoek aan een WFS om gegevens te retourneren versleuteld in een URL. Een GET voor de WFS van de BAG ziet er zo uit:

http://geodata.nationaalgeoregister.nl/bag/wfs?param1=waarde1&param2=waarde2&...

De drie meest gebruikte GET requests voor het bevragen van een WFS zijn:

  • GetCapabilities
  • DescribeFeatureType
  • GetFeature

Tenzij je een ander formaat specificeert, geeft de WFS antwoord in de vorm van een XML-document.
In onderstaande tekst wordt het gebruik van deze drie requests geïllustreerd aan de hand van de WFS voor de BAG.

Met een GetCapabilities request krijg je snel inzicht in wat de WFS voor mogelijkheden biedt:

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&request=GetCapabilities

Welke lagen bevat de service? In welk coördinatenstelsel worden de features standaard geretourneerd? Wat voor uitvoerformaten ondersteunt de service? Vragen die beantwoord worden in het GetCapabilities document dat de service retourneert.

Als je detailinformatie over een laag (‘feature type’) in de WFS wilt, bijvoorbeeld de namen en gegevenstypen van de attributen, gebruik dan DescribeFeatureType. Door een waarde op te geven voor de parameter typeName geef je aan van welke laag je meer informatie wilt opvragen.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=DescribeFeatureType&typeName=bag:verblijfsobject

Voor de duidelijkheid is in bovenstaand request version=2.0.0 opgenomen, maar strikt genomen is dit niet nodig. Als je de parameter version weg laat, geeft de service standaard de hoogste ondersteunde versie terug. In het geval van de BAG is dat 2.0.0.

Met een getFeature request kun je de geografische objecten (‘features’) en hun bijbehorende administratieve gegevens opvragen. Met de parameter count kun je het maximum aantal features aangeven dat in het antwoord geretourneerd wordt. Voor de BAG-service geldt dat count standaard de waarde 15.000 heeft.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&count=25

Met de parameter sortBy kun je de features in het antwoord van de service sorteren op attribuutwaarden. Met de toevoeging +A of +D kun je aangeven of de waarden in respectievelijk oplopende of aflopende volgorde gesorteerd moeten worden. Let op: bij een WFS die met ArcGIS Server gepubliceerd wordt, werkt de parameter sortBy alléén als de gegevens zijn opgeslagen in een ArcSDE geodatabase.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&count=25&sortBy=bag:identificatie+D

Als je slechts geïnteresseerd bent in één of enkele attributen, kun je het aantal attributen in het antwoord beperken met behulp van de parameter propertyName.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&count=25&propertyName=bag:postcode,bag:woonplaats

De gegevens van een specifieke feature kun je opvragen met de featureId parameter. De waarde die je in het geval van de BAG-service moet opgeven is het gml:id en níet de bag:identificatie!

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&count=25&featureId=verblijfsobject.118285

Door met de parameter bbox een ‘bounding box’ op te geven, vraag je alleen de features op die binnen het opgegeven gebied liggen. Als de gegevens in EPSG:28992 (Amersfoort / RD New) geretourneerd worden, zoals bij de BAG standaard het geval is, geldt bbox=xmin,ymin,xmax,ymax. In het voorbeeld worden alle verblijfsobjecten in een deel van de gemeente De Marne opgevraagd.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&bbox=213089,593892,217076,597981

Het is ook mogelijk om een selectie te maken met behulp van de filter parameter. Het filter om alleen de verblijfsobjecten uit de BAG opgevraagd met postcode 9712 JN is: filter=<Filter><PropertyIsEqualTo><PropertyName>bag:postcode</PropertyName><Literal>9712JN</Literal></PropertyIsEqualTo></Filter>

Als je een filter opneemt in een URL, moet je niet vergeten bijzonder tekens zoals spaties, haakjes en aanhalingstekens te vervangen met behulp van URL encoding. Het maakt het request er jammer genoeg niet overzichtelijker op.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&filter=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ebag:postcode%3C/PropertyName%3E%3CLiteral%3E9712JN%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E

Een ander voorbeeld van het filteren van features op basis van attribuutwaarden is onderstaand verzoek om alleen de verblijfsobjecten in Groningen met huisnummer 4 te retourneren. Het filter is in dit geval: Filter=<Filter><And><PropertyIsEqualTo><PropertyName>bag:woonplaats</PropertyName><Literal>Groningen</Literal></PropertyIsEqualTo><PropertyIsEqualTo><PropertyName>bag:huisnummer</PropertyName><Literal>4</Literal></PropertyIsEqualTo></And></Filter>

Met URL encoding wordt de URL dan:

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&filter=%3CFilter%3E%3CAnd%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ebag:woonplaats%3C/PropertyName%3E%3CLiteral%3EGroningen%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ebag:huisnummer%3C/PropertyName%3E%3CLiteral%3E4%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/And%3E%3C/Filter%3E

Jammer genoeg kun je de parameters bbox en filter niet combineren. Als je het probeert, krijg je een foutmelding: Filter and bbox both specified but are mutually exclusive.

Het is niet eenvoudig om een filter te specificeren conform de officiële specificatie van het OGC. GeoServer maakt het iets makkelijker met CQL filters. CQL staat voor Common Query Language. Het is beter leesbaar dan ‘gewone’ filters, al moet je bij CQL filters ook URL encoding toepassen. CQL filters zijn echter geen onderdeel van de formele WFS-specificatie! De volgende voorbeelden met CQL filters werken, omdat de BAG-service ‘draait’ op GeoServer. Bij een service die wordt ontsloten met ArcGIS Server of Deegree kun je geen gebruik maken van CQL filters.

Het request in het vorige voorbeeld zou je ook kunnen doen met een CQL filter: cql_filter=(huisnummer=4 and woonplaats='Groningen')
Als je een CQL filter opneemt in een URL, moet je niet vergeten bijzonder tekens zoals spaties, haakjes en aanhalingstekens te vervangen met behulp van URL encoding. Het verzoek om alle verblijfsobjecten in Groningen met huisnummer 4 wordt dan:

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&cql_filter=%28bag:woonplaats=%27Groningen%27%20and%20bag:huisnummer=4%29

Met een CQL filter kunt je ook op geometrie filteren. Met dit CQL filter worden alle verblijfsobjecten in een straal van 100 meter rondom het provinciehuis in Groningen opgevraagd: cql_filter=dwithin(bag:geometrie, point(234055 582111), 100, meters)

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&cql_filter=dwithin%28bag:geometrie,point%28234055%20582111%29,100,meters%29

Het is mogelijk om tegelijkertijd te filteren op geometrie – bijvoorbeeld door een bounding box op te geven – en op attribuutwaarden. Het CQL filter voor het opvragen van alle verblijfsobjecten met een logiesfunctie in een door coördinaten begrensd deel van de gemeente De Marne is: cql_filter=((bbox(bag:geometrie, 213089, 593892, 217076, 597981) and (bag:gebruiksdoel='logiesfunctie'))

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&cql_filter=%28bbox%28bag:geometrie,213089,593892,217076,597981%29and%28bag:gebruiksdoel=%27logiesfunctie%27%29%29

De BAG-service retourneert maximaal 15.000 features per request. Maar soms wil je meer features opvragen, dan kun je gebruik maken van ‘response paging’. Vraag eerst het totaal aantal features op dat voldoet aan je zoekopdracht door gebruik te maken van resultType=hits. Vervolgens kun je door slim gebruik te maken van de parameters startindex, count en sortBy in ‘etappes’ alle features opvragen.
In onderstaand voorbeeld wordt het aantal verblijfsobjecten in de woonplaats Groningen opgevraagd. Het aantal wordt geretourneerd in het XML-attribuut numberMatched.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=WFS&version=2.0.0&request=GetFeature&typename=bag:verblijfsobject&cql_filter=%28bag:woonplaats=%27Groningen%27%29&resulttype=hits

De eerste 5.000 verblijfsobjecten in Groningen krijg je retour met het volgende request:

http://geodata.nationaalgeoregister.nl/bag/wfs?service=WFS&version=2.0.0&request=GetFeature&typename=bag:verblijfsobject&cql_filter=%28bag:woonplaats=%27Groningen%27%29&count=5000&startindex=0&sortBy=bag:identificatie+A

De volgende 5.000 verblijfsobjecten krijg je door startIndex=5000 op te geven.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=WFS&version=2.0.0&request=GetFeature&typename=bag:verblijfsobject&cql_filter=%28bag:woonplaats=%27Groningen%27%29&count=5000&startindex=5000&sortBy=bag:identificatie+A

Standaard geeft een WFS het antwoord terug in XML-formaat, maar je kunt ook een andere formaat opgeven met behulp van de outputFormat parameter. In dit voorbeeld worden bijvoorbeeld alle verblijfsobjecten met postcode 9712 JN opgevraagd in CSV-formaat.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&cql_filter=%28bag:postcode=%279712JN%27%29&outputFormat=csv

KML kan ook:

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&cql_filter=%28bag:postcode=%279712JN%27%29&srsName=EPSG:4326&outputFormat=kml

Als je de gegevens wilt opslaan in GeoJSON formaat, vergeet dan niet EPSG:4326 (WGS84) als coördinatenstelsel op te geven met behulp van de srsName parameter. De meeste ontwikkelaars en data analisten verwachten namelijk dat coördinaten in een GeoJSON-bestand in WGS84 zijn.

http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=bag:verblijfsobject&cql_filter=%28bag:postcode=%279712JN%27%29&outputFormat=json&srsName=epsg:4326

Let op: de outputFormat parameter is weliswaar onderdeel van de formele WFS-specificatie van het OGC, maar welke uitvoerformaten beschikbaar zijn, hangt af van de map server die gebruikt wordt. Zo ondersteunt Deegree op dit moment bijvoorbeeld nog geen KML en GeoJSON. De uitvoerformaten waaruit je kunt kiezen voor een bepaalde WFS, kun je opvragen met een GetCapabilities request.

Tot zover. Mocht je nog verbeteringen of aanvullingen hebben, dan hoor ik het graag!

De Winst van Open Data

Vorige week organiseerde de provincie Groningen een symposium met als centraal thema De Winst van Open Data. Keynote-spreker Ton Zijlstra vroeg zich in zijn presentatie hardop af: ‘Kijken we wel door de juiste bril als we op zoek zijn naar de winst van Open Data?’ Voor een bedrijf of instelling zijn Open Data een middel om waarde te creëren, geen doel op zich. ‘Als je weet waarom, dan zie je de impact’, aldus Ton. Niet kijken vanuit een technisch perspectief, maar de belangrijke kwesties die organisaties bezig houden als vertrekpunt nemen. Vorige week vond eveneens De Week van het Digitaal Erfgoed plaats. Startpunt was de presentatie van de Nationale Strategie Digitaal Erfgoed (bekijk de animatie). De belangrijkste boodschap in de strategie: met meer samenwerking, standaardisatie en hergebruik besparen erfgoedinstellingen flink op de kosten en neemt de maatschappelijke waarde van digitale collecties enorm toe. Door erfgoedcollecties online beschikbaar te stellen en onderling te koppelen, bereiken instellingen een groter en nieuw publiek. Direct – bijvoorbeeld via social media – maar ook indirect door informatie als ‘halffabricaat’ te delen met app-bouwers, onderzoekers of andere erfgoedinstellingen. Nieuwe, technologische ontwikkelingen bieden dus grote kansen voor erfgoedinstellingen om (nog) beter invulling te geven aan hun missie en doelstellingen. Dat dit in de praktijk niet meevalt, blijkt uit het persbericht Digitaliseren Nederlands Erfgoed 25 miljoen te duur. Met name het auteursrecht is een groot obstakel. Het verwijderen van technische, juridische en financiële belemmeringen om zo de weg vrij te maken voor het hergebruik van gegevens en het creëren van nieuwe toepassingen. Daar gaat het om bij Open Data. De opstellers van het strategiedocument hebben echter een hoger doel voor ogen. Ze willen de maatschappelijke betekenis van erfgoedcollecties vergroten. Open Data zijn ‘slechts’ een instrument om dat doel te bereiken, maar wél een essentieel instrument. Zoek je in het strategiedocument naar het begrip ‘Open Data’, dan raak je misschien teleurgesteld. Het komt maar twee keer voor. Maar als je beter kijkt, dan vind je tussen de regels door het antwoord op de vraag ‘Waarom Open Data? Wat levert het erfgoedinstellingen op?’ Dan zie je de grote impact van Open Data op de erfgoedsector en wordt De Winst van Open Data meteen duidelijk.

Fietsknooppuntennetwerk NL importeren uit OpenStreetMap

Als adviseur Open Data bij de provincie Groningen krijg ik zo nu en dan de vraag: Kan ik de fietsknooppunten en het routenetwerk ook downloaden als open data? Voor de provincie Groningen is het antwoord: ja. Sinds vorig jaar wordt de fietsknooppunten en het routenetwerk in Groningen beschikbaar gesteld via het Provinciaal GeoRegister met een Public Domain Mark. Dat betekent dat je de gegevens kan downloaden in WMS-, WFS- of SHP- formaat en dat er geen beperkingen zijn voor hergebruik. Je mag er mee doen wat je wilt.

Helaas geldt dat niet voor de rest van Nederland. Via PDOK wordt wel een WMS-service beschikbaar gesteld, maar de mogelijkheden tot hergebruik zijn beperkt door technische en juridische belemmeringen. Een WMS-service stelt niet de ruwe data beschikbaar, alleen maar een kaartafbeelding. Je kunt het fietsknooppuntennetwerk dus wel laten zien, maar er niet mee rekenen. Routes uitstippelen tussen verschillende fietsknooppunten is niet mogelijk.
Bovendien is de licentie waaronder de gegevens beschikbaar worden gesteld volgens de informatie in het Nationaal GeoRegister zeer restrictief: er geldt een doelbeperking. Als je de gegevens wilt gebruiken voor iets anders dan beleid, moet je vooraf toestemming vragen aan Stichting Landelijk Fietsplatform.

Als app-bouwer kun je daar niet zoveel mee. Mijn advies is dan ook: gebruik de gegevens uit OpenStreetMap. Dan beschik je over de ruwe gegevens en is hergebruik geen probleem ongeacht de toepassing (mits je maar aan naamsvermelding doet). Maar hoe haal je het fietsknooppuntennetwerk uit OpenStreetMap?

Het kan op verschillende manieren. Ik laat hier de werkwijze zien die ik het meest eenvoudig vind en die werkt voor heel Nederland. De werkwijze is tot stand gekomen dankzij feedback van leden van het OpenStreetMap NL forum. Heb jij een beter idee? Dan hoor ik het graag :-).

Stap 1: Download netherlands-latest.osm.pbf van http://download.geofabrik.de/europe/netherlands.html.

Stap 2: Download osmconvert van http://wiki.openstreetmap.org/wiki/Osmconvert.

Stap 3: Voer het volgende commando uit:

osmconvert netherlands-latest.osm.pbf -o=netherlands-latest.o5m

Stap 4: Download osmfilter van http://wiki.openstreetmap.org/wiki/Osmfilter.

Stap 6: Voer het volgende commando uit:

osmfilter netherlands-latest.o5m --keep= --keep-ways= --keep-relations="network=rcn" -o=fietsknooppuntennetwerk.osm 

Stap 7: Download en installeer QGIS (versie 2.0 of hoger).

Stap 8Stap 8: Open QGIS. Kies in het menu voor VectorOpenStreetMap → Import topology from XML. Importeer het bestand fietsknooppuntennetwerk.osm dat je in stap 6 hebt aangemaakt. Bekijk de afbeelding voor de juiste instellingen van het OpenStreetMap Import dialoogscherm. Het importeren kan even duren.

Stap 9Stap 9: Exporteer de fietsknooppunten. Kies in het menu voor VectorOpenStreetMap → Export topology to SpatiaLite. Geeft als Input DB file het bestand aan dat je in stap 8 aangemaakt hebt. Selecteer in het dialoogscherm Points (nodes). Klik op Load from DB en vink de tag rcn_ref aan. Bekijk de afbeelding voor de juiste instellingen.

stap 10Stap 10: Exporteer de routes. Herhaal stap 9 maar selecteer nu de Polylines (open ways). Het is niet nodig om te filteren op tag. Zie afbeelding.

 

stap 11Stap 11: Filter uit de fietsknooppunten-laag alle punten waarvoor de rcn_ref tag leeg is. Selecteer de fietsknooppunten-laag in het Layers-panel. Kies in het menu LayerQuery. Voer de volgende query uit (zie ook afbeelding):

rcn_ref IS NOT NULL

stap 12Stap 12: Sla de fietsknooppunten- en routelaag op in het formaat en coördinatensysteem van je keuze. Klik met de rechter muisknop op de kaartlaag en kies in het snelmenu voor Save as. Kies in het dialoogscherm een formaat, bijvoorbeeld ESRI Shapefile of GeoJSON. Als je de gegevens liever niet in WGS84, maar in het Rijksdriehoekstelsel wilt, selecteer dan CRS = Amersfoort / RD New (EPSG:28992). Zie afbeelding.

Natuurijsbanen in OpenStreetMap

Als informatieadviseur van de provincie Groningen kreeg ik een paar maanden geleden de vraag of we, net als de provincie Fryslân, de locaties van Groninger natuurijsbanen als open data beschikbaar konden stellen.

Ik heb uitgezocht of er binnen de provincie gegevens over ijsbanen worden verzameld en beheerd, maar dat is niet het geval. Jammer voor de persoon die het verzoek had ingediend.

Toch liet het me niet helemaal los. Mappers leggen ook ijsbanen vast in OpenStreetMap, misschien biedt dat een alternatief?

Ik heb eerst uitgezocht wat de juiste manier is om een natuurijsbaan te taggen:
leisure = ice_rink
seasonal=yes
sport=skating
name=[naam van de ijsbaan]
operator=[naam van de ijsvereniging of stichting die de ijsbaan beheert]
website=[website van de ijsbaan of ijsverening/stichting]

Soms is een ijsbaan ingetekend als punt en soms als vlak. Het kan allebei. De tags zijn voor beide geometrie-types hetzelfde.

Een aantal ijsbanen in Groningen was onvolledig of onjuist getagt. Dat heb ik eerst gecorrigeerd. Daarna heb ik met de hulp van vrienden en bekenden een aantal ijsbanen toegevoegd.

Helaas is de kaart nog lang niet compleet. Als je een ontbrekende ijsbaan weet, voeg deze dan toe aan OpenStreetMap of stuur mij een berichtje, dan doe ik het voor je.

Met behulp van Overpass Turbo heb ik de ijsbanen in Groningen geëxporteerd als GeoJSON bestand. Na wat bewerkingen in QGIS (ik heb de ijsbanen die als vlakken zijn ingetekend bijvoorbeeld geconverteerd naar punten) toon ik het resultaat in een simpele Leaflet-viewer.

HOT, het Humanitarian OpenStreetMap Team

Mijn eerste kennismaking met OpenStreetMap (OSM) was de TED talk “The Year Open Data Went Worldwide” van Tim Berners-Lee. Vanaf 03:34 vertelt Berners-Lee over hoe de OSM community een belangrijke bijdrage leverde aan de humanitaire hulp na de aardbeving in Haïti in januari 2010. Mensen van over de hele wereld hielpen met het digitaliseren van satellietbeelden in OSM, zodat in een paar dagen tijd een gedetailleerde kaart van het getroffen gebied beschikbaar was voor de hulporganisaties.

Een paar maanden voor de aardbeving was het Humanitarian OpenStreetMap Team (HOT) al opgestart. HOT probeert  een brug te slaan tussen de traditionele humanitaire hulporganisaties en OSM. Het team zorgt ervoor dat in crisissituaties, zoals bij natuurrampen, de OSM-infrastructuur en -community worden ingezet om snel een actuele kaart vrij beschikbaar te stellen. Kate Chapman, directrice van HOT, presenteerde tijdens de eerste dag van State of The Map 2013 de nieuwe ontwikkelingen binnen HOT.

OpenStreetMap Tasking Manager is één van de nieuwe initiatieven. Het is een tool om het werk (fotomateriaal dat gedigitaliseerd moeten worden) te verdelen, mappers te instrueren en inzicht te geven in de voortgang. Ik moet bekennen dat ik zelf wel drempelvrees heb -bij zo’n project wil je toch geen fouten maken- maar één van de deelnemers aan de conferentie in Birmingham met wie ik hierover sprak, verzekerde me dat ik daar niet bang voor hoef te zijn. Het gedigitaliseerde kaartmateriaal wordt namelijk gevalideerd door ervaren mappers. Wanneer ter plekke geconstateerd wordt dat de kaart niet klopt, kunnen correcties bovendien snel en eenvoudig doorgevoerd worden. Dat is nou nét het sterke punt van OpenStreetMap 😉

Een andere initiatief is de website LearnOSM.org. De website bevat handleidingen voor het bijdragen aan en gebruik maken van OpenStreetMap. Er zijn handleidingen voor beginners, gevorderden en experts. Ze worden onder een open licentie beschikbaar gesteld via Github. Er is veel aandacht voor de installatie en configuratie van software op het Windows-besturingssysteem. Dat is fijn, want de community gedomineerd door Linux en iOS gebruikers en er is over het algemeen weinig Windows-documentatie te vinden. De handleidingen zijn jammer genoeg niet helemaal up-to-date, maar dit najaar worden ze geactualiseerd.

Op de tweede dag van de conferentie ging Kate samen met Kristy Van Putten (AIFDR) en Robert Soden (World Bank) dieper in op het werk van HOT in Indonesië. Om goed voorbereid te zijn op natuurrampen als aardbevingen en tsunami’s is het open source risicomodel inaSAFE ontwikkeld en geïmplementeerd in QGIS. HOT leidt lokaal mensen op om de gegevens te verzamelen die nodig zijn als input voor het model. Zo zijn in de afgelopen twee jaar meer dan 800.000 gebouwen in Indonesië opgenomen in OSM. Een indrukwekkende prestatie!

De benodigde gegevens worden overgetrokken van satellietbeelden of in het veld verzameld met behulp van walking papers of een GPS. In Haïti, waar HOT nog steeds actief is, worden tegenwoordig ook drones ingezet om informatie in te winnen. In de presentatie ‘Use of Unmanned Aerial Vehicles in Haiti’ liet Frederic Moine van Drone Adventures een inspirerend filmpje zien ter illustratie.

In één van de conferentiezalen was een pledge poster wall. Het verzoek aan de aanwezigen was om hun persoonlijke OSM-doelstelling voor het komende jaar op te schrijven. Die van bij staat er niet bij, maar dat wil ik graag goed maken: Ik beloof dat ik het komende jaar als mapper een bijdrage ga leveren aan HOT en tenminste drie mensen enthousiast maak om hetzelfde te doen.

Overpass turbo

Tijdens de eerste dag van State of The Map 2013 in Birmingham gaf Richard Cantwell de interessante workshop Introduction to OpenStreetMap for GIS Professionals. Hij vertelde onder andere over Overpass turbo, een handige en relatief eenvoudige tool om via de Overpass API gegevens uit OpenStreetMap te filteren en te exporteren, bijvoorbeeld naar GeoJSON. GeoJSON is een open formaat dat door open source GIS-software zoals QGIS ingelezen kan worden voor verdere analyse en het maken van kaarten.

De afgelopen weken heb ik samen met mijn collega’s bij de provincie Groningen hard gewerkt aan het opschonen van bushaltegegevens. Na afloop van de Richard’s workshop vroeg ik me af hoeveel werk het zou zijn om de bushaltegegevens van Groningen uit OpenStreetMap te halen en deze te vergelijken met de bushaltegegevens in onze interne registratie. Dat blijkt met Overpass turbo een fluitje van een cent.

Je gaat naar de website www.overpass-turbo.eu, zoomt in op Groningen en selecteert met behulp van het gereedschap manually select bbox de gehele provincie. Helaas kun je alleen een rechthoekig gebied selecteren, waardoor je uiteindelijk in de resultaatset niet alleen de Groninger, maar ook Friese, Drentse en Duitse bushaltes krijgt. Dit is echter eenvoudig te verhelpen in QGIS door middel van een filter op de provinciegrens.

Vervolgens komt het meest lastige gedeelte: het opgeven van de juiste tag op basis   waarvan je de nodes wilt filteren. Een tag bestaat uit een key en een value. Voor bushaltes blijken binnen OpenStreetMap verschillende tags te bestaan. Volgens deze wikipagina is de juiste combinatie voor het taggen van een bushalte: platform = transport. In de praktijk blijken de bushaltes in Groningen echter getagt te zijn als highway = bus_stop.

Pas de query in Overpass turbo editor aan zoals in de afbeelding en klik op Run.
Overpass turbo editorHet duurt even, maar dan krijg je een kaartje met daarin alle bushaltes in OpenStreetMap binnen het geselecteerde gebied.

Overpass mapVia Export kun je het kaartje opslaan als PNG afbeelding of in een viewer tonen. Je kunt er ook voor kiezen om de data te exporteren naar een gestructureerd formaat, bijvoorbeeld GeoJSON. Zo makkelijk is het dus 😉

Je kunt de Overpass API overigens ook via XAPI Query Builder bevragen, maar ik vind Overpass turbo gebruiksvriendelijker. XAPI Query Builder biedt je wel de mogelijkheid om de nodes in de resultaatset te bewerken in iD, de online editor voor OpenStreetMap. Dat is een pluspunt.

XAPI Query Builder

Dag 1 – Observe. Hack. Make. (OHM2013)

Ray McGovern werkte decennia lang als analist voor de CIA. Hij is inmiddels gepensioneerd en nu politiek activist. Hij draagt een t-shirt met de tekst “Arrest Bush and Obama” en legt uit dat de Amerikaanse presidenten weinig op hebben met burgerrechten en vrije media. “It’s important to do good, but it’s not enough to avoid evil”, aldus McGovern. “You have to challenge and confront evil!” Even later voegt hij daaraan toe: “It’s nice if you have principles but if you’re not willing to take risks on them, they’re nothing more than a hill of beans!”
Hij vindt dat actie begint bij persoonlijke betrokkenheid en empathie en citeert dominee Kolvenbach: “When the heart is touched by direct experience, the mind may be challenged to change. Personal involvement with innocent suffering, with the injustice others suffer, is a catalyst for solidarity which then gives rise to intellectual inquiry and moral reflection.” Hij legt een zware verantwoordelijkheid bij de verzamelde hackers. “There is no hope without you. You are the great Levellers, with your cyber capabilities.”

Dr. Suelette Dreyfus doet onderzoek naar klokkenluiders. Ze laat tijdens haar presentatie veel statistieken zien. Uit haar studie blijkt onder meer dat minder dan 20% van de ondervraagden er zeker van zijn dat ze voldoende bescherming en steun krijgen wanneer ze misstanden naar buiten brengen. Op de vraag wat het beeld is van klokkenluiders, antwoord 22% “weet ik niet”. Volgens dr. Dreyfus bewijs voor de ambivalente houding van het publiek ten aanzien van klokkenluiders.

Coleen Rowley gaf les aan medewerkers van de FBI over staatsrecht en ethiek. Ze vertelt hoe vóór 9/11 medewerkers geleerd werd om níet te liegen. Na 9/11 veranderde dat naar ‘secrecy to keep us secure’. “All crime is enabled and facilitated by secrecy”, aldus Rowley. Een overheid die niet transparant en controleerbaar is, zal uiteindelijk crimineel gedrag vertonen naar haar burgers. Ze citeert Howard Zinn: “Civil disobedience is not our problem. Our problem is civil obedience.”

De apathische houding en het onvermogen tot handelen van burgers is ook een onderwerp dat Julian Assange aansnijdt in zijn lezing via een live stream met de ambassade van Ecuador in Londen. “In the age of internet ignorance is a personal choice” zegt Assange. Zijn boodschap: Laat je niet bang maken, zorg dat je goed geïnformeerd bent, verenig je en kom op voor je rechten! Ook hij waarschuwt voor de gevaren van een overheid die steeds meer weet over haar burgers, terwijl burgers steeds minder weten over het opereren van die overheid. “If the state is out of control, the amount of crime that is inflicted on you as an individual will be tremendous.”

De sprekers tijdens OHM2013 roepen op tot actie, maar daar is veel moed voor nodig. Assange zegt dat mensen als Bradley Manning, Edward Snowden en hijzelf een belangrijke symboolfunctie hebben. Ik bedenk me dat je soms vergeet dat het tegelijkertijd ook ‘gewone’ mensen zijn, die buitengewone offers brengen. Ze zijn alles kwijt: hun werk, huis, familie en vrienden. Na afloop van de lezing van Assange is er gelegenheid tot het stellen van vragen. Jérémie Zimmermann krijgt het woord en zegt dat hij hoopt dat er een moment zal komen waarop Assange weer lijfelijk aanwezig kan zijn bij evenementen als OHM2013. Hij is geëmotioneerd. Assange legt uit: “Jérémie was asked to become informer against me and didn’t .” Jeremy antwoordt: “Because I’m your friend.”

OHM2013 gaat over onverschilligheid versus persoonlijke betrokkenheid, weg kijken versus verantwoordelijkheid nemen, klakkeloos gehoorzamen versus opkomen voor je rechten, verborgenheid versus transparantie. Maar bovenal gaat het over de kracht van netwerken en vriendschappen.

Klimaatmonitoringsysteem met Arduino

Een paar weken geleden heb ik een Arduino Starter Kit gekocht. Zonder speciale bedoelingen, gewoon voor de lol. Arduino is een open source computerplatform. Het leuke is dat je de Arduino microcontroller kunt programmeren en kunt laten reageren op input uit zijn omgeving door sensoren aan te sluiten. Op basis van de input kunnen zogenaamde actoren aangestuurd worden, bijvoorbeeld een LED, LCD of electromotor.

Samen met Koen en Dirk, jonge vrijwilligers bij het Visserijmuseum Zoutkamp, heb ik inmiddels bedacht wat het eerste project gaat worden: een klimaatmonitoringsysteem voor het museum.

Het Visserijmuseum Zoutkamp is opgenomen in het Museumregister Nederland. Als ‘geregistreerd museum’ moet je voldoen aan strenge kwaliteitseisen, onder andere op het gebied van klimaatbeheersing. Te grote schommelingen in de temperatuur en/of luchtvochtigheid zijn schadelijk voor museale objecten. Volgens museumnorm 31 moet het klimaat doorlopend gemeten worden. De meetgegevens moeten opgeslagen en geanalyseerd worden en bij problemen moeten er adequate maatregelen genomen worden.

Het museum beschikt over één thermo-hygrograaf. Het is een analoog apparaat; het papier wordt regelmatig vervangen en de metingen worden gearchiveerd. Om verschillende redenen is deze oplossing onvoldoende:

  • Eén meetpunt is onvoldoende om een goed beeld te krijgen van het binnenklimaat. Volgens de deskundige van het Museumhuis Groningen moeten we op tenminsten vier verschillende plaatsen in de expositieruimte en het depot meten.
  • Een goede analyse van de meetgegevens is lastig, omdat de gegevens niet digitaal beschikbaar zijn.
  • Vaak constateren we pas achteraf dat de temperatuur of luchtvochtigheid in een bepaalde periode te hoog of te laag was.

Wat we eigenlijk nodig hebben is een klimaatmonitoringsysteem met vier meetpunten, waarbij de gegevens digitaal worden opgeslagen, inclusief notificatie-functionaliteit. Bij uitstek een Arduino-project!

Het idee is om de Arduino te voorzien van een temperatuur- en luchtvochtigheidssensor, een LCD en een ethernet-shield. De klimaatmetingen en het IP-adres zijn af te lezen op het LCD-scherm, maar ook op IP-adres op te vragen via het netwerk. Eind vorig jaar heeft het museum een Synology DS213 aangeschaft. Op de NAS-server draait een webserver. We gaan een web-applicatie bouwen die periodiek op IP-adres de klimaatmetingen uitvraagt en opslaat in een database. Indien de metingen te hoog of te laag zijn wordt een e-mail of SMS verstuurd naar de persoon die verantwoordelijk is voor de klimaatbeheersing.

In een later stadium kunnen we de gegevens ‘remote’ beschikbaar stellen en via een app ontsluiten voor tablets en smartphones. Het zou leuk zijn om interface te hebben waarbij je niet alleen de actuele meetwaarden, maar ook een grafiek van de metingen in het afgelopen etmaal of de laatste week kunt opvragen.

Het zou helemaal geweldig zijn als we de ‘casing’ voor de Arduino met de 3D printer kunnen maken. Ik ben namelijk al een hele tijd op zoek naar een excuus om bij het FabLab Groningen aan de slag te gaan 😉

Maar goed, zo ver is het nog niet. Voorlopig zijn we nog druk met het prototype, waarbij we uitgaan van dit artikel en de onderdelen uit de Starter Kit. Alleen het ethernet shield en de luchtvochtigheidsensor had ik nog niet. Het ethernet shield heb ik ondertussen al gekocht bij Okaphone.

Arduino

De temperatuursensor en LCD doen het al, het ethernet shield zit er al op, maar heb ik nog niet getest. Daar gaan we vanmiddag mee aan de slag.

Waddenwandelen in OpenStreetMap

In mijn vorige bericht deed ik een oproep om mij te helpen het wandelnetwerk Waddenwandelen op te nemen in OpenStreetMap. In dit bericht zet ik op een rijtje op welke manier je een bijdrage zou kunnen leveren.

Mijn verzoek aan wandelaars is om de knooppunten van het netwerk vast te leggen, bij voorkeur in een GPX-bestand. Daarvoor hoef je beslist niet in het bezit te zijn van een speciaal voor dit doel aangeschaft GPS-apparaat. Je kunt ook je smartphone of tablet gebruiken als GPS. Als je in het bezit bent van een iPhone installeer dan bijvoorbeeld de Locations Tagger app. Heb je een Android smartphone, dan zou je de OSMTracker for Android kunnen proberen. Mocht je andere POI’s (points of interest) tegenkomen, sla die dan ook op. Hoe meer interessante informatie, hoe beter! Stuur het GPX-bestand naar friesewoudloper(apestaartje)gmail.com. Dan voeg ik de informatie toe aan OpenStreetMap.

Als je een stapje verder wilt gaan, bewaar dan niet alleen de knooppunten en POI’s, maar ook de gelopen route in het GPX-bestand. Ik upload de routes naar OpenStreetMap, waarna ik ze ‘overtrek’ in OpenStreetMap. Geef indien mogelijk ook aanvullende informatie, zoals de naam van het fiets- of wandelpad, het type verharding of wel/niet toegankelijk voor honden. Die informatie kun je ook aanleveren in de vorm van een schetsje of tekst.

Het snelste (en allerleukste) is natuurlijk om de gegevens zélf toe te voegen aan OpenStreetMap. Daarvoor moet je eerst een account aanmaken. Ga vervolgens naar www.openstreetmap.org, klik op bewerken en geef je gebruikersnaam en wachtwoord op. De Potlatch 2 editor wordt nu gestart. Lees de (Engelstalige) wiki-pagina van Potlatch 2 voor instructies over het gebruik van de editor. Bekijk deze video over het toevoegen van POI’s.

In negen van de tien gevallen is het toevoegen van een knooppunt heel eenvoudig, omdat het punt al als node in OpenStreetMap staat, maar alleen nog niet als Waddenwandelen-knooppunt getagt is.
Zoom in op het gebied waarin het knooppunt zich bevindt en selecteer de betreffende node. Klik op Advanced en tag de node als volgt:
Key=rwn_ref + Value=volgnummer van het knooppunt
Relation=network rwn rwn Waddenwandelen + ID=2807863

Als de node niet bestaat, omdat er een stuk weg of pad mist, dan moet je eerst het ontbrekende deel intekenen. Bekijk deze video over het intekenen van wegen.

Het taggen van de lijnstukken tussen de knooppunten is ingewikkelder. Selecteer de lijnstukken tussen twee knooppunten. Soms is het nodig om bestaande lijnstukken op te knippen, omdat ze verder doorlopen dan het eindknooppunt. Maak een nieuwe relatie aan met de volgende tags:
Key=name + Value=Waddenwandelen
Key=network + Value=rwn
Key=type + Value=route
Key=route + Value=hiking
Key=note + Value=beginknooppunt-eindknooppunt
Relation=network rwn rwn Waddenwandelen + ID=2807863
Tag alle lijnstukken tussen de twee knooppunten met deze nieuwe relatie.
Vergeet niet je edits op te slaan!

That’s it! Het duurt meestal één of twee dagen voordat je de gegevens terug ziet in www.openwandelkaart.nl.

Als je nog vragen hebt, laat het me weten. Uit eigen ervaring weet ik dat het doorvoeren van wijzigingen in OpenStreetMap in het begin best eng kan zijn, maar als je de basics kent en je gezond verstand gebruikt, valt het uiteindelijk best mee.

Waddenwandelen & Open Data

Begin januari zag ik tijdens mijn dagelijkse wandeling met de hond nieuwe bewegwijzering in de vorm van paaltjes en stickers op lantaarnpalen en verkeersborden. Bij navraag bleek het om het Waddenwandelen te gaan, een aaneengesloten netwerk van 1200 km aan wandelpaden in de kop van Noord-Holland, Friesland en Groningen.

Ik ging op zoek naar een kaart van het wandelnetwerk en kwam al snel terecht op de Waddenwandelen-website. De website biedt de mogelijkheid om in een kaart-viewer het netwerk te bekijken en eigen routes samen te stellen. Helaas kun je deze routes niet als GPX-bestand downloaden en werkt de print-functionaliteit (nog) niet. Naast de website zijn er ook een iPhone en Android app. Die zien er goed uit en geven je de mogelijkheid om routes offline te bekijken op je smartphone, maar ook hier geen optie om de data te gebruiken in combinatie met je eigen hard- en software, zoals de Garmin eTrex die ik zelf gebruik voor lange wandelingen.
Tenslotte zijn er papieren kaarten van Falkplan. Deze kosten 9,10 euro per stuk. Er zijn in totaal vijf Falk-kaarten voor het Waddenwandelen-netwerk. Dat betekent dat je ruim 45 euro kwijt bent als je het complete netwerk op papier wilt.

Het promoten van het Wadden- en Lauwersmeergebied, bijvoorbeeld door het realiseren van een wandelnetwerk, ondersteun ik van harte. Ik maak me echter wel zorgen over of de projectresultaten van Waddenwandelen toekomstbestendig zijn. De bewegwijzering bestaat voor een groot deel uit stickers op straatmeubilair. Hoe gaat dat straks bij vernieling of vervanging? Zijn daar afspraken over gemaakt met de beheerder van de openbare ruimte? En hoe worden wijzigingen in het netwerk doorgevoerd in de brondata en gepubliceerd via de diverse kanalen, wanneer het project straks afgelopen is?

De knooppunten en routes zijn niet beschikbaar als open data. Dit betekent dat je de gegevens niet kunt downloaden vanaf het internet en dat de auteursrechten hergebruik uitsluiten. De gegevens zijn alleen op te vragen via door het project gedefinieerde en ontwikkelde kanalen: de Waddenwandelen-website, de apps of de Falkplan-kaarten.
Stel je wilt als toeristische ondernemer de informatie overnemen op je website of in je folder. Of je bent uitgever en je wilt een leuk artikel wijden aan het wandelnetwerk met een overzichtskaart er bij. Of je bent net een kleine startup begonnen en denkt dat je een véél coolere Waddenwandelen-app kunt bouwen dan de bestaande. Dat gaat allemaal niet lukken, omdat je de gegevens niet kunt gebruiken. Een gemiste kans, zeker als je bedenkt dat het hele project gefinancierd is met publiek geld (2,9 miljoen euro). Door de gegevens wél beschikbaar te stellen aan Falkplan BV en niet aan andere ondernemers, is er bovendien sprake van concurrentievervalsing.

De website en app maken overigens gebruik van OpenStreetMap, een topografische kaart die is gemaakt door duizenden vrijwilligers over de hele wereld. Het is een voorbeeld van crowdsourcing. OpenStreetMap is in tegenstelling tot het Waddenwandelen-netwerk wél beschikbaar voor hergebruik, zonder dat daar kosten aan verbonden zijn. Gratis betekent niet dat er geen voorwaarden zijn: bronvermelding is verplicht. Helaas is dit door het project over het hoofd gezien.
Wat mij betreft is er ook een ‘morele verplichting’ om niet alleen te nemen, maar ook te geven. Als je de kaart op de Waddenwandelen-website goed bekijkt, zie je dat sommige fiets- en wandelpaden ontbreken in OpenStreetMap. Naar mijn idee zou het project dat moeten repareren of op z’n minst de data beschikbaar moeten stellen, zodat de vrijwilligers van OpenStreetMap de ontbrekende gegevens op een efficiënte manier kunnen toevoegen. Zo wordt OpenStreetMap steeds beter. Daar profiteert niet alleen Waddenwandelen, maar iederéén van.

Ik heb Landschapsbeheer Fryslan een mail gestuurd waarin ik mijn zorgen over de duurzaamheid van de projectresultaten kenbaar maak en de vraag stel of de knooppunten en routes alsnog beschikbaar komen als open data. In afwachting van het antwoord ben ik begonnen om de gegevens zelf maar toe te voegen aan OpenStreetMap. Een tijdrovende, maar wel leuke klus, waar ik wel wat hulp bij kan gebruiken 😉 Je kunt de voortgang volgen via de OpenWandelkaart.

Uiteindelijk zou ik het liefste alle wandel-, fiets-, auto- en kanoroutes in onze regio op deze manier in OpenStreetMap willen vastleggen. De routes kunnen dan gedownload worden en gebruikt worden in combinatie met verschillende apparaten en programma’s. Het is ook mogelijk om er papieren kaarten van te maken (maar daarover in een latere blogpost meer). Tenslotte kunnen de gegevens gebruikt kunnen worden door app-bouwers, uitgevers, toeristische informatiepunten, enzovoorts voor hun eigen (commerciële) doeleinden. Zo halen we het meeste rendement uit de informatie en hebben zoveel mogelijk mensen er plezier van.

Ik geloof niet dat het een bewuste keuze was van het project om de gegevens níet als open data beschikbaar te stellen. Wat ik wel denk, is dat er bij het opstellen en uitvoeren van projectplannen en het toekennen van subsidie vaak te weinig aandacht is voor de duurzaamheid en het hergebruik van de gegevens die binnen het project worden verzameld. Publicatie van de projectresultaten als open data verhelpt dit probleem voor een groot deel.

Update 18 maart 2013:
Eén van mijn Twitter-volgers attendeerde me op plannen om de gegevens op termijn op te nemen in de koepeldatabase Digitale Toeristische Informatie, waarna de gegevens via een API vrij beschikbaar zouden zijn.

Daarnaast ontving ik vandaag het bericht dat Falkplan bedrijven en instellingen tegen betaling de mogelijkheid biedt om zich online te presenteren in de knooppunten-kaart die zij via het internet gaan aanbieden. Begrijp me goed, ik vind het geen probleem dat Falkplan probeert langs verschillende wegen geld te verdienen aan het Waddenwandelen-netwerk. Integendeel. Waar ik wél problemen mee heb, is dat de gegevens exclusief verstrekt zijn aan Falkplan, waardoor andere bedrijven niet dezelfde kansen krijgen.