Workflow for adding surface information collected during bike rides

Posted by hobbesvsboyle on 6/8/2024

I love to ride my bike. Long distances. New roads. Usually starting from my home in Madison, WI. I also love mapping. And so whenever I’m out riding I try to do at least a bit of OpenStreetMap data collection. When I see interesting features, like a bike repair stand, or stop at a potential point-of-interest, like a café or gas station, I take a picture on my phone and add the data to OSM once I’m home.

Wandrer.earth map of roads I have bike in around Madison, Wisconsin. I have ridden a lot of them.

Recently I became interested in improving the quality of surface tags for highways. Dane County is known to have a very high proportion of paved roads. Even small rural farm roads are almost always paved. But pavement data in OpenStreetMap is spotty. Therefore I was interested in developing a workflow that allows me to add/update surface=* tags through my bike rides.

I asked for advice on this on the OSMUS Slack channel and got some good suggestions. Based on these suggestions, I developed the following workflow.

During the ride

My default assumption is that a road is paved. Thus, I don’t need to do anything whenever I’m on a paved road. Most paved roads are asphalt (I’m not going to get into the question whether asphalt and chip sealed roads should be tagged differently), and so again, on an asphalt-paved roads I’m not doing anything. Some state and US highways and some rare local roads have different paving, usually concrete. When I encounter one of those (and am in the mood for it), I’ll take a geotagged photo or take a mental note.

Highway bridges almost always have a concrete deck, and so I only note deviations from this. When I encounter an unpaved road, I’ll take a geotagged photo at the beginning and end of the unpaved section, or sometimes record a voice memo to capture more complex information. (Okay, I don’t really do the voice memo in practice – photos are usually much better to capture the information.)

The geotagging on my phone can be less-than-accurate, especially when using battery saver mode. I record a GPS track of my rides with my phone or, preferably, a Wahoo Element bike computer.

Editing at home

  1. Download the GPX file from Strava and the geotagged photos from Google Photos.
  2. Open photos and GPX file in JOSM.
    • If the location of the geotagged photos looks off, I correlate the location of the photos with the GPX track, using the Photo Geotagging plugin.
  3. Right-click on the GPX track layer and select “Download from OSM along this track” JOSM dialog box
  4. The default settings have too wide a buffer around the track. I find that 10 meters gets you everything you need and keeps the downloaded data manageable. In densely mapped areas, you may have to reduce the “Maximum area per request” setting to something lower to avoid errorsJOSM dialog box
  5. The downloaded data includes buildings, waterways, and all kinds of other stuff that is not useful. It also includes highways that already have a surface tag. Therefore, you set up a filter in JOSM. If the filter pane isn’t already active, activate it in the “Windows” menu: Screenshot of the JOSM Windows menu.
  6. Add a filter by clicking on the + symbol in the filter pane: JOSM filter pane
  7. The filter term is surface=* | -highway=* JOSM filter dialog This filters out any object that already has a surface tag and any object that is not a highway.
  8. I found it helpful to make the GPX track drawing a little wider. Right-click on the track’s layer, select “Customize track drawing,” and set “Drawing width of GPX lines” to 8. Main window of JOSM, of an intersection and aerial imagery. A 8-px wide magenta line marks the GPS track
  9. Now we have everything set up to add tags. I follow the GPX track and add surface=* tags to any highway I biked on. Often this is also an opportunity to make other improvements, such as removing old TIGER tags.
    • If I’m unsure about the specific surface type (e.g. concrete vs asphalt), I default to the more generic tag (surface=paved), skip tagging the way, or add an OSM Note.
    • If I only crossed rather than traveled along a highway segment, I may add surface tags to it if I’m really confident and the segment is not very long.

Tips and tricks and quirks

  • When you work with the filtered view, make sure to make any edits to a way before you add the surface tag. Once you have added the surface tag and closed the “Add tag” dialogue, the way will disappear – as the filter you set up now applies to this way.
  • The filter also removes all points along the ways. Thus, if you want to adjust the geometry of a way, you have to temporarily disable the filter by checking the “E”(nabled) checkbox in the filter pane. JOSM filter pane, with one filter having the E checkbox enabled
  • Turning on aerial imagery can sometimes be helpful; sometimes it’s distracting. I don’t recommend relying too much on aerial imagery for surface information. One possible exception: Concrete vs other types of bridge decks are usually easily to distinguish based on imagery.
  • Keyboard shortcuts speed everything up. The most important default shortcuts are:
    • Option-A: Add tag
    • CMD-1, 2, 3, … within the “Add tag” dialog to quickly access previously added tag/value combinations
    • CMD-Option-E: Enable/disable filter (this one doesn’t actually work for me on my Macbook)

Like almost anything within JOSM, you can modify shortcuts too or create custom shortcuts. The defaults seem to be working well enough for me and I haven’t messed around with customization.

I make no claims that this is the best workflow for what I’m trying to do—please let me know if you can think of improvements or have your own alternative workflows!