Filter out buildings and other non-runnable features


Would be nice if you could see already flagged streets in a city and have the option to either confirm or contest the flag.


Similarly, I think that manual flagging should be reviewed. If someone has run a street without manual flagging, it should warn or notify you at least, if you try to manually flag. I know it’s just as easy to fake a GPS segment, but I’m fairly opposed to the concept of manual flagging.


I get where you’re going with this. But for instance, yesterday, i tagged several streets as non accessible, cos (parts of) these streets don’t exist anymore! there is a huge highway built at this moment, and lots of streets are simply gone. And in the past some runners did the old road of course when it still existed. So what you are proposing is not always realistic.

And we both know we differ in the citystrides approach. I just want to run all public streets of a specific city, not some irrelevant non-street data that was uploaded to a city. If the data imported as streets would be ‘clean’, this whole discussion wasn’t necessary.


Thanks for all the great work on this. The street list is getting better over time. I’d like to offer a slightly different approach. The community approach is important and we need to have it, but there’s still a lot that can be done safely with automated rules.

Now, we know OpenStreetMap is not perfect and can have bad data. But some elements just simply cannot be confused with runnable features and can safely be removed by algorithm.

If we can set a few filtering rules that we can all agree on, it would eliminate 90 percent of the non-runnable features (at least in the cities that I frequent).

Here’s my proposal:

  1. Eliminate any feature with the tag building=yes. There is no possible chance that a feature rendered as a building on OSM should be treated as a runnable feature.

  2. Eliminate any feature with a waterway key, regardless of value. Lakes, rivers, streams, etc., are not runnable and cannot be confused with roads or paths.

  3. Eliminate all leisure=park features. In fact, you might consider eliminating anything with the leisure key with the possible exception of leisure=track. I have found that the leisure=park feature is used very commonly and is rendered as a park boundary area.

  4. Eliminate any feature with a landuse key. These are also rendered as boundaries and will never be runnable features.

By excluding obvious non-runnable features we can reduce effort but still take a conservative approach that won’t inappropriately remove streets and paths.


I am thinking about extracting my data processing code out of my main codebase, in order to share it around. In the meantime, this Gist contains the code that extracts Street and Node data out of OSM files.

There’s a whole World Of Process™ that occurs around these scripts:

  • collect .poly files for Cities within Regions within a Country
  • extract .osm.pbf files out of a Region’s .osm file
  • convert the .osm.pbf file to .osm file
  • then run the two scripts linked above to create two .json files (one containing Streets and the other containing Nodes)
  • then there’s another piece of code to import the data from the .json files into the database

However, the piece that you’re discussing - ignoring certain data types within the Region’s .osm file - is all within the two scripts linked at the top of this post.

…Anyway… Follow the two links at the top of that Gist, because the person who wrote the code (I just modified it a little bit in order to collect Street and Node data) goes into more detail on the process.


Okay, I see what they did. Basically this script pulls down every that has a “name” tag.

I modified this a bit to also exclude any ways that have one of a handful of “definitely not runnable” features.

See Code:

Sorry, not able to test or run it, but I think you get the idea…


Quick question… is the process to flag the non-runnable features AND mark them manually complete, or just flag them?

I think I mentioned somewhere else, that it would be great if we can flag/complete individual nodes… such as gated communities as one example. The street might be a runnable street, but then end prematurely due to gated community, so don’t want to manually complete the entire street, just the nodes I can’t get to.