During the summer of 2021, we worked with the Build Lebanon Trails Association (BLT) to help them with their trail maps as they start to build more trails in Lebanon, Oregon. We started our pro bono work by making two trailhead kiosk maps that measured 2’x3’ for use at kiosks on their marquee trail: The Old Mill Trail.

The project, from BLT’s requirements to kiosk map printing and a ribbon cutting ceremony, took about 5 months. At the ceremony, Build Lebanon Trails had two great looking trailhead kiosks with maps and historical photos & information on the Lebanon area.

But for five months of work, we had only produced two maps, one at each end of the trailhead that would only be seen or used by those physically at the trailheads. Though the main goal is getting more people outdoors, geospatial software tools could help deliver more maps into more people’s hands.


Figure 1: Print map of the Build Lebanon Trails system. A 20”x30” print from a nationwide print retailer.

Print map of the Build Lebanon Trails system


The Same Map on the trailhead in print, web & mobile

The Product Matrix from a Print Workflow

When you start with raster data designed for print, then your options for futher products increases. We started with a kiosk map, and our knowledge of Geospatial tools helped us make more products for BLT.

+ QGIS Print Layout
print
print
print
mobile
mobile
web
web
OSM Extract
Raster GeoTIFF
GeoTIFF

1. Print
2. Mobile
3. Web
Products
🖨️ 2'x3' Kiosk map
🖨️ 20x30 Poster
🤳 Maps for Social Media
📱 Share the World, RobLabs.com/stw
📱 Avenza
🍁 Leaflet
☁️ COGeoTIFF

Details: How the Product Matrix image was built
flowchart LR

A[OSM Extract] -->|+ QGIS Print Layout| B[Raster GeoTIFF]
B --> C{GeoTIFF\n\n1. Print\n2. Mobile\n3. Web\nProducts}
C -->|print| D[__ 3'x5' Kiosk map]
C -->|print| E[__ 20x30 Poster]
C -->|print| F[__ Maps for Social Media]
C -->|mobile| G[__ Share the World, RobLabs.com/stw]
C -->|mobile| H[__ Avenza]
C -->|web| I[__ Leaflet]
C -->|web| J[__ COGeoTIFF]

What We built for BLT

🖨️ 2021 Goal: Maps for Trailheads

  • A 2’x3’ print map using OpenStreetMap data + BLT Trail data + Satellite Imagery, built with the QGIS Print Layout engine.
    • A 20”x30” print map for use at events, or as fundraising gifts for sponsors.
    • Cartograpic Symbology was follows the National Park Service Symbol Library standard for a common look & feel.

🤳 2021 Goal: #mapsForSocialMedia

  • Making use of the QGIS Atlas Tool to generate square images for marketing and sharing on Social Media.

🍁 2021 Goal: Maps for Web

  • A Leaflet based map delivered to BLT for marketing their trails on their web site. Leaflet allows for links that allow you set the zoom and location directly in the link. See:
  • Riverview Park
  • Gills Landing

☁️ 2021 Goal: Efficient Map for Web

  • A Cloud Optimized GeoTIFF consumes print ready GeoTIFF files that can be proofed by BLT on a web page. Instead of distributing a 250 MB file to be downloaded and displayed, we used COG to efficiently consume the GeoTIFF file and stream the portions of the map that BLT needed to review.

📱 2022 Goal: Offline Maps for Mobile


  • This is a 2’x3’ map that is print ready with dimensions of 7200 × 10800 pixels at 300 pixels per inch.
    • November 2021 - final version v2021-11-02
    • For a web version of this 2’x3’ map, see this Leaflet map. This can be integrated into the Build Lebanon Trails website by downloading this 97 MB Zip file.
    • This 13 MB JPEG version of the map should only be downloaded if you are interested in printing your own copy of the map. The image size is 7200 × 10800 for printing at 300 pixels per inch.
    • This 53 MB Zipfile contains five maps scaled at 8”x10” for use for printing on letter size pages.

Maps for Mobile

Share the World

“Share the World” with your iMessage contacts by sharing the trails, points of interest, and places that you have explored.”

See the iPhone app specifically built for iMessage at RobLabs.com/stw. This app was built on Apple MapKit which allows for layering raster tiles on top of an Apple Maps baselayer.

This allowed us to make use of Apple Maps and 3D maps for National Parks such as Joshua Tree & Yosemite.

If the Video doesn’t load, click this link.

Video: Build Lebanon Trails with Share the World for iPhone

Avenza Offramps with a GeoTIFF

We built a version of the Build Lebanon Trails map to work as a Offline Maps for Mobile. And it is designed to work with Avenza Maps, a free download availabe for iOS & Android.

Note: From the Avenza Support site on how many maps you can download.

You are able to import an unlimited number of your own maps, however, only 3 maps will be able to use the tools contained within Avenza Maps such as location, placemark creation, & tracking.

iOS

Install from Apple App Store and & open Avenza Maps. Use iOS docs from Avenza if you need additional assistance.

  1. Tap this this link when Avenza Maps is installed: Build-Lebanon-Trails-2x3

Maps for Social Media

We have created 1024 × 1024 pixel images that are perfect for sharing trailheads on social media.


COG

  • Online version in a full window.
  • This is a 250 MB TIFF, which is not ideal for sharing. Cloud Optimized GeoTIFF allows for efficient distributions of tiles.
  • You’ll never have to say again, “did you receive my 250 MB image attachment?!?
Details: How a COG URL is built

QGIS Details

🗺️🇺🇸 You can easily import an OpenStreetMap extract, map.osm, directly into QGIS. The map requirements were that we had to match previous versions of the map.

🗺️🇺🇸 In order to reduce or remove some of the extra OpenStreetMap data, QGIS allows for filtering. Therefore, Streets in black were heavily filtered by ignoring or filtering by name or osm_id.

Example of filtering:

-- Identify by Name or OSM ID, the lines you wish to remove
"name" = 'Tangent Street;Corvallis-Lebanon Highway'
OR "name" = 'Hansard Avenue'
OR "name" = 'Reeves Parkway'
OR ("name" = 'Harrison Street'
 AND "osm_id" = '5503677')
OR "name" = 'North 5th Street'
OR ("name" = 'South 5th Street'
    AND "osm_id" = '539462662'
    OR "osm_id" = '876011733')

OR "osm_id" = '113666889'
OR "osm_id" = '5504321'
-- ...

Demo of Building up the Map Layers

We have many layers, but before we consider printing, we need to do filtering in QGIS.

Click on the images to start the demo.

In this demo, you will see several states of how the map is produced.

  • Image 1: “Satellite only without any OpenStreetMap nor trails.”
  • Image 2: “Unfiltered OpenStreetMap data.”
  • Image 3: “Filtered OpenStreetMap data without trails.”
  • Image 4: “What was shipped to the printer.”
Details: Static Map Image Gallery
  • Built using YAML for data & LiquidJS for templating.
  • JavaScript-free: only uses HTML & CSS for cases where JavaScript could or is disabled.
# Liquid code
# 
{% for item in items %}
  {%- if forloop.first == true -%} 
   {% comment %} snip code listing {% endcomment %} 
   {{ item.title }} — {{ item.caption | replace: "\n", "<br/>" }}
#    
items:
- url: https://github.com/roblabs/maps-for-non-profits/releases/download/v2021-11-02/blt-satellite.jpg
  title: 'Build Lebanon Trails'
  caption: 'Satellite only without any OpenStreetMap nor trails.'
- url: https://github.com/roblabs/maps-for-non-profits/releases/download/v2021-11-02/blt-OSM-no-filtering.jpg
  title: 'Build Lebanon Trails'
  caption: 'Unfiltered OpenStreetMap data.'
- url: https://github.com/roblabs/maps-for-non-profits/releases/download/v2021-11-02/blt-no-trails.jpg
  title: 'Build Lebanon Trails'
  caption: 'Filtered OpenStreetMap data without trails.'
- url: https://github.com/roblabs/maps-for-non-profits/releases/download/v2021-11-02/blt.jpg
  title: 'Build Lebanon Trails'
  caption: 'What was shipped to the printer.'