JOSM Sidewalk Plugin Tutorial
The most recent OSM US Mappy Hour encouraged and coordinated mapping pedestrian infrastructure in Richmond, VA. You can find the recording on YouTube.
Seemed like a good time to finally discuss my favorite “new” plugin for JOSM: Sidewalks. It takes almost all of the pain out of mapping to the Bronze Tier described by the Pedestrian Working Group documentation. The plugin handles all the fiddly bits of tagging kerb nodes, breaking apart the crossing section of the way, adding crossing node to roadways etc.
Let me know if something is amiss. Happy mapping.
Getting set up
You will need:
Mapping
The Sidewalks plugin adds a new drawing “mode” to JOSM that you enter by pressing “shift+s” and exit by double tapping “a”. In that mode, all lines drawn are now tagged as highway=footway, footway=sidewalk
but when you draw a path across a roadway it will add the kerbs and a crossing tags automatically.
Add sidewalks
Adding sidewalk is just clicking along with the imagery. I added this sidewalk (totallying 1.3km) in about 3 minutes.
It’s broken up by block face to make local surveying of details easier.
If there’s a tag that you know applies to every single on of the new ways (ex: surface) you can use the search term footway=sidewalk new
in the find dialog (CTRL+F) to select everything you just added. Then use add the new tag using the Tags Pane.
Add Crossings
In the image below (imagery omitted for clarity), this crossing was added with 4 clicks:
- Click 1 on the sidewalk way you wish to start the crossing from
- Click 2 on the kerb at the edge of that sidewalk
- Click 3 on the kerb across the roadway
- Click 4 on the sidewalk way you wish to complete the crossing with
Note: Do not click on the roadway centerline! The highway=crossing
node will be added automatically!
You’ll notice several nice things that the plugin has automatically handled:
- Split the way into the portion that is
footway=crossing
and the nubs that are stillfootway=sidewalk
- Added a
highway=crossing
node where the footway and roadway intersect - Picked up a surface tags from the existing sidewalk and roadway and added them to our new ways.
Crossings can also be added by starting at a kerb node. The crossing below was added with 3 clicks:
- Click 1 on the kerb at the edge of that sidewalk
- Click 2 on the kerb across the roadway
- Click 3 on the sidewalk way you wish to complete the crossing with
Q & A
Q: How do I keep it from attaching to other geometry in my already mapped area? It is so annoying!
A: As with other drawing modes, if you hold down CTRL it will not attach newly clicked nodes to existing geometry.
Q: Is there a quick way to split the ways I am drawing? This one sidewalk is 1000m+ long!
A: If you hold ALT, the next click will start a new way. This is great for splitting things as you go. It’s somewhat of a kindness to our StreetComplete users to not be asked survey questions about a sidewalk way that runs off, around the block and over the horizon! Also useful if you notice a potential change in surface tag along some path.
Q: How does it handle roadways with existing highway=crossing
nodes?
A: The plugin tries to find and reuse existing nodes on roadways when possible. For most cases this will mean that it create the footway=crossing
way with the existing crossing nodes included.
Q: Does this work with dual carriage roads we have split into different one way highways?
A: You bet it does!
Q: What other tags automatically get picked up from their neighboring ways?
A: The crossing and sidewalks pick up ALL tags that their connecting neighbors have. This could be covered
, lit
, source
etc
Q: What’s the best way to work on a large area? Downloading pieces of the map bit by bit is a bother.
A: I do most of my editing in a data layer pulled from Overpass. So long as you want to sit down and ONLY draw new sidewalks and crossings into the map, this query should let you get something pretty sizable into JOSM. I can easily get my entire city (population ~80,000) into a layer.
[out:json][timeout:300];
(
way["highway"]({{bbox}});
);
out body;
>;
out skel qt;