Pieter Vander Vennet's Diary

Recent diary entries

Hey all,

In the past month, MapComplete was part of Open Summer of Code where 4 students and myself did make a lot of improvements and a new theme.

With this diary entry, I’d like to give you some insights in what we’ve done the past 4 weeks.

What is Open Summer of Code

Open Summer of Code (or OSOC) is a programme organized by Open Knowledge Belgium, which is a small belgian NGO that promotes Open Source and Open Data.

For OSOC, they search clients (organizations or governmental institutions) which have an interesting problem that they want solved and with budget to pay a team of about 4 students.

These 4 students will be guided by a coach (such as me) to make sure something useful comes out of it.

The actual problems are varied. We’ve had a planning tool for building new homes, a calendar application based on SOLID, a tool to discover research papers, …
The bottom line is that data must be open and that all produced software and tools will be open sourced. If possible, the programs should reuse existing tools and datasets, such as OpenStreetMap or wikidata.

OnWheels: the wheelchair accessibility map

One of the projects this year was paid for by BOSA (a belgian gov organization) requested by OnWheels - a belgian application which helps wheelchair users to navigate the world. They have a database of shops, restaurants and other amenties together with some info about them, such as name, contact details and opening hours, but also information about the width of the door, the height of the kurb at the entrance, …

During the past years, the idea of opening this data has grown within OnWheels, for various reasons. By opening the data, more people can reuse it. Furthermore, by switching to OSM, the cost of maintaining this data is shared amongst more people.

However, making the switch is not easy. With the OSOC-project, we wanted to create a first version of how an OnWheels 2.0 might work.

Whom is this app for?

During our scoping sessions, we identified three groups of people who will be interacting with this app:

  1. People with reduced mobility
  2. Data contributors
  3. Users which might export or analyze the data

People with reduced mobility

The first group of users is the obvious group - they are the main group of users and should be able to get the information they need quickly and easily. They include wheelchair users, but many more groups of people are served by having good data; including people without a disability. In a way, people with e.g. a stroller can benefit from this information as well.

Data contributors

The second group of people are the data contributors. They include the casual mapper, the group of people who do a mapathonn (e.g. as a teambuilding) to a municipality who has a dataset lying around that they want to import.

Data reusers

The last group are the data reusers, whom want to reuse and analyze the data. A typical example here is a government or municipality who wants to create a report about the accessibility in their city.

What is good wheelchair accessibility data?

OSM has a long tradition of mapping wheelchair-accessibility with wheelchair=*. As it turns out, this is rather limited. Some wheelchairs are wider then others, some wheelchairs are pretty long (e.g. wheelchairs with a third wheel in front; electric scooters often used by old people, …).

Some wheelchair users can cross big kerbs (e.g. by getting up, stepping over, lifting their wheelchair over the kerb and sitting down again), whereas other people with reduced mobility might not be able to cross a kerb of even 2 cm.

In other words, we want more detailed information!

This also raises an important data question. Should we add this information on the POI of the shop, on the enclosing building or on the door? We decided to add the information on the individual door objects. For example, the shop might move, but the door will stay for the next shop. Furthermore, a building (and thus a shop) might have multiple entrances with different properties… By keeping this information on the doors, the data model stays pretty clean.

Mapathon/immersive session

We also tested this in real life, by going out with the team in wheelchairs for a stroll through the city. Quite an adventure, especially taking the subway… You can find a movie about it on the project site.

The features

With these three groups of users in mind, we set out to create an application which served all of them.

Of course, MapComplete already goes a long way serving these groups. The main focus lay thus on creating a mapcomplete-theme for wheelchair users, with a few extra needed features on the sides.

Layer: Entrances

The first important layer where we all deal with are entrances. For wheelchair users, they are very important: if the entrance is too small or the kurb to high, it becomes an insurmountable obstacle.

Indoor navigation and level selector

The first major, new feature is the level selector. When there are features in view over multiple levels, an elevator will appear on the right where users can select which level they want to view.

In tandem, a layer showing indoor mapping features (such as rooms and corridors) was developed.

When mixing the indoors layer, entrances, walls_and_buildings and pedestrian_paths-layers, we get a basic indoor viewer. A good testing ground is the building we were at during the project.

_NB: this indoor viewer replaces the previous theme ‘entrances’

A dash of magic

Having an indoor viewer is cool, but doing some automatic analysis of the data makes all the difference.

The walls_and_buildings received an update. Every building-feature will calculate which entrance-objects are located within or on the edge of the building. These can be neatly shown on the building, giving an neat overview:

Layers: Toilets, reception desks, elevators and some more layers

Other important features for wheelchair users are toilets, reception desks and elevators. The toilet layer received some extra questions to gather data relevant for people with reduced mobility; and a layer with reception desks and elevators was added.

The elevator layer asks for information about the physical size of the elevator and offers the possibility to mark an elevator as broken or closed which, sadly, is often the case as we noticed during our wheelchair trip .

The kurbs-theme got some improvements too.

At last, a hotel layer was added as well to have some feature parity.

Features for data reusers

Last year, a feature to download the current view (as geojson or CSV) was already added (even though this feature is disabled by default - it can be enabled by adding an URL-parameter or by enabling it in the theme config).

For the professional data reusers, a ‘dashboard’ was added as well, where some stats can be seen in the blink of an eye.

Importing data

To import data, a layer to read maproullette tasks has been created which works similar to the import notes. More information on that will come soon.

Mixing it together

All these layers and features are mixed together in the OnWheels theme

More magic

At last, the onwheels-theme also ‘steals’ the doors-overview from the enclosing building-layer. Clicking a feature within a building with doors, will reveal the information about those doors.

More info

More info on the project page:

Some other changes

The shops theme has received an update as well. I ~~stole~~ parsed the id-tagging-scheme-files and extracted the different shop types with their icons. As a result, the shops how have very nice individual icons.

As scrolling through a long list (~160) of options became cumbersome, I did implement a new way of presenting this view which offers a searchable list of options.

In the mean time, the educational theme has launched. This one features a list of languages that one can choose as school language. This list was queried from Wikidata and is very long (>1000 entries) - immediately breaking this new searchable options tool… It was amended to only show the official languages of the country the school is located in (again: wikidata info and a bit of magic). If the school still uses another language to teach, searching will probably reveal this information.

And, as usual, many translations came in and some miscellaneous bugfixes and question updates were added as well.

Towards unified tagging of schools

Posted by Pieter Vander Vennet on 8 June 2022 in English (English). Last updated on 9 June 2022.

For my work at, I’ve been tasked to make sure that all schools are in OSM - especially with capacity.

No better way to do this by making it easy for contributors to add the correct data… So, I wanted to create a MapComplete theme for education. Normally, I would open up the wiki to see what tagging is needed, but for schools there is very little tagging available at the moment, which is a mess.

As it turns out, schools are diverse and this is reflected in the tagging.

This diary entry serves two goals:

  1. I want to organize my thoughts on how a tagging model could look like
  2. It is meant to stir up some discussion.

Hopefully, some tagging proposals will come forward from from this post.

So, what is a school (or educational institute) anyway?

This is already a hard question. The openstreetmap-wiki on ‘education features’ states:

Education features are map objects and object features which relate to educational activities

Well, thanks, captain obvious.

Let’s turn to the International Standard Classification of Education (from Unesco) instead:

As national education systems vary in terms of structure and curricular content, it can be difficult to benchmark performance over time or monitor progress.

So, in other words, it is difficult as this can be highly different amonst regions. The ISCED-document however does a good job to draw some lines and to give some definitions.

What does a standard school curriculum look like?

In most countries, the school trajectory for most people (according the the ISCED, page 21) looks more or less as following (but the precise ages can vary with a few years):

Before formal education starts, kids younger then about 4 or 5 go to preschool/kindergarten. This is optional in most countries, and some education takes place, often to prepare spelling and simple math. ISCED calls this level 0

Between 4-6 and around 12, kids learn to read an write, learn basic math skills and other skills. This is called primary education and corresponds with isced level 1

Between 12 and 14/15, kids get lower secondary eduction and learn more skills and competencies (isced level 2). Between 14/15 and 18; kids get higher secondary education (isced level 3). Note that the secondary levels have a split between education preparing for (a set of) trades versus a general training which prepares for tertiary education. These orientations are called vocational and general education.

At age of 18, someone who has obtained upper secondary education, could join the workforce, could follow non-tertiary education (see below) or could enroll in tertiary education.

The first cycle of tertiary education are often bachelors (often 3 years, but 2 years is pretty common too) and correspond with isced level 6, after which a master degree (often 2 years) which corresponds with isced level 7 can be obtained.

At last, a doctorate can be obtained which corresponds with isced level 8.

If, at age 18 someone does not want to enroll in tertiary education or isn’t ready yet for the labour market yet, they can also follow a post-secondary non-tertiary (ISCED level 4) education. This is an education which is not sufficiently complex to qualify as tertiary eduction and often has a vocational training, thus a training which prepares for direct labour market entry. Note that the ISCED does not state typical ages for this education form, as it is often taken by adults too.

At last, isced level 5, officially called short-cycle tertiary education provides education to prepare for following bachelor degree, e.g. if the skills obtained by a vocational secondary degree are not sufficient to enter a bachelors degree.

What if the education is non-standard?

A good tagging scheme doesn’t break under special cases. Lets have a look at some of them to test the waters.

While most of the people might follow a trajectory as outlined above, many don’t.

The ISCED-definition leaves wiggle room by more or less defining what skills one gains in a certain education level - not at what age someone typically obtains these skills. While the typical ages are stated in the ISCED, they are not the defining features.

Some examples of non-standard trajectories could be:

  • Someone who has never had the chance on learning how to read might enroll in primary education as an adult.
  • Someone with a learning disability might be obtaining the lower_secondary skill, even though people of their age age are in higher_secondary.
  • Someone in their forties might wish to reorient their career and follow a vocational course of the skill level of a vocational_upper_secondary.
  • Someone might follow a course in music, dancing, skiing or scuba diving as a hobby in an informal school during the evenings, while still working their job during the day.

This last example also touches upon specialized schools. How should these be handled? Examples of these schools are: - driving schools or flight school. - a secondary school which focuses on arts, but has enough general skills to be compatible with ISCED-level upper_secondary? And what if this school contains a college with a bachelor degree in music too, in the same buildings?

So, this implies that knowing the isced-level of a school is very useful and often does imply the age of the pupils, we still need a way to express whom is going to this school.

Who is the school for?

By default, we could assume that most schools are normal schools where pupils follow age-adequate courses.

This is not always the case. Some schools focus e.g. on secondary education for adults, other focus on people with disabilities.

To tag this, I propose to introduce a tag school:for, e.g. school:for=autism, school:for=adults, school:for=learning_disabilities, …

If this tag is missing, one can assume that the school is for normal-abled people whom follow courses typical for their age.

In some places, schools are separated by gender too. Some schools are boys/girls only, others teach both but they are separated. ~~This might fit this tag too, but not quite.~~ Update: As it turns out, this is already handled by school:gender

At last, a school might provide different levels that are often not grouped. E.g. a primary school might include a preschool. One can even conceive very special settings, e.g. a single university building which has an embedded kindergarten for the kids of the teachers!

What does a school teach?

The further in the education system, the more specialized education gets.

Where all primary education teaches more-or-less the same subjects, secondary education already starts to specialize.

And tertiary education is extremely specialized, with faculties teaching about just one field.

I propose to introduce a school:subject-tag, which indicates what subjects are taught at a school. This must be independent of the ISCED-level. For example: a school might focus on “teaching music”, which can range from evening school for adults, to a secondary school that qualifies as isced=upper_secondary to even a college in arts having doctorate students.

Giving an exhaustive list of possible values is impossible, but some common values could be:

  • arts, music, dance, painting, …
  • driving
  • flight
  • to disambiguate, a wikidata-entity could be linked

The tag school:subject would also remove the need for various extra amenities, such as amenity=dance_school, amenity=music_school, reducing complexity. Other details and assumptions (e.g. target audience and offered education level) can be clarified as explained above.

Schools which do teach skills without general education (e.g. a driving school) could thus be tagged with:

amenity=school school:subject=driving isced:2011:level=post_secondary

A college, tagged with amenity=college thus implies isced:2011:level=professional_bachelor. Whether or not a master-degree can be obtained at that college can not safely be assumed.

Schooling method

At last, there are multiple ways to teach students. Especially secondary education has a rich variety. In Flanders, we have Montessori schools, Freinet, Steiner, CLIL, … This could be worthy of a tag too, e.g. with educational_method oreducational_method:wikidata

Schooling language and taught languages

Schools might be operated in different languages - especially important in areas where multiple languages are spoken. As it turns out, school:language is already in use for this, but wasn’t documented in the wiki. Now it is!

Other tags

Of course, there are still other well-established tags important too, such as capacity, contact information, … I’m not covering them here, as these are already widely accepted.

Post-tertiary education

Some colleges offer master degrees for people who already obtained a master degree. How to tag those?

Other questions

What is a college in OSM exactly?


Schools are diverse in the subjects and the level of education they teach, how they teach and who they teach. This makes tagging difficult. This post describes a possible method of splitting these subjects into orthogonal tags which can be independently measured.

This blogpost attempts to give a first attempt, but of course, I’m only aware of my own environment. There must be other types of schools which I’ve never heard of before, so if you know of something that is considered an ‘educational feature’ which cannot be tagged with the tags described above, please let me know.

Hi all,

MapComplete has been (partially) translated in 21 languages by now - an amazing feat that I could never have done alone (for starters, I don’t speak 21 languages).

(For those that don’t know MapComplete - it is an easy-to-use map viewer and map editor. It shows POI on the map and when clicking something, shows the known information and asks questions about it)

Translating MapComplete started by manually editing the translation files, making a pull request, … A next step was moving over to Weblate, where there is more support for translations.

However, one has to know where to find this translations and translating can be tricky, figuring out which piece of text goes where.

That is why I launched a new feature today: toggling ‘translators mode’ (in the copyright tab) will add little buttons, taking you directly to the page to translate the string (or to fix some typos):

So: please help to translate MapComplete in your favourite language!

Some remarks:

  • You have to create an account on hosted weblate first. If you register with the same name as your OSM-username, translators mode will trigger automatically
  • Translations take a few days up to a few weeks to appear in the application
  • If the original string has a part between { and }, just copy that part (and don’t translate it). The parts between braces have special meanings, e.g. it will show data from the object itself
  • If translators mode is active, all languages will be shown in the language picker. Pick the one you want to translate into. Is your language missing? Go here and follow the steps.

And again, thanks for helping out! You all are awesome!

Last week, we launched a new OpenStreetMap-based website: “Pin je Punt”.

This application -based on mapComplete- was commissioned by the flemish touristical agency Visit Flanders. The application is a map viewer and map editor, which requests information about charging stations for ebikes, bicycle rental, benches, playgrounds and a few more POIs.


This project was started for two reasons:

  • No one in Belgium does know where all the charging stations for bikes are
  • There are five different, provincial touristical offices. They all keep their own database of POI as benches and bicycle rental. ‘Visit Flanders’ (which is responsible for the five smaller ones) wants to unify and integrate these databases. And where better to store all the data then on the biggest geodata repository?

This project builds upon MapComplete, which aims to be an easy-to-use map viewer and editor.

The launch

The project is live since the 7th of march, the (dutch only) project page can be found here

A former radio presentator made an advertisment video as well, which can be seen on youtube (dutch only). As far as I know, this is the first professionaly made commercial which asks to contribute to OpenStreetMap!

There has been quite a few edits done by now too:

The “import” tooling

As mentioned, these touristical offices already have quite a bit of data, especially about benches and picnic tables - but also a few playgrounds are known. For this project, the agency wanted to get all this data into OSM.

Importing these datasets (after some cleanup) wouldn’t be the best idea, as the data isn’t very fresh anymore. We opted for a different approach: a new note was created for every missing datapoint. These notes are loaded by MapComplete and shown when appropriate. A contributor can open MapComplete, and then confirm that a bench, picnictable, toilet or playground is effectively there. If it is, they are invited to slightly move the item to a more accurate position using the best available aerial imagery in the region. If the item is missing or duplicate, this can be marked as such and the note is closed too.

For now, this approach has been quite a success: from the 871 created notes, 87 have been handled already - some of them by long-time community members before the official launch; other by new contributors in the first days since the launch.

A big disadvantage of this approach is that we are spamming the notes. This can be frustrating for contributors who try to respond to every note, especially notes from newcomers to give a welcome feeling to them. For them, I created another MapComplete theme showing the OSM-notes. This one has advanced filtering fuctionality, to hide import notes, but also to filter notes created by someone, not created by someone, created before or after some date, ….

A second drawback is that some of these notes will be open for years. For this, we provided some tooling which shows all the import notes of a certain campaign with the option to close them all at once. When the project is ended (e.g. in one year time), we can close all remaining notes at once.

All information about the imported dataset is available on the wiki

At last: contributors with >5000 changesets can use the import helper page on mapcomplete too. If you have a dataset about POI that are supported shown by one of the official themes, you can upload it if it is thoroughly cleaned, attributes are correct OSM-tags, the data is in geojson or csv format and your local community is informed and consented to the import.

The helper page will help you review the values, check the locations, remove duplicates from earlier open notes, remove points that are close to already existing points and finally upload it.

A screencap of the upload can be seen here

Location: Bever, Strombeek-Bever, Grimbergen, Halle-Vilvoorde, Flemish Brabant, Flanders, 1853, Belgium

In my little OpenStreetMap-editor translations are provided by contributors on hosted weblate, where thousands of text snippets have been translated already in the past year - which is awesome. Thank you translators!

However, the language picker was a bit dry: it used to have codes for every langauge, e.g. nl, en, ja, ‘pt_BR’, ‘zh_Hant’… Quite boring and not really user-friendly - but easy to implement.

Today, I decided to give these an overhaul. I wanted to show proper language names in them. But: in which language should we show the language overview?

Should we show the language option in the language itself? Or should the languages be shown in the current language? Showing in the current language also means that the name of every language should be translated too - a huge task… Also, translating every language has the drawback that, if a user accidentally selects a language in a foreign writing system, they’ll won’t be able to find their language in all the “gibberish”.

Best of both worlds

I decided to offer the best of both worlds: in the menu, first language name is shown as the native speaker speaks it, followed by the language name in the current language (except if both are the same)

This means that, in all circumstances, everyone can find their language.

But, where to fetch every language name in every language?

Wikidata to the rescue

Of course, the internet must have a list of languages translated in every language. But where to find it or compile it?

I decided to have a look at one of the biggest repositories of knowledge: Wikidata. They do have an entry for every language (e.g. Dutch). To fetch every modern language, we turn to the SPARQL-endpoint with the following query:

sparql SELECT ?lang ?label ?code WHERE { ?lang wdt:P31 wd:Q1288568. ?lang rdfs:label ?label. ?lang wdt:P424 ?code }

This one fetches all languages and uses the labels in every language as their translation. With a Typescript these can be downloaded and used as translation.

The messy real world

Of course, real life isn’t as easy. There are dialects, differences in notation between Weblate and Wikipedia (e.g. zh-hant vs zh-Hant). But with a few exceptions, this can be fixed too. Some pragmatism doesn’t hurt - even though it is nice that it works for most cases automatically.

The full script is available here.

The results

Location: 0,000, 0,000

Hi all,

Just a quick heads up that MapComplete 0.14 is deployed!

Apart from lots of fixed bugs and performance improvements, a new theme showing OpenStreetMap notes has landed! Especially the filter functionality should come in handy

And of course, there are plenty of (new) themes, such as the street lighting theme (thanks Robin!) or the postboxes and -offices map (by nicolelaine).

And -by now- over 1000 individual contributors have used MapComplete.

Hi everyone,

A new version of MapComplete has been deployed. It has a lot of exciting new themes and features, which I’d like to highlight in this diary entry.

New themes

The Flemish touristical agency (Toerisme Vlaanderen) has asked me to create a tool to help them to map charging stations, restaurants, café’s, …

This has resulted in quite some fun new themes:

At last, the theme I’ve quickly made as demo with hackerspaces and makerspaces is online as well.

Other improvements

At the same time, I’ve been doing lots of work on improving performance. A lot has changed under the hood, resulting in a way more robust and fast experience. On high zoom levels, the OSM-API is used directly, bypassing overpass all together. If is down, failover to other instances is now builtin. At last, caching is a bit more aggressive and if the data on your machine is recent, no new data is loaded at all.

Earlier releases had some important features to, which I’d like to highlight as they can be important for theme builders:

  • A layer can configure filters
  • A layer can demand to have ‘precise input’, showing an extra draggable map (with e.g. aerial photography) when a new point is added to the map.
  • A new point can be snapped to an already existing road, e.g. when adding a bollard
  • A layer can define that a point can be (soft) deleted
  • The new Mapillary-API has been integrated
  • Some themes have a download-button enabled to download as GeoJson or as CSV

I need your help!

As usual, your contribution is invaluable as well! An easy way to contribute to MapComplete is by translating parts to your language. This can easily be done on Weblate and takes only a few minutes to get started.

If you want to make your own map theme on MapComplete, that is possible to. If you know OSM well, you can set up your own theme pretty quickly too. All documentation can be found here. If you have a cool theme, I’m very happy to merge them!

At last, I’m working on a small theme that shows what something is named after based on wikidata. However, I’m still searching for a decent icon for this.

A bit over a year ago, I received a phone call: We would like to have some project about nature and forests, where people can like go out and add data about those. Oh, it has to be really simple to use.

Some months and some funding later, the first version of MapComplete was born. While it had a specific focus then, it has grown a lot. Today, MapComplete is a map viewer for a certain theme, where the configuration for that theme decides what features are visible with which icons. When a map feature is clicked, known information is shown and the user is invited to add more information and to add pictures.

By now, there are about 20 themes for multiple topics, such as bicycle shops and pumps, playgrounds, public bookcases and much more. And it is relatively easy to create and load your own theme.

The ease of use and flexibility has lead to a steady increase of contributors that way. Thursday 15th of april was the day the editor saw its 500’th contributor:

Cumulative contributors

These 500 contributors made over 3000 changesets. The most popular (official) themes (in 2021) have been cyclofix (with bicycle pumps, cycle repair stations and more), trees, benches, bookcases, surveillance cameras (that one had an uptick after a documentary about them in Belgium), drinking water, artworks and defibrillators.

Theme breakdown

Want to see more statistics and fancy graphs? Regularly updated stats can be found here

Give it a try yourself on, embed it in your site or make your own theme. If you have questions, get in touch via Telegram where the dev and some community members are.

And stay tuned, some more themes are in the pipeline, made by community members too.

Hello everyone,

As a coach for the Open Summer of Code in Belgium, I thought the community would be interested in reading a little about it and get inspired - along with reading how many of the teams used a map and specifically OSM.

What is the Open Summer of Code

If you have never heard about the Open Summer of Code yet, it is an awesome project. Students create an open source or open data application which a real client needs. The client -often, but not always a governmental organization- sponsors the students. During the four week program, the students get relevant workshops, gain lots of experience, have lots of networking opportunities and are exposed to other Open Source projects and ideas. This all is organized by Open Knowledge Belgium, a small but amazing organisation which furthers the use of open data in Belgium.

This year 73 (!) students participated, along with 17 coaches, making this eight edition bigger then ever. Furthermore, oSoc has been more international then ever, with lots of international students and projects and having a spinoff in Spain. This first Spanish edition had 10 students whom enjoyed it a lot. In other words, don’t hesitate to contact us. Wherever you are, you are welcome as student, coach, client of partner organization or perhaps even as organizer of your own edition.

For me personally, it was the first I participated to oSoc. I had the honor of coaching two teams, quite a challenge for someone just stepping in; but whatever challenge arose, there was always some coach with the right expertise to help out. Furthermore, with Ben Abelshausen (Xivk) and Jonathan Belien (jbelien) being coaches as well, OpenStreetMap was well represented, especially when Joost Schouppe passed by as well.

Everyone from oSoc

Maps in the projects

Lots of the projects needed a map. In the spirit of the project, we encouraged everyone to use open source and open data projects. OpenStreetMap is of course a perfect fit for this. And with so much OSM experience in the room, there was always someone to get people started with Leaflet or Overpass-turbo.

And boy, lots of projects needed a map: 10 of the 17 projects. Out of those ten projects, only one did not use OpenStreetMap. Ironically, this was one of my own projects: the project focused on visualizing sea data, thus the ESRI oceanographic map was suited better.

The other nine used OpenStreetMap in some form or another. Some used OSM as a small embedded map as extra information about some building, whereas other projects had it as a more central component; thus a map visualizing lots of data.

Ben coached another two projects. The first project, bike4brussels is a route planner for cyclists in Brussels offering many handy options, such as having a more relaxed ride, the shortest ride (which often is over bicycle-unfriendly roads), a compromise between those or a route with a bias towards the cycling network.

Ben’s other project was even more OSM-centric: the Brussels governement asked us to compare their official data with OSM. They use OSM regulary for their operations, as the official data they offer has no routable graph. In other words, the OSM toolchain is better then their own internal toolchain - but they wanted to make sure that every road and all other official data is available within OSM as well. This project indicated the growing level of trust in the project and the maturity OSM has reached over the years. We’re winning!

The developers view

In other words, lots of students worked with OSM in varying degrees - for small basic needs such as a simple map up to complex tasks such as the road completion project and route planning. However, they all agreed on one thing: OSM is very dev-friendly. This clearly shows the global effort that has been put into OSM, not only into the actual data but also into the software surrounding it - for which oSoc thanks the OSM community. Without OSM, some projects would have been more expensive or would have been totally impossible!

A great experience

All in all, oSoc was a great experience that was partly possible due to the power and awesomeness of OSM, but also thanks to the bigger open data/open source movement. The project clearly shows that an open approach works, that freedom and working together pays of in the long term.

I’d thus like to thank all of OSM for their work, the entire oSoc team (including the student, coaches, clients and organizer Dries) and invite everyone all over the world to participate next year as well to an oSoc.

Location: Tour and Taxis, Brussels, City of Brussels, Brussels-Capital, 1000, Belgium

Quickly adding lots of notes with OsmAnd

Posted by Pieter Vander Vennet on 16 April 2018 in English (English). Last updated on 31 December 2019.

Today, I got the question how I quickly added a ton of notes. I use OSMAND for this, with a few tweaks.


  1. Enable the ‘OSM Editing plugin’
  2. Under configure screen, enable ‘Quick action’. You find it right on top
  3. Go back to the map; you’ll notice a new button on the lower right side, just above the plus-button.
  4. Press this ‘quick action button’. A new menu pops up.
  5. Press ‘add action’ and choose ‘Add OSM Note
  6. In the following menu, make sure to enable ‘Show an interim dialog’ and press ‘apply’

Adding a note

  1. Press the quick action button
  2. An orange marker appears. Swipe the map to position the marker above the note location.
  3. Press ‘Add OSM Note’
  4. Enter the note text in the popup and press OK
  5. Your note now appears as green circle with an ‘i’ on the map
  6. Repeat for all the notes

For now, your note is not send over to but remains on your own device!

Uploading all your notes

EDIT: M!dgard figured out a way to make this step obsolete and to import them directly into JOSM. See his diary entry here

After surveying, you’ll have a ton of notes. To upload them all at once:

  1. Go to ‘My Places’
  2. Go to the third tab: ‘OSM Edits’
  3. Press the upload button in the lower left corner (pointing up)
  4. Select the notes you want to upload. If you want to upload them all, press the checkbox left of ‘your edits’
  5. Press the upload button in the upper right corner
  6. Enter your credentials and hit OK.

You can also enter your credentials with the ‘OSM Editing’ plugin settings, so that you don’t have to enter them over and over again.

Adding POI

If you are gonna add a lot of POIs with the same presets (e.g. benches, AED, …), you can also make a quick action for that. Play around!

On Sett Pavements

Posted by Pieter Vander Vennet on 14 January 2018 in English (English). Last updated on 24 July 2018.

I’m from Bruges (Belgium). You know, that famous medieval city in Belgium.

As everyone in Belgium knows, the center of Bruges is paved mostly in sett/cobblestones. Personally, I’m pretty fond of those sett pavements. They’re way nicer to see then asphalt (not to mention conrete plates), the absorb a lot of heat in the summer (cooling the city) which is released again in autumn.

But, as the bicycle is my primary means of transportation, one drawback comes to mind: they’re uncomfortable to cycle on - especially when pulling a cart. Some types of set pavement are to be avoided then - I’d rather drive 200 meters over asphalt than 100 over the big boulder. However, the smaller sett -often laid in arcs- is more comfortable to drive on and has a smaller penalty.

This implies that more information should be added to the ‘surface’-tag. In this document, I propose a few extra tags to deal with this extra information; and what kind of sett these are. These tags are used in Bruges; feel free to use them in other places as well.

All example pictures are taken by me, and may be used freely for OSM-related endeavours (e.g. wiki, tools, …).

Cobblestone vs. Sett

First things first.. What is sett stone? And what are cobblestones?

According to Wikipedia, Cobblestone is a natural building material based on cobble-sized stones, and is used for pavement roads, streets, and buildings. Sett is distinct from a cobblestone by being quarried or shaped to a regular form, whereas cobblestone is generally of a naturally occurring form.

In practice, cobblestone is often used in OSM to describe sett stones - although incorrectly. The wiki itself acknowledges this:

  • surface=cobblestone: Cobblestone paving. “Cobblestone” is used in the colloquial meaning here, and therefore includes the type of stones that would more precisely be called “setts”. (Used for around 162k ways)
  • surface=sett: Sett surface is formed from stones quarried or worked to a regular shape. In OSM, this is a subset of “cobblestone”, and it is far more common to tag these surfaces with surface=cobblestone instead. (Used for around 52k ways).

In other words, please, only use sett from now on; and use cobblestone only for when the natural form of the stones is still visible and thus results in a random pattern of laying the stones.

And then there is the even more attrocious surface=cobblestone:flattened; still in use for around 4k ways. The wiki says on this that this is neither a correct name, like sett (cobblestone is by definition not shaped into any form), nor a colloquially used name, like cobblestone. In other words, a tag that should not be used anymore and be translated to sett.


As already discussed: cobblestone is somewhat chaotic in natura, as can be seen in this image (again, from Wikipedia).


Types of sett

With these prerequisites out of the way, lets talk about the main topic of the post: sett in all its sizes and patterns.

In Bruges, there are three kinds of shapes:

  • Rectangular, often quite big (25cm*10cm)
  • Square, measuring around 10cm*10cm
  • Cube, small cubes of around 5cm

These can be laid down in various patterns, as described belowed.

Patterns of sett

Big boulder (aka ‘normal sett’)

surface=sett implies sett:pattern=interleaved and sett:type=rectangular

The first, and most common type of sett are the ‘big boulders’: the big, rectangular sett stones, in a interleaved pattern like a brick wall. As these are the most common stones, I didn’t bother to add more tagging to them.


surface=sett sett:pattern=arc implies sett:type=cube

The second most common type of sett are small cubes, in a pattern of multiple, parallell arcs. Nice to see, and not to be confused with the very similar belgian fan.

Some examples I found in Bruges:

  • Simon-Stevenplein has arcs, where a few arcs are in white cubes. Notice how those white arcs never touch each other:
  • De Burg in Bruges has arcs as well:

Belgian Fan

surface=sett sett:pattern=belgian_fan implies sett:type=cube

Even more beautifull -and extremely rare- is the belgian fan. The cubes are laid in shell-like or fan-like patterns, as can be seen in the Sint-Amandsstraat near the Markt:

This is the only street in Bruges that still has this pattern! There used to be Belgian Fan in the streets around the Simon Steven-square as well; but a recent (~10 year ago) reconstruction of the site used ‘normal’ arcs, as visible above. The other place that still has a few specs of belgian fan is one construction site as well; so it is endangered as well. Perhaps someone should complain to Unesco that we are losing some world heritage!


surface=sett sett:pattern=interleaved implies sett:type=square

Although square sett is mostly used for foothpaths, it is sometimes used for shorter streets or speed tables as well. The square sett can be used interleaved, as here:

Square without pattern tag

surface=sett sett:type=square implies sett:type=square

… or used in a straight way, as here:

Paving stones

At last a word on paving_stones: the consensus here is that these are (in general) modern, mechanically shaped to neatly fit. The can be cast from concrete, they can be natural stones that are cut in a specific shape, … For example, I consider brick roads to be a subclass of paving stones (but I’d tag it as surface=brick anyway).

The distinction with sett can be very small and subjective. For example, I have been doubting what to call the following:

In conclusion: a nice map to see

As you’ve already noticed in my previous posts, I’ve customized the routing parameters for OSMand to help with this task. It also was an excellent reason to map all the street pavements of Bruges. It was a lot of fun to do, and it helped to discover new places in Bruges; both beautiful or ugly.

The result of all this mapping can be visualized, thanks to overpass-turbo.

Location: Brugge-Centrum, Brugge, Bruges, Brugge, West Flanders, Flanders, 8000, Belgium

Tweaking the OSM-And routing engine

Posted by Pieter Vander Vennet on 8 November 2017 in English (English). Last updated on 12 January 2019.

After some experimenting and help from the Belgian OSM Community, I figured out how to tweak the parameters for the routing engine and steer the navigation process. It seemed as if the technical documentation was missing, so lets write it here.

The parameter file: routing.xml

All parameters for the routing file are stored in a single XML.

You can find this XML on the OSMAnd github. Head over there, and download it. EDIT: By now, all the documentation has been included upstream. Everything you can read here, you an also find in the github routing.xml file. This diary entry can still serve as a gentle introduction.

This document should be placed in a place where OsmAnd will find it. As I chose ‘external storage’ to store my maps (settings -> general settings -> Data Storage Folder (under miscellaneous title), adding this custom routing is easy. Plug your phone in your computer and go to the path /sdcard/Android/data/ Copy routing.xml over.

Reading the parameter file

routing.xml is actually documented quite good! Read the docs there to get some general idea.

Adding an option to a profile

The parameters are split per profile. I edited the bicycle profile, as that is what I use most (also see my previous diary entry).

Over there, add a toggle, e.g., if you want to avoid sett surfaces:

    <parameter id="avoid_sett" name="Strongly prefer asphalt and paving stones" description="Tries to route around sett and cobblestone, ideal if riding with a cycling cart" type="boolean"/>

The id is the name you’ll use in if-statements, the name is what shows up in OSMAnd. Save the file as described above and restart OsmAnd. Start navigation to somewhere. If you click the settings (the cogwheel on the bottom when starting navigation), your new parameter should show up!

Tweaking weights

Routing considers three major aspects:

  • access
  • speed
  • priority

Each of those aspects has its own section in the xml; you can’t miss them.


Access deduces if this road can be used or not. This is very hard: yes or no. If you want to create a profile to cycling with your toddler in the cart, and that toddler wakes up from the sett stones, you can add the following to avoid a condition in all cases:

   <select value="-1" t="surface" v="sett"/> -- never ever enter a set road

Of course, you might want to avoid unknown surfaces too:

   <select value="-1" /> -- Default: no access
   <select value="1" t="surface"/> -- only if a surface is known, allow access

And if you mix in the toggle, you’ll get:

   <if param="avoid_sett">
       <select value="-1" t="surface" v="sett"/>


The other aspects are tweaked similarly:

Speed is the maximal practical speed on a certain road. For example, if sett slows you down to 5 km/h; then you can tell the navigation:

    <select value="5" t="surface" v="sett">

This is relative to other speeds. The default routing takes a default speed of 14.5 for cycling, so this would be way slower.


Priority is the preference of a road. If two routes are equal, the route with the highest priority is taken. However, as I modified both speed and priority in a similar way, it is hard to state the differences.

A sample use case

This custom routing can be tailored for your needs. See my other diary entry as an example and for the routes taken.

My custom routing.xml avoiding sett can be found here; the radical hiking by Joost Schouppe is over here.

The only phone that doesn't like cobblestone

Posted by Pieter Vander Vennet on 8 November 2017 in English (English). Last updated on 24 July 2018.

Hello everyone,

The 26th of september was an OSM-meetup in Bruges. The few guys which where there - and especially Joost, must have gotten some weird and extremely contagious disease, called ‘mapperitis’. It has been the start of a growing involvement in the mapping efforts of OSM.

Falling in love

Although I’ve been using OSM as my navigation of choice for years now (prob. 5), it’s only recently I’ve actively begun mapping. Altough my first mapping were the ski routes on holiday, that was a one-off - until now.

Using streetcomplete, I’ve been surveying the surfaces of Bruges, which contains - as you guessed it, a lot of sett (aka ‘neat cobblestone’). In the meantime, I’ve been spreading that contagous mappiritis around as well - until it reached someone of the Fietsersbond. One of them had recently seen the talk by Escada and was wondering if it would be possible to map all cycling routes, their surface area and width, to test if they meet the vademecum. “Yes, this is possible” was my answer of course!

I followed by a short showcase of OSM, overpass-turbo and how easy it was to enter all this info. Although he was impressed, he was a bit scared of how much work it seemed to be - and that it is an older and not so tech-savy person didn’t help either.

That was a week ago*. By now, the north of Bruges (the center) is surface-mapped, and around 50 cycleways are measured.

*(To be honest, it was two weeks. However, I was on holiday one week, so I couldn’t map)

Routing around sett

In the mean time, I was confronted with another problem. Quite often, I’m cycling around with a cycle cart. These things are slowed down tremendously by sett stones. So I wondered, wouldn’t it be possible to tweak the OSMAnd routing to avoid those nasty cobblestones?

After a few inquirements on the community riot channel, it turned out to be possible. And not only possible, it was easy as well!

So I added an option to bicycle routing - avoid setts if possible. Not a hard ban, but if a detour is acceptable.

For example, if I want to go from my home to my favorite youth movement, the shortest route is through the city - and over cobblestones. Not that great with the cart:

Normal route

However, with tweaking the weight of sett, I got this route:


A really cool result. It seems like I have the only navigation system in the world that knows where all that cobblestone is and that actively avoids it…

Next step: promote OSM to the ‘Bruhhelingen’.

And because I want to keep mapping, I even added a mode to prefer routes where the surface key is missing… Giving the following result:


In conclusion, a very usefull and extremely fun experiment!

If you want to create your own routing, I wrote a small getting started for OSMAnd here.