Building Offline Maps from Hi-Res Imagery
One of the coolest features in Fulcrum is building offline map layers for mobile mapping. Access to a local map tile cache untethers you from the need for network connectivity to get reference map data when in the field. Using the map design software TileMill, along with some geo data or imagery, you can make your own custom map layers to load onto mobile devices for your Fulcrum field teams. In this post, I’ll walk through using some free and open resources to get your own satellite or aerial photo data, build some offline map tilesets, and load them onto your mobile devices for field use.
There are hundreds of resources out there for finding and downloading imagery of various resolutions. There’s ASTER, Landsat, MODIS, NAIP, and many others. For Fulcrum users in the field, we really need high-res imagery. When navigating block-by-block on foot, 30 to 60 meter resolution won’t work. In the US, we have High Resolution Orthoimagery (HRO), a dataset of high-res aerial photos with ~1m resolution. Let’s walk through how to get access to a scene and download it, so we can use it to make some maps.
Download Your Area of Interest
In this example, I want to get some imagery of Fort De Soto State Park for a coastal mapping project. We’ll use the USGS EarthExplorer tool, which requires an account to download data. If you don’t already have one, you can register for free. Start your search by panning and zooming to your area, and draw a bounding box to select. After that, pick the Data Sets tab, expand Aerial imagery and select High Resolution Orthoimagery. There are a number of other formats available here you can experiment with, each suitable for different applications, and offering different vintages of imagery.
Once you have all the parameters set, hit Results to have it list matching content to browse for download. Scrolling through the resulting scenes and clicking the Show Footprint icon will highlight the bounding area of that scene in the viewer, letting you preview what you’re about to download. Also, selecting the Show Metadata icon will display metadata for the file — this is where you’ll find map projection details. Note the date of imagery to make sure its currency meets your requirements. Pick Download to queue up the download of the scene you want.
Imagery from the HRO dataset is in the UTM projection, so you’ll have to check the imagery metadata to find the zone number (in the case of mine, it’s zone 17N). You’ll need to lookup the Proj4 definition for the particular projection, so TileMill can reproject on the fly. A lookup database like spatialreference.org can help you find the right code to match. Search for your zone number, find the correct code, and select Proj4 to see the proper projection definition, you’ll need this for TileMill to add your image as a map layer. In my example, I need to use this Proj4 string for UTM zone 17N1.
Add to TileMill and Export
Making maps of imagery in TileMill is simple, you only need to add a single layer to your map canvas, then export.
Open up the Layers menu and click Add Layer. Give your layer an ID, browse to your downloaded
.tif image to set the datasource, then select “Custom” as the SRS definition and paste in the Proj4 string from earlier.
When you’ve added your layer and saved your TileMill project, you can now click the Zoom to Extents button on your new imagery layer to have the map pan to the proper area. Depending on the quality and type of your raster data, you can tweak the properties of the layer using the Mapnik’s raster symbolizer options. There are tons of great guides on working with rasters in TileMill on the Mapbox website. You can get good tips on working with GeoTIFF files, imagery compositing, and even color correction.
After you have your imagery looking good in the TileMill map preview, select Export → MBTiles from the top right menu. In the export control settings, zoom to the optimal default zoom for your imagery (zoom 16 looks good for my example scene), then click the map to set the center point of the resulting map. Shift-click and drag a box around the area you want to export - grab the whole area if you want the full image space. Give your resulting map a title and a filename, then on the Zoom slider, make sure you set the min and max zoom levels for your finished map. Zoom 18 or 19 will give you awesome detail for on-the-ground fieldwork. Zooms 15-18 work well for my case2.
The export will take a bit to complete, depending on the size of your imagery. Once it’s done, your finished map will be in TileMill’s export directory. My resulting file is about 30 MB. With the map good to go, let’s upload it to Fulcrum to share with your field team for download.
Upload to Fulcrum
To get your map uploaded to Fulcrum for easy distribution to mobile users, login to your Fulcrum account, then pick Offline Maps from the top menu bar.
Pick Upload Map and browse your computer for the map you created previously. The upload can take a variable amount of time, depending on your map’s size. Once it’s finished, it’s ready to be downloaded for use in the field.
Flipping over to your mobile device, sync up your account to the Fulcrum server to update the maps list. Select the app you want to use, then pick the Map selector in the bottom menu to toggle between map layers. You should see a list at the bottom of maps available for download from your Fulcrum account. The idea here is that your mobile teams can download these maps while online with good connectivity (like office Wi-Fi or hotspot), then take them offline for collection - either to save money on cellular data, or to go where there’s no wireless coverage.
After the download is complete, you’ll see a section in the Maps tab of Offline Maps - pick your map here to toggle it on in the map view. Now you’ll see your hi-res, custom imagery as the backdrop map for data collection work. For added convenience, you can also manually load large basemaps into Fulcrum by following the guides below for your device: Adding Map Layers for Android or Adding MapLayers For iOS. Depending on the size or quantity of maps you need to share, this makes it simpler and faster to load large (multi-GB) map files.
This capability to build customized maps from high-resolution imagery is fantastic for enabling better work from the field, while still allowing for full offline use. Uploading and distributing your map layers using Fulcrum also allows you to publish out layers based on project work areas, teams, and data requirements, providing that offline access to the field staff that need it. If you have other questions about how to build maps from imagery and GIS data, head over to our support forums and ask, we’ll be glad to help out.
Projections can be frustrating, particularly with the wide variation in imagery sources and locales. Look for any metadata from the imagery provider to find out the projection details, you’ll need to know the image’s current state to convert or reproject. ↩
Zooms have a quadratic effect on file sizes - each zoom level on the scale contains 4 times the tiles of the previous level. Trying to create maps over wide areas to zoom 19 or 20 is a recipe for massive map file sizes. Read more about zooms here. ↩