Amenity Mapping Trip

While I did some amenity updates on my last field mapping trip, I was more focused on good camping. I did update the amenities in the small hamlets I drove through, but there weren’t that many in North Western Colorado. This field mapping trip was to go to a part of Colorado I’d never been to. This will have me drive though about 2 dozen hamlets and small towns. Checking existing OSM data, there are very few amenities in each of these. The other purpose was further experiments using the new ability in ODK Collect to edit existing OSM data. At least, being able to display all existing amenities will at the least keep me from mapping a POI that already has good data.

I noticed on my last field mapping trip that many of the small towns had suffered during the pandemic. Many restaurants no longer existed, so much of that updating was deleting the restaurant name, and anything related to the previous business. I also added more tags, for example, most all gas stations are also a convenience store, and sometimes also sell alcohol.

Trip Preparation

Like usual, I spent several days getting the data ready for another trip where I’ll be offline much of the time. My first focus was getting the downloads started, as this takes many days for an area I hadn’t done any mapping or camping in. I downloaded two sets of satellite imagery, Bing and Ersi into my map tile store so I can use those as offline basemaps. Due to GPS inaccuracy, I often have to adjust the actual location I got from my GPS. On most phones, the accuracy is only good to 5 meters, which is a lot. New, more expensive phones, have the newer GPS chipset, but even then it’s only good to 3 meters.

It is possible when collecting the location data to use an mbtiles basemap in ODK Collect, and just touch the right spot. That assumes you are either online, or have an mbtiles basemap available. But that doesn’t fix the GPS issue entirely. There is also the motivation to often map as fast as possible. Most of these small inhabited areas often have only one main street, which is where most of the amenities are. You get some pretty strange looks from the locals when you stop at every amenity on main street, and start tapping on your phone. Often locals will ask me what I’m doing, they’re afraid I’m collecting information for the government. Usually when you explain that you’re ground-truthing the maps, which benefits both emergency response and recreational users, they’re supportive, and often a good source for other information.

Along with the satellite imagery, I also had to download the USGS map tiles for this part of my state. I make one big basemap for OsmAnd of the topographic maps. They’re much less dense than satellite imagery, so download faster, and you can make maps that cover a large area. These are what I use when driving as a reference. On top of this basemap I have the GPX file of all the locations I want to get to. This works well, as I can use the basemap in addition to OSM for complicated navigation decisions, which is common in remote, poorly mapped areas. I primarily use the topographic maps for OsmAnd while driving.

I can also switch to the satellite imagery basemap, because that’s usually at those moments I need the additional data. Imagery is great when you are looking for remote camping (not in a paid campground), because you can see if there are any buildings up the dirt road. In poorly mapped areas, just cause there is no building on the maps doesn’t mean there aren’t any. That dirt road you are looking at may be somebody’s driveway, or private property.

Whenever possible I try to do as much of the viewing imagery for possible free camping  at home, days or weeks before I leave. That process can be data intensive, better to do when online. Especially in a region like this where there is much private property mixed with public land, and when you are standing there, it’s often hard to tell the difference in these remote areas.

Target Locations

This field trip was basically getting to multiple small hamlets, and updating amenities. So that part was easy, I’ll be driving through them, so I don't need to add them to the GPX list. What’s on the list this time is some historical sites I want to get to for personal reasons, like the Sand Creek Massacre site, and the Amache Camp for Japanese citizens during WWII. Since there is much private property in this region, I added a few of the more remote and cheap campgrounds as a backup.

Here the target locations were entire hamlets/villages/towns. Usually in most of these the amenities are clustered download, so I can walk everywhere. What I did need to do was extract all existing amenities in these areas to avoid duplication. In addition, to really do this right, I need an mbtiles basemap for each of the areas. Although I do plan to experiment with one much larger file covering multiple inhabited areas and see if ODK Collect can deal with it.To make data collection easier, I made small mbtiles files for each inhabited area. Those are for ODK Collect.

I generated a GeoJson file of all existing amenities in this region. There weren’t a lot. I used that as the existing OSM data file for OK Collect. It’d cover the entire region, since OSM was missing much data beyond highways. It’s not a large file for this region, of course that’s the purpose for going here and mapping it. Not just mapping, that can be done with a data import. Ground-truthing requires being there. That’s why we field map, to collect accurate data that we can’t get from remote mapping of imagery.

Map Data Research

As I started to research the existing map data for this part of Colorado, I realized that at least for OSM, it was mostly limited to highways from the TIGER import years ago. And TIGER isn’t that great, but fixing highways is a future project. When I realized how spare the data was, the trip preparation expanded a bit… I decided to do some building imports, which always makes the maps look better, and are a good reference. I should do a much longer write up on this part, but the summary of the process is to download the Bing footprint data from GitHub, and the Colorado data file from Geofabrik. Those are huge, too big for any editor. I then extracted all the county boundaries from OSM, and then used that to produce two output files, one for the footprints data, and one for the existing OSM buildings.

The output file I run through my own conflation software, and load the results into JOSM.  You can enable the OSM imagery layer, and pretty quickly validate the conflation results. You can also load the OSM data file for that county, it’s big, but usually manageable slowly. Or do it in pieces. Once you are sure there’s no duplicates, or better yet, run the JOSM duplicate building script.

Then you load some satellite imagery. I usually start with ESRI. In a small village, usually what gets identified as a building is reasonably good. In more rural areas, haystacks, big rocks, etc… get mis-identified as buildings. So you have to view the data over imagery and decide. Usually if it’s not near a highway or path, it may not be real.

So having the new building footprints is one thing, but then what do I do with them? Obviously import them into OSM. So I made data files for all the counties I was planning on field mapping of the new buildings, and I’ll make the attempt and importing them. Having the buildings on the basemap for ODK Collect will help a lot. Course that starts a whole other process. So I created an import page for the import on the OpenStreetMap wiki and emailed the imports list.

Making Basemaps

One of the nice features of ODK Collect is the ability to have a basemap of satellite imagery when choosing a location. This is very useful, as often you can’t stand in the middle of a building or camp site to record the location. When mapping amenities in small rural towns, I often get weird looks as I stop in front of every building and start typing on my phone. Sometimes people come over and ask me what I’m doing in a friendly, but curious way. Usually an explanation of improving map data for emergency response plus a quick demo usually leaves them satisfied. While it is possible to fix all the locations later using JOSM, to do that you either need to be online, or run an offline tile server. ODK Collect supports basemaps in mbtiles format, so I make some using satellite imagery. Then when I pop up the map to enter the location, I can touch the middle of the building from the imagery to set the proper location.

 The zoom level is important, I find I need at least level 18, 19 is best. I also add the lower zoom levels, as they’re small, and help when I’m zooming in and out. I figure any habited place or more than a few dozen people that has a place name probably has more than one amenity to map. So for all those areas I make small mbtiles, one for each area. Since they’re small areas, I add zoom level 19. For bigger areas zoom level 18 is usually all you can use before maxing out the file size. After I add all these basemap files, the ref layer in ODK Collect does get overly long. So I usually only add a few at a time, and delete the ones I’ve completed. Plus I do run an offline tile server of satellite imagery, so can always fix it the usual way with JOSM.

The easiest way to make an mbtiles basemap is to use MobileAtlas. You can also use the HOT Export Tool, QGIS, GDAL, and other tools to do the same thing. Once you have the mbtiles, you need to copy them to your phone. I use adb for this, there’s other ways to do this. They need to be copied to /sdcard/Android/data/org.odk.collect.android/files/projects/{project}/layers, where {project} is a long UUID. Then when you are using the placement map, you can select the right basemap.