← Blog

What counts as a street in CityWalker

It sounds like a trivial question until you look at the data. OpenStreetMap tags every road, footpath, alley, cycleway, dual carriageway, private driveway, and forest track in your city. Some are obviously walkable. Some obviously are not. Most of the interesting product decisions live in between, and CityWalker's coverage map depends on getting them right.

This post is the full list. Every OSM tag I decided to include, every one I decided to exclude, and the reasoning behind each call. If something on your map looks wrong, this is where the answer is.

Definitely counted

The uncontroversial ones. Walking anywhere along one of these counts toward your coverage.

Counted, with caveats

Less obvious, but in. Each one comes with a tradeoff I think is worth taking.

Bigger urban roads

highway=unclassified, tertiary, secondary, and primary all count. These are the larger roads people walk along to get from A to B: town high streets, arterials with sidewalks, the kind of road that has a bus running down it. They are less satisfying coverage than a quiet residential street, but excluding them would leave huge gaps where people actually walk every day.

primary is the closest to the line. A four-lane arterial is not really urban exploration. I keep it in because the alternative is worse: a grey ghost-line straight through the middle of your city that you can never cover even when you walk the sidewalk along it. Open to revisiting if users push back.

Paths

highway=path counts, with one exception (covered below). Paths are messy in OSM. A path tag covers everything from a meticulously paved park route to a faint desire line through a meadow. Including them means your coverage rewards walking park trails and shortcuts that residential coverage alone would miss. The cost is occasional inclusion of paths that feel more like tracks than streets. I think the tradeoff is worth it in cities. It might not be in more rural areas, which is something I will watch.

Cycleways with pedestrian access

highway=cycleway counts only when it is tagged as walkable. Most cycleways that allow pedestrians are real shared paths: a riverside route, a converted rail corridor, a park spine that just happens to also take bikes. Worth including.

The exception is countries with dense parallel cycling infrastructure. In the Netherlands, cycleways routinely run as a separate OSM line next to every ordinary road. Counting all of them grows a grey twin alongside every road you walk, and your coverage never feels complete. So for the Netherlands specifically, cycleways need to be explicitly designated for pedestrians (foot=designated), not merely allowed (foot=yes). It is a country-level rule I will extend if the same pattern shows up elsewhere.

Excluded, on purpose

Motorways and trunk roads

highway=motorway, motorway_link, and trunk are out. They are not somewhere a person walks, and including them would inflate the total kilometres in your city with stretches you could never cover. The denominator should be streets you can actually walk.

Service roads

highway=service is out. These are driveways into apartment complexes, parking-lot aisles, alleys behind shops, the lane that leads to a delivery dock. They clutter the map and rarely match what anyone would call "walking the city." A few would be nice to keep (covered passageways, pedestrian alleys mistagged as service), but tag-level filtering cannot reliably tell the good ones apart from the parking aisles. Out as a group.

Tracks

highway=track is out. Farm tracks, forest service roads, dirt access ways through fields. Genuinely walkable in the countryside, but CityWalker is a city app, and including tracks would inflate coverage in cities that happen to have a few agricultural strips on their outskirts. An exclusion I am more comfortable with than the path one.

Sidewalks drawn as separate lines

In some cities, OSM mappers draw sidewalks as their own footway lines parallel to the road they belong to. These are dropped on sight (footway=sidewalk and path=sidewalk both excluded). Keeping them would be a disaster: your GPS would snap to the sidewalk line instead of the road, and the road itself would stay grey no matter how many times you walked along it. The parent road carries the coverage. The sidewalk is not its own thing.

Pedestrian crossings drawn as little stub footways (footway=crossing) are also out, for the same reason.

Private and access-restricted ways

Anything tagged access=private, access=no, or access=customers is excluded. So is anything explicitly tagged foot=no or foot=private. Private driveways, gated developments, customer-only parking lots.

One useful exception

OSM has a convention for cases where a way is restricted in general but explicitly opened to pedestrians: foot=yes, foot=designated, or foot=permissive. These override the access restriction. A private estate with a public footpath cutting through it stays in. A gated apartment block with a marked pedestrian shortcut stays in. The world is full of these and the override is what catches them.

The principle, stated honestly

CityWalker should count streets where walking them feels like exploring your city. Not motorways. Not driveways. Not farm tracks. Each exclusion is a deliberate choice with a tradeoff. Sometimes a legitimate walking route gets missed because someone tagged it as a service road. Sometimes a muddy path you would rather not count is in there because OSM called it a path. But the alternative, counting everything, makes the percentage meaningless.

There is no objectively correct answer here. Just a coherent set of choices that I am willing to defend. The cycleway rule will probably evolve. The primary decision might. path might split into urban and rural treatment if it keeps causing trouble. As more people walk in more places, the filter will get better.

This page is also where I will point future questions about coverage. If you ever find yourself wondering why a particular street did or did not count, the answer is in the list above, or it is something I have not figured out yet. Either way, let me know.


Found a street that should not be on your map, or one that should? Email me.