Press "Enter" to skip to content

Category: outdoors

Making an Online RAMBA Trails Map

RAMBA Trails Map v1.0 (Default View w/ Epic Loop Layer)

Introduction

Kristen and I have been spending a good deal of time in the Ishpeming and Negaunee area this year, and I’ve made it a personal goal to become more familiar the local trails — both RAMBA-supported and otherwise — and get them documented OpenStreetMap (OSM). Having these trails in OSM provides two big benefits: they appear in other mapping tools (such as OsmAnd, GaiaGPS, Strava, MapMyRide/MapMyRun) and the trail data can be freely used to build other tools.

Official RAMBA Map v6 from 2018

Over the years of making trail maps with OpenStreetMap I’ve mostly produced PDFs for printing, leaving mobile and online mapping to other apps. These work well, but have the big downside of rendering routes with their style. That is, online maps via these tools’ show the routes, but look quite different from print maps, even if all the data for them to display more data (such as colour=* tags on relations) is in OSM.

While these apps work pretty well, and I use them myself routinely for navigation, I got the itch to see if I could make a web-based map that looked more like locally produced print maps than app-based renderings. It seemed like a good project, a good way to learn some basics of modern web development, and maybe make something useful.

What I ended up with was a slippy map of showing the RAMBA trails that uses layers of pre-rendered tiles to show the different official trail routes, placed over a background map. The map viewer is client-side JavaScript that loads static tiles from a basic web server, making this a very simple app to host (just a bunch of static files on a site).

In this post I intend to document the major steps of how I made this map, why I used the tools I did, and share the code to reproduce (and update) this build. Hopefully this’ll allow others to get their head around these map presentation basics, perhaps even reusing this work to make and host another map.

Update OSM Data

Strava Global Heatmap in JOSM

Mostly outside the scope of this article but worth a mention, a significant amount of time was spent ensuring that the RAMBA area trails are accurately listed in OSM. Without good data it would not be possible to go further, as the OSM data is the base data used to create other maps.

By combining information from a bunch of sources, and doing some personal surveying of trails while riding and hiking, I was able to get all of the official RAMBA trails documented, along with numerous other paths and tracks in the area. This building a complete picture of the usable trails in the area.

Information used to get the RAMBA trails in OSM included:

  • My own recorded ride/hiking data, notes, etc.
  • Strava Heatmap data.
  • Official route files (GPXs) from events such as Marji Gesick and Polar Roll.
  • The official RAMBA map.
  • Hand-annotated map from Danny Hill listing local trail names.

These sources were combined in JOSM, cross-referenced, ways drawn and tagged, relations built out, and before long a complete picture of the RAMBA-area trails — official and otherwise — were in OpenStreetMap.

Most importantly, beyond documenting the trail locations, trails were grouped into route relations to show each official route, and then all the official routes were grouped into a superroute for all the RAMBA trails. As of time of writing, relation RAMBA Trails (12425503) is the superroute that aggregates the individual trail routes such as Epic Loop (8467869) and Malton Loop (8468010).

The result of this is accurate trail data that’s easy to query for and style using other tools.

Rendering Tiles with Maperitive

There are myriad ways to render tiles from OSM data, with most of these involving setting up a database server and a toolchain which’ll generate, cache, and serve tiles on demand. For most large data sets this makes a lot of sense, but for a small trail system I really wanted to use static tiles I could serve from a simple webserver.

Eventually I came across Maperitive, a desktop application for Windows that takes GIS data (including OSM), stylizes it with a relatively simple ruleset, and can generate tiles in the standard XYZ format for use elsewhere. It can also be scripted, which meant I could use it as part of an automated workflow to generate new tiles as the OSM data changes. This seemed like a good solution, so I set about writing some rulesets that would reasonably show the RAMBA trail routes and some automation around it all.

After a lot of experimenting I settled on a having separate tile set for each of the official loops, an overview of all trails, and a base map. The base map would always be shown, and a user can toggle between layers which highlight all the trails or individual loops.

After a few iterations of custom rules, I settled on a simplified set based on the Default.mrules file which comes with Maperitive for rendering the base map. The only modification was changing the font to Michael Adams’ Roadgeek 2005 Transport Medium font, as it looks nicer than the default, Verdana. For the overview and route layers I created simple rules based on the the default rendering of highway=path, using the Heavy version of the font. The rule for each trail route (relation) selects the trails in a given relation then colors them accordingly.

Creating these rules took a bit of fiddling, as Maperitive is both a bit of a dead project, not completely documented, and (in the latest Beta) sort-of buggy where sometimes the map display would stop updating. Still, even though I’m not great at making attractive things, I was able to come up with something that worked well enough.

Conveniently, Maperitive also comes with a command line version (Maperitive.Console.exe). After settling on rendering rules and a tile generation script, I used this as part of an automated workflow which downloaded OSM data directly then rendered each of the tile sets.

After tile generation I used a Windows binary of OptiPNG to losslessly compress the tiles, resulting in a ~62% space savings (original: 746MB, optimized: 286MB) which’ll reduce storage and bandwidth overhead.

The Front End

Editing in VS Code

With tiles generated I needed a way to display them. It turns out that OpenLayers was easy to use and it all ran as simple client side application in a browser. By using npm and parcel, with Visual Studio Code for editing, it was quite easy to get the site developed, tested, and bundled up for deployment. The only component I had to add was ol-layerswitcher control, which provides an easy way to toggle between layers.

Prior to this I had very little experience with modern web development, with my exposure to JavaScript pretty much limited to reading others’ code to figure out what it’s doing. After a bit of confusion (and having to accept the hidden complexity of using an application bundler), I was able to focus solely on writing a single main.js file with a basic index.html that together do what I wanted:

  • Run full screen by default.
  • Show all trails by default, with toggles for the defined routes (layers of the map).
  • Show an attractive background map below the routes to show the rest of the area.
  • Offer controls to use geolocation to showing one’s location on the map and reset the view to the original map extents.
  • Look sane on desktop and mobile devices.

This ended up being much easier than I thought, and between the OpenLayers Examples and just some basic programming I was able to get something I’m happy with. Far more time was spent designing the tiles and thinking about what I wanted it to do than writing the code to display it all.

Tile Hosting

The actual map tiles are a number of small PNG files, and a typical session of viewing and panning around the map can result in hundreds of image loads. This was seeming a bit slow when being served from nuxx.net via HTTP/1.1, so I looked into using HTTP/2 to improve performance.

Unfortunately, it was not simple to turn on HTTP/2 here at nuxx.net as I’m using PHP for WordPress, which in turn requires MPM prefork, which precludes mod_http2. I could have set up another web server and such, but for now I’m hosting the tiles in AWS, with the tiles uploaded to an S3 bucket and served via CloudFront.

This should allow for better tile download performance than what I can do from my server. Despite potentially incurring a bit of a financial cost it is a good experiment in hosting tiles in the cloud. I may change this in the future, particularly if it becomes cost prohibitive, but for now it’s working well.

Follow Along At Home

If you would like to generate this same map, start by downloading this ZIP file: ramba_trails_map_code_1.0.zip. It contains the scripts and rules needed to generate the map tiles (ramba.mscript and the .mrules files), the index.html, main.js, and package.json for the OpenLayers-based front end, the .osm file used to generate the first release of the map, and a few batch files that tie it all together.

You will need to download Maperitive (latest beta: link — from this post / mirror), curl, OptiPNG, and the Roadgeek 2005 fonts to generate and optimize the tiles. These scripts may work fine with older/release versions of Maperitive, but betas incorporate a bit of collision detection for text, making things look nicer.

These batch files are included to will help you out, but may need some editing to fit on your environment:

  • fetch_osm.bat: Uses curl to download all OSM data within a bounding box that encompasses the Ishpeming/Negaunee area.
  • generate_tiles.bat: Runs ramba.mscript via Maperitive.Console.exe to generate the tiles.
  • optimize_tiles.bat: Copies the unoptimized tiles from the .../tile_output/raw output directory to the .../tile_output/optimized directory, then runs OptiPNG against the tiles to optimize them in place.

To build the web app you’ll need to install npm, parcel, create a new OpenLayers app as per the directions here. Then install ol-layerswitcher (npm install ol-layerswitcher), replace the default index.html, main.js, and package.json with the ones I provided, and you should be ready to go.

Updating the Map

As you can see, the map is two major pieces: the front end and the tiles. Whenever the map data changes in OSM the tiles can be regenerated to update those layers. The code for the front end web app only needs to change if the storage location changes, features are going to be added, etc.

Conclusion

This map has worked out rather well and I’m happy calling it v1.0. It’s been a great learning experience, and I’ve even managed to produce something useful that didn’t exist before: an interactive map of some of the most rugged single track trails in Michigan; one of my favorite places to ride mountain bikes.

It’s far from perfect, and there are some things I could do differently, but for now, I’m considering it a success. When in Negaunee for vacation last week I successfully used development versions of this map to find my way around, so I know it’s better than nothing.

If you find any quirks in the map data — such as trails with wrong names or in the wrong location — please take a screenshot and show me what’s wrong and email that to steve@nuxx.net. I’ve done my best to ensure the RAMBA trails are accurately mapped, but I’ve certainly missed some things.

Problems

  • No key or other ancillary information (such as logos) as are normally found on print maps.
  • No terrain. While 1m DEM elevation data is available from the USGS, I couldn’t figure out how to use it in Maperitive for generating hillshading.
  • No easy way to add clickable items to show additional info, link to external map apps (eg: for navigation).
  • Maperitive’s text rendering isn’t the best, resulting in goofy looking text at some zoom levels.
  • Long trails only have one label placed on the middle. Trails with one name broken into multiple ways will be labeled numerous times.
  • Due to being run in a browser it’s a sufficient, but not great, mobile experience. Specifically, selecting the geolocation, recenter, and layer controls can be fiddly because they are so small.
  • Does not work offline, but thankfully most of the RAMBA area now has good mobile data coverage.

Things To Investigate

  • Keep an eye on AWS cost and performance.
  • Look at Leaflet for the front end, as it seems a bit more modern.
  • Consider rendering map tiles with TileMill. This will add a lot of complexity both in setup and styling tiles, but once done should allow a lot more flexibility in styling and overcome most of Maperitive’s problems. mapbox/mbutil should work for getting XYZ PNGs out of MBTiles files.
  • Consider using a tile server if I don’t want to deal with discrete files.
  • Look more into using vector tiles with client-side styling. (I passed on this for now, as a GeoJSON file showing each of the route is a large download and had no benefit over raster tiles.)
  • Maperitive should run under Mono, and OptiPNG is available for many platforms, meaning it should be possible to reproduce this build under macOS or Linux. Note that the GUI for Maperitive will not currently run on macOS due to Windows.Forms currently being based on Carbon, which is not available for 64-bit macOS. So while the CLI should work, the GUI version isn’t currently compatible with macOS 11.5 (Big Sur) and higher.
Comments closed

High Resolution Strava Global Heatmap in JOSM

Mapping trails in OpenStreetMap (OSM), using JOSM, is done by overlaying one or more data sources, then hand-drawing the trail locations using this background data as a guide. While not a default in JOSM, with a little know-how and a paid Strava Subscription the Strava Global Heatmap data for this can be used as well.

While there’s a fair bit of info about doing this scattered across some JOSM tickets (eg: #16100), this post is to document how I make this work for me by creating a custom Imagery provider. Because there isn’t an official (and robust) plugin to authenticate JOSM against Strava it’s a little tricky, but overall isn’t bad.

First, you need to sign into Strava, then go to the Global Heatmap and get the values of the three cookies CloudFront-Key-Pair-ID, CloudFront-Policy, and CloudFront-Signature. These values are essentially saved credentials, and by using them in a custom Imagery provider URL, JOSM will use these to access the Global Heatmap data via your account and make it available as an Imagery layer.

The easiest way to get these cookie values is to use the Developer Tools built into your web browser:

  1. Launch your web browser, either Firefox, Chrome, or Edge.
  2. Go to the Strava Global Heatmap, sign in if needed (check the Remember me checkbox), and be sure it’s properly displaying high resolution data.
  3. Load the developer tools for your browser to show cookie details:
    • Firefox: Click the Hamburger MenuWeb DeveloperStorage Inspector (or press Shift-F9), expand Cookies and click https://www.strava.com.
    • Chrome: Click the Three Dots Menu → More tools → Developer tools (or press Ctrl-Shift-I), select the Application tab, expand Cookies, then click https://www.strava.com.
    • Edge: Click the Three Dots Menu → More tools → Developer Tools (or press F12), select the Storage tab, expand Cookies, then click heatmap.
  4. Get the value of three cookies, CloudFront-Key-Pair-ID, CloudFront-Policy, and CloudFront-Signature, and make note of them (in Notepad or such). You’ll need them to build the custom URL. Here’s examples of what the three cookies will look like:
    • CloudFront-Key-Pair-ID: VB4DYFIQ7PHQZMAGVMOI
    • CloudFront-Policy: FTUGYikErADOqGmqEnPTaaZ3LCE2QbOJSSsmPD9vdY0hfjSWWHZBgnRai1aQcvUe
      2YtgkG3KdP8IencRaGrS3I5bHAeabQ4I776T7UipDPFzNVh9PBIRvb3DjDqVfssp
      mBA5IrxacQGfB2YmKwegp9OTBfUFkvtEQOlzeXfqeuc34cp408GYXSvp2DsnxKFh
      ofbwygraae3VZqnZxp3vBpz3lBoyPnBEN1djJkxpU1fF_
    • CloudFront-Signature: lrMJG0L6zJilpSdGEnWug0zskcMDD5VVGdSRu~P4OOVp5z8iCMBRBO040wxunEQQ
      p0wVHdaCaTFAVqiM0jC0AApW7HigXjx57nsoEVslOzRuoX9S3g-
      FCePWYNPyZcJ95~6SoGdNRHz-
      b-ZZxk4ERhjzXCNIEE8Gt5uImitcPN3HRlhXexS39g30~5OEv~4FHzXfOOIhQ5X5
      cGUD0SpdYviBE~vkAJCk3TbQMXxlJbyX4OOL5xvVPv5WjzMKTuvEk6Z9m6iFBbZc
      8ov4qS60th0tZ1RM4pNMoIWKoqPS3~UPGISe6Xa8Kq-
      tQPxHlfGciI5uhoTp4b7lPussh52QaN__

(Note: These are not real values, you’ll need to look up your own.)

Next is to add a custom imagery provider for the Strava Global Heatmap to JOSM using a URL that you build with these cookie values:

  1. EditPreferences… (F9)Imagery preferences
  2. Create a new TMS string by replacing the [] sections in the following string with the cookie values from above, without the []s:
    • tms[15]:https://heatmap-external-{switch:a,b,c}.strava.com/tiles-auth/all/hot/{zoom}/{x}/{y}.png?Key-Pair-Id=[CloudFront-Key-Pair-ID]&Policy=[CloudFront-Policy]&Signature=[CloudFront-Signature]
  3. Add a new TMS entry by clicking the +TMS button.
  4. Paste the string from Step 2 into Box 4, Edit generated TMS URL (optional), and then give it a name in Box 5, such as Strava Global Heatmap High-Res.
  5. Click OK twice to return to the main JOSM window, and then try to use this layer over some existing data, just as you would aerial imagery.

If it doesn’t work, double-check your URL and be sure the entered cookie values are right, including the underscores after CloudFront-Policy and CloudFront-Signature. Also be sure you haven’t logged out of Strava, as this will expire the cookies. (If you make changes to the URL in JOSM you will need to delete the existing imagery layer and then re-add it to have the new URL used.)

These cookie values, in particular CloudFront-Signature, will occasionally change as cookies are expired and reset or if you log out of Strava. If things were working and then stopped, you may need to get new cookie values from your browser and update the TMS strings.

By default the TMS URL we started with shows the default heatmap, for all activity types, with Hot coloring. Depending on what other data you are working with it may be useful to show just Ride or Run data, perhaps in different colors. In the TMS URL, the first part after tiles-auth is the type of data, and the second is the color. By using this format, replacing [data] and [color], you can create additional heatmap layers:

tms[15]:https://heatmap-external-{switch:a,b,c}.strava.com/tiles-auth/[data]/[color]/{zoom}/{x}/{y}.png?Key-Pair-Id=[CloudFront-Key-Pair-ID]&Policy=[CloudFront-Policy]&Signature=[CloudFront-Signature]

Valid values for type of data: all, ride, run, water, winter.

Valid values for heatmap color: hot, blue, purple, gray, bluered.

Creating multiple layers, riding-only and running-only, of different colors was extremely useful when mapping Avalanche Preserve Recreation Area in Boyne City as cyclists tend to stick to the mountain bike trails and runners to the hiking trails. While I had orthorectified maps from both the city and TOMMBA, the separate riding and running heatmaps made the routes much clearer. In the example image above (link) I have the Ride data as color Hot and the Run data as color Blue; perfect for illustrating the mountain bike vs. hiking trails.

If you’d like to see this area as an example load the are around changeset 85690641 or a bounding box with the following values and see for yourself:

  • Max Lat: 45.2077126
  • Min Lat: 45.1878747
  • Min Lon: -85.0339222
  • Max Lon: -84.9832392
Comments closed

Using OsmAnd Offline Maps during Remote Rides

Many of the popular, long cycling events — or even just solo rides — require a GPS so that one can follow a route in order to navigate. While most of us have bike computers that will show the route, most folks don’t have a GPS with the kind of detailed base maps that become useful for detours, emergencies, or just as an additional tool… Much less something that works when outside of cellular coverage areas.

For this, I recommend you look at offline maps using OsmAnd.

I have (and love) the Garmin Edge 130 as it’s perfect for my riding and training. It’s been great for displaying recording data and following routes from the unmarked 100 mile versions of The Crusher and Barry-Roubaix, to augmenting signage in Marji Gesick and following a route through remote parts of Batchawana River Provincial Park. But occasionally I need a bit more; something to help find a detour around a flooded road, a quick way back to the car in a rainstorm, or just a sanity-check of which branch to take at a fork on the road.

Sure, I could buy a super-high-end bike computer that features detailed base maps, but I rarely need these and don’t want the physically large computer on my bike. So I use my phone, running OsmAnd, loaded with offline maps that display without requiring a data connection. Coupled with putting one’s phone in Airplane mode (turns off the cellular and WiFi radios and saves battery — yet GPS still works) a modern phone will typically get days of battery life while sleeping, with maps and a route quick to access.

Whenever I actually need to see this map I simply pull it out of my pocket or bag, wake it up, get what I need from the map, and carry on. No screwing around with a small touch screen and funky zooming on a Garmin or Wahoo. (I believe that, to date, neither Garmin nor Wahoo have made map perusal as straightforward as it is on a basic mobile phone.)

This is also a great way to get maps on your phone when traveling somewhere costly for cellular data, like during a day-trip to Canada.

Whether you’re doing Marji Gesick or The Crusher or just following a route found on a cycling club’s website, I recommend augmenting your navigation with offline maps in OsmAnd by doing the following:

  1. Visit the OsmAnd site and follow the links to your phone’s store to install the software.
  2. Get a copy of the GPX file on your phone; for Android phones this is often as simple as visiting the download website and downloading the file.
  3. In OsmAnd‘s menu, pick Download Maps and download maps for the regions you want. I personally have Standard Maps, Contour Lines, and Hillshades for Michigan installed all the time, and then if traveling will install for other states/provinces/countries.
  4. Once the offline maps are installed, pick Configure map from the menu, then Map source, and ensure Offline vector maps are selected. The default, OsmAnd (online tiles), is an online map source that requires data.
  5. To display a particular route, pick GPX files…, Add More…, and then browse your phone to add the downloaded GPX file. Ensure this file is enabled (checked), and then go back to the map screen.
  6. You’ll now see the route overlaid on offline maps, easy to zoom in and out of and find your way around. Try turning on Airplane Mode and see that it all still works.

Once I have everything set up, here’s some tips about how I actually use OsmAnd while out on my bike:

  • If in an area with minimal or no cellular service, put the phone in airplane mode so the battery doesn’t get used up while it searches for a signal.
  • Turn off all lock features on my phone (fingerprint / pattern / PIN unlock), so I can wake it up with just a press of the power button.
  • You can use this at the same time as Strava, and Strava generally works in Airplane mode as well.
  • If I’m at a spot where I’m not quite sure which way to turn (based on the single line on my Edge 130), use the map to figure out which branch to turn on. Even the remotest of fire roads and two track are often mapped.
  • If I think I might have missed a route sign (say, in Marji Gesick) I’ll use OsmAnd to see if I’m still on route, and to get back if needed.
  • Look for other nearby roads or trails if I need to detour or shortcut back. I had to do this yesterday during the Founders Fall Fondo as part of the 62 mile Barry-Roubaix route was flooded.
  • Many small, old, sometimes abandoned, yet somewhat navigable roads are still listed in the OpenStreetMap (OSM) data that OsmAnd uses. While these aren’t great for cars and won’t show up on things like Google or Apple Maps, they are often quite useful when on a bike. Look to these for exploring / finding new routes.
  • Many trails open to mountain bikes are included in the OSM data. This includes all CRAMBA trails and most trails in the NTN and RAMBA areas. (Note: Trailforks is a better source for discovering MTB trails themselves.)
  • Periodically update maps to get new OSM data. As roads and trails change, maps get updated.
  • Pay For OsmAnd+ Live ($5.99/year) to get access to more-frequent, automatic map updates and support the open mapping community. 

While this is just a basic overview of using OsmAnd and how I use it when cycling; it does a whole lot more including recording routes, navigation, editing map data, sharing location between contacts, and more. Give the online Help and Features a look for more information.

 

Comments closed

What’s In My Pack? (2018 Edition)

Back in 2012 I wrote What Do I Carry When Riding My Bicycle? to show what I carry to be prepared for long mountain bike rides with a pack. Six years and some refinement and reduction later, it’s time for an update.

I like to do longer — but single day — rides, summer and winter, on any kind of MTB from XC to trail to fat bikes. My gear tends to stay the same for everything from an endurance race to a long day on dirt roads linking together parks, back country rides during a road trip to the typical after-work roll around a suburban park. None of these require the bike packer-level of supplies, but feeling assured that a surprise situation will be manageable does require a bit of planning. Since water and primary food (typically ERG! Energy bars and Infinit Nutrition mix) varies by ride I won’t be covering it here, but my pack and pockets have plenty of room for extra drink mix and food.

Almost everything I carry is because it was needed at some point in the past, and I like knowing that my gear is consistent between rides. When doing MTB rides I almost always wear a pack, only leaving it behind during shorter races where I’m trying to be competitive or rides where I’m okay with walking out should something happen.

My current pack is an Osprey SYNCRO 10 in Velocity Green color, M/L size. This is a high vis yellow/green that I chose because it both helps me be seen and it stays cool in the sun. Having a thin metal frame and mesh back keeps the pack away from my body which keeps me cooler in summer avoids a sweaty back in winter. A replacement badge from the Sport model Road ID is slipped over the elastic on the upper part of the left strap near my head, providing easily-visible identification and emergency contact info.

While many folks are moving to frame bags and waist packs, I’ve stuck to a pack because it allows me to carry a lot of water, easily transition gear between bikes, and it doesn’t rub on the frame. Frame packs seem like a great option and work out well for many folks, but as of now they just aren’t for me.

Here’s the two setups, summer and winter, tiered to show how things are packed:

Default / Summer MTB Pack:

  • 6″ x 5″ Nylon Zippered Pouch (Amazon Link)
    • Cable (Zip) Ties: 4x each thin/short and wide/long.
    • Nitrile Gloves: 2x, in small plastic bag.
    • Spare Derailleur Hanger(s): One for each bike style.
    • Cash: 1x $20, 1x $10, 2x $5, 3x $1, in small plastic bag.
    • Glue-Type Patch Kit: In plastic storage box.
      • Tick Key
      • Quick Links: 3x 11 speed, 1x 10 speed, 1x 9 speed, 1 link single speed chain.
      • Folded Paper Towel: Prevents rattling and rubbing, for cleaning tube before patching.
    • Presta to Schrader Adapter
  • Lezyne Sport Drive HP Pump
    • 4′ of 3″ wide black Gaffer Tape: Wrapped around pump body.
  • Tools in Cotton Sock: Prevents rattling and rubbing, doubles as rag.
  • Spare Tube(s) in Cotton Sock / Rag: Prevents rubbing, doubles as rag.
    • Q-Tubes Super Light: 29 x 1.9″-2.3″ for XC/trail bikes, 26 x 2.4″-2.7″ for fat bike.
  • LOKSAK aLOKSAK: 4″ x 7″
    • Phone: Google Pixel 2
    • Driver’s License / Credit Card
    • Toilet Paper
  • Fox 40 Micro Whistle: Pealess, won’t freeze in winter.
  • CamelBak Antidote Reservoir: 3L, aka bladder.
  • Emergency Food in Plastic Zip Top Bag, about 500 calories.
  • House/Car Keys

Winter-Time Changes from Default:

  • No bladder for water; it freezes. Insulated bottles on bike instead.
  • Remove derailleur hanger and tubes for summer bikes.
  • Mylar Emergency Blanket
  • Little Hotties Adhesive Toe Warmers (2x)
  • Extra gloves, head covering, and jacket, depending on conditions, planned length and effort of ride, location, etc.

This all has worked out well for me, being able to handle situations from cut tire sidewalls to puncture flats, broken chains and derailleurs to detached front brake cables.

Leave a Comment

Where I Rode in 2016

I’m not normally one to do a list on all the places I’ve ridden in a given year, but this map from RubiTrack — my preferred offline ride tracking application — changed my mind for this year. In my personal life it’s been quite an interesting year or so, and I took advantage of of that to travel a bit more. Some of these were with my amazing girlfriend Kristen, some with friends, and some by myself. Whatever way, it made for some great riding.

Calculated via Strava, I ended up with 261 rides totaling 5928 miles over 503 hours 22 minutes and climbing 234,394 feet.

Here’s all the different places/trails that I was fortunate enough to ride, broken down by state:

Michigan

  • Addison Oaks County Park
  • Aspen Park
  • Bald Mountain Recreation Area
  • Bear Creek
  • Big M Ski Area
  • Bloomer Park
  • Brighton
  • Bruno’s Run
  • Churning Rapids
  • Clinton River Park Trails
  • Clinton River Trail
  • Copper Harbor
  • DTE Energy Foundation Trail
  • Fort Custer
  • Glacial Hills
  • Hanson Hills
  • Harlow Lake
  • Hewen’s Creek
  • Hickory Glen Park
  • Highland Recreation Area
  • Hillside Trails (Munising)
  • Hines Park
  • Holly-Holdridge Mountain Bike Trail
  • Iron Ore Heritage Trail
  • Island Lake Recreation Area
  • Kensington to Proud Lake Connector
  • Lake Orion High School
  • Lakeshore Park
  • Maaso Hiihto
  • Macomb Orchard Trail
  • NTN Trails (Marquette)
  • Maybury State Park
  • Merrell Trail
  • Michawyé
  • Milford Trail
  • Morton – Taylor
  • Munson Park
  • North Country Trail
  • Oakland, Macomb, and Wayne Counties
  • Olson Park
  • Orion Oaks County Park
  • Ortonville Recreation Area
  • Owasippe
  • Paint Creek Trail
  • Pontiac Lake Recreation Area
  • Potawatomi
  • Proud Lake Recreation Area
  • RAMBA Trails (Ishpeming and Negaunee)
  • River Bends Park
  • Rolling Hills
  • Rouge Park
  • Ruby Campground
  • Seven Lakes State Park
  • Sharon Mills
  • Stony Creek Metropark
  • Stony Creek Ravine
  • Swedetown
  • Valley Spur
  • VASA

Ohio

  • Mohican State Park
  • Ray’s Indoor MTB Park

Indiana

  • Brown County State Park
  • Nebo Ridge

North Carolina

  • Bent Creek Experimental Forest
  • DuPont State Forest
  • Pisgah National Forest

Missouri

  • Berryman Trail
  • Greensfelder County Park

Arkansas

  • Back 40
  • Blowing Springs
  • Coler
  • Hobbs State Park
  • Lake Atalanta
  • Lake Leatherwood
  • Park Springs
  • Razorback Regional Greenway
  • Slaughter Pen

Here’s to 2017!

Leave a Comment

Cut Vinyl Outline Retrofit for Rockart Directional Arrows

Earlier this year CRAMBA took on a project to install durable trail marking at River Bends Park using fiberglass marking posts and decals from Rockart. After installation a significant lingering issues was the visibility of the decals for the Single Track: Yellow (Main Trail) sections. The stock Rockart decals (eg: 10-124) are a single color printed over a reflective white base, and even with ordering gold color decals (eg: 10-124-10, a darker yellow) the contrast was so low that the arrow was hard to see.

We considered a few different options including custom decals, hand-tracing the arrows with markers, or re-coloring this loop, but settled on retrofitting the existing decals with cut vinyl outlines. One of our volunteers — Ken Markiewicz  — made short work of getting us enough cut vinyl to fix up all the signs in the park, and as seen above it’s radically improves the visibility of the decals.

So that others running into similar decal contrast problems can do the same, I am providing the templates here under the Creative Commons Attribution-ShareAlike 4.0 International license, for all to use: vinylcut_toppers_for_yellowgold.zip

This template contains outlines for both the 10-124 (straight) and 10-125 (diagonal) decals. Outlines are 2.5mm wide with the outer curved square placed evenly over outer colored/white edge and the arrow inset on the white area. We found this provided the best result for keeping the arrow visually separate from the outline.

Leave a Comment

Trailforks, Pinkbike, and OSM

For years I’ve been pretty enthusiastic about OpenStreetMap (OSM) and using it to map trails (MTB and otherwise). While there are a bunch of other ways to map trails online (Google Maps, MTB Project, Trailforks) I have stayed away from contributing to them because of the one-way nature of submissions; your contributed data gets locked behind their license. While MTB Project and Trailforks both claim to allow some manner of reuse of data, it’s nothing as useful as OSM‘s Creative Commons (CC) based licensing. Effectively being the Wikipedia of GIS makes it extremely useful for those of us who want to both contribute data and build open maps on the larger set.

Then suddenly last night I read this article on Pinkbike discussing how they took OSM data, parsed it to highlight mountain biking routes, and are now using it as the base map for their Trailforks mapping site. They built a tool on top of the open data and made something great.

This is really, truly excellent.

This sort of reuse of public, open data in OSM is the exact reason why I contribute to it. The folks at Pinkbike / Trailforks have taken a useful set of data from all over the world, processed it, and made something good. This would not have been possible with the data locked up in Google, MTB Project, or even the stuff contributed directly to Trailforks.

I look forward to where this’ll go. The Pinkbike article mentions that they’ll be reimporting the data a little different in the future, and talks about how they are going to have another article about tagging to better support Trailforks. While OSM has some minimal standards for MTB tagging (eg: mtb:scale:imba) I look forward to a bit more de-facto standard around this.

Leave a Comment

Manistee / Cadillac / Ludington Area Fat Bike Suggestions

A few months back I happened across this page on fat-bike.com about Ken Blakey-Shell and Scott Quiring riding part of the Little O ATV Trail on fat bikes and wanted to try it myself (Video 1 · Video 2). A mutual friend put me in touch with Ken, and within a few days I’d received a boatload of excellent information about where to ride in the area. Ken encouraged me to share the info, so I’m posting it here for public consumption. While I haven’t ridden any of these trails yet myself, the routes sound excellent and something I hope to do in mid-June.

I’m really excited about riding these. Back-country rides like this are something I love, and new trails to explore sound wonderful.


Here are the suggested routes as Ken emailed them to me. I’ve edited these slightly add links, GPX copies of routes, etc, but it’s otherwise his words:

Little O ORV Trail / North Country Trail

The Little O ORV Trail (PDF Map) / North Country Trail (NCT) figure 8 just north of M10 is the easiest and least technical. It is 50% NCT and 50% moto trail with a around half of the moto trail being super good and the other half of it being only ok. The moto trails are fairly sandy and are best on a 4″ tire fat bike setup although 29+ and 26×5″ work OK too. Regular MTB is a no go. The moto trails are wider (4 wheelers use them too) with lots of banked corners and whoops. There are some extended downhills that are super fun. The other half of the ride is on NCT which is awesome in its own right. There is some significant climbs on this loop but it is all pretty gradual and none of the downhills are very sketchy. I normally start and finish on the northern end of the 8 but you could just as easily start at Timber Creek on M10 and ride NCT a little ways to connect up with the figure 8 loop.

  • This is the shortest route cutting out part of the upper 8. If pressed for time, fitness… this gets all the best parts: Strava · GPX
  • Strava link for just the figure 8: Strava · GPX
  • Strava link for the figure 8 plus some extra NCT starting and finishing just north of the Sable River: Strava · GPX
  • You can also start from the NCT Freesoil Trailhead on 8 Mile Rd but that makes for a fairly long ride: Strava · GPX

North and South Caberfae Loop

The other two routes I recommend are between Manistee and Cadillac. One route is north of M55 and the other is south of M55 and both start at the Caberfae Snowmobile Trailhead. Both routes are a combo of moto trail and two tracks. The moto trail is a lot more technical than anything I have seen for MTB trail in the LP  – I often describe them as the most non-IMBA approved trails in the world. They go straight up and down hills, have tons of water erosion caused trenching, exposed roots and rocks and are really challenging on both the up hills and down hills. There are tons and tons of whoops and bermed corners. Unlike the Little O which is a wider 2 track type trail, these trails are tight singletrack. Quiring and I find these trails to be the most fun of any trails we have ridden in the state but you have to like a challenge to fall in that camp. 29+ is the ideal setup but 4 or 5″ fat bikes work great too. You may be able to ride a regular MTB but it would be tough. You can combine the two loops if you want into a monster ride but you need to be in top shape (both upper body as well as normal riding shape) because you are going to get worked. Both loops are equally good so it is a coin toss which to do. I normally break people in on the north loop first because you start out on one of the best downhills around as soon as you start riding the ORV trail.


Maps

Here’s some heavily annotated map snippets that Ken has graciously provided. The base image for these comes from the National Geographic’s Trails Illustrated maps of the Manistee National Forest: 758 Manisteee National Forest, North Trail Map and 759 Manistee National Forest, South Trail Map. I strongly suggest buying the base maps, as the additional context is necessary to find your way to the trails and for understanding the area. These maps appear to be a great compilation of road, ORV trail, and North Country Trail maps all in one. No other map that I’ve seen as clearly shows how they all overlay; something which is incredibly useful for hikers and mountain bikers alike:

Leave a Comment

Broken Derailleur Hanger

For the first time in my life, I’ve broken a derailleur hanger. Yesterday when riding at Bald Mountain Recreation Area, a few miles from my car which was parked at Addison Oaks, I heard a thunk and looked down to see the derailleur in a rather awkward, unhelpful position (photo). Sunset was coming soon, and while I had lights the Oakland County Police who patrol Addison Oaks† are not fond of those who are in the park after dark, so I had to do some quick thinking to get back to the car.

Along with breaking the derailleur hanger, the derailleur cage itself was twisted, so I figured there was no way to get rolling without making the bike a single speed‡. I removed the derailleur, strapped the cable and housing back, broke the chain, and re-connected the chain in the best gear combination I could identify for decent chain tension. While there were occasional shifts up and down the cassette as the chain bounced, this worked well until I was climbing the final hill before Lake George Road.

With a bang the chain had ridden one cog on the cassette higher than intended, tensioning the whole assembly so tightly that I couldn’t turn the cranks. Opening the quick release rear skewer transferred tension to the skewer, bending it, and making things worse. Since the bike would freewheel my only choice at that point was to walk the bike out, hopping on to coast down hills. Thankfully I was only two miles from the car at this point.

I’m still not exactly sure what happened to cause the break, but I can’t help but suspect that yesterday’s crash had weakened it somewhat. Even though was shifting fine and the derailleur appeared straight, I suppose this could have played some part?

Once I got home I set to fixing the bike, and thanks to having a spare derailleur (leftover from making the El Mariachi a 1×9) and basic parts like a spare derailleur hanger, chain, and cable, I was able to get the bike working nicely again. It also gave me a good reason to wash the bike and clean Orange Seal residue from the tubeless valve stems. When the chain bound one cog on the cassette became slightly bent, so now it makes a bit of noise when riding, but it wasn’t noticeable on a test ride. I’ll try to bend it back when I next have the cassette off the bike.

The photo above shows the broken derailleur hanger, and what I believe to be plastic deformation. I find the stretching of the laser etched “Wheels Mfg Droput-25” logo to be particularly fascinating, as it shows how the aluminum stretched before failing. The thin, torn off sliver is interesting to me as well.

After the work my bike is back in order, and while everything seems in place, I need to give it a shakedown ride before I’m willing to take it out on remote trails. With luck I’ll be able to squeeze this in tomorrow morning.

† It seems that junior / trainee officers are regularly assigned to Addison Oaks, and they seem to take a hard line which makes them less than pleasant to deal with. While a broken bike likely would have been a fine excuse for being in the park after dark, I didn’t want to deal with this.

‡ In retrospect after inspection at home, I probably could have gotten the bike well enough to ride out with a new hanger. I’d have had to deal with a bunch of mis-shifts, but at least I wouldn’t have bound the chain and had to walk. This is what I should have done… Oh well, at least it was a nice day and now I have a story.

Leave a Comment

Marquette, MI

With two weeks off of work I took some time to head up to Marquette, MI for some mountain biking focused around the Noquemanon (NTN) Trail Network. Thanks to suggestions from my friends Nick and Marty Shue it was very easy to find my way around and I had a great time and I’m looking forward to my next trip there.

Here’s a dump of my thoughts consolidating information.

Lodging / Location

I stayed at the Ramada in downtown Marquette. Location for this was excellent, with a couple mile easy bike ride (via safety paths / non-road bike/foot specific trails) to both the North and South trail areas. These same trails extend for miles outside of town and would make for good road riding as well. I stayed in room 106, which was a single queen size bed located quite close to an outside door. This was very convenient for riding to and from the hotel. The room itself was nice, although it felt a bit damp in there and gloves/clothes took quite a while to dry.

The Hampton Inn location would also be good location-wise, but it’s quite a bit pricier than the Ramada.

Local Bike Shop

Upon arriving in town I stopped by Sports Rack, located about a block from the Ramada, to purchase an up-to-date trail map and get suggestions for riding. The folks here were extremely friendly, sold maps with all monies to benefit the NTN, and just seemed like a great shop. I didn’t need to buy anything from them, but if the need had arisen I would have gone here immediately. Definitely seemed like a great shop for summer and winter riding.

Food

The following restaurants were recommended to me by Marty, along with my thoughts on each. I would gladly eat at any of these again next time I’m in Marquette:

  • The Vierling: Little more upscale, but still casual and friendly. I had the whitefish with pasta, which was good, but the pasta was kinda lump-ish and together, which might have been caused by all the cheese. Still tasted good, though. Beer was good, even though when walking by the brewery one evening I saw an employee smoking while working in the brewing area.
  • Jean Kay’s: Seems to be proper pasties, nicely located between the North Trails and downtown not far from the bike paths. Good outdoor seating and deck for keeping an unlocked bike. Very tasty, not too heavy, great after a few hours of riding.
  • Donkers’ Restaurant: Candy shop / restaurant with good breakfast. Hash browns seemed a bit oily and I was disappointed that the sausage patty on one of the breakfast sandwiches seemed to just be a typical patty instead of something locally made, but it was still good. I had breakfast here twice.
  • Vangos Pizza: Bar that serves excellent pizza. Ate a small (one size up from a For One) with pepperoni, mushroom, and their house made sausage. Surprisingly good crust. Easy walk from Blackrocks as well.
  • Dead River Coffee: Really tasty coffee. I had a cappuccino while reading All my friends are dead.. I was there early enough in the morning that it was just myself and some employees so I felt a bit out of place (they were deeply discussing coffee roasting quality control techniques and whatnot), but not uncomfortable. This seems like a proper small coffee shop with people who really care about making good coffee.
  • Blackrocks Brewery: Probably my favorite of the local breweries. Great beer, really comfy atmosphere. Lots of bikes locked up outside. Bring food from elsewhere, though. Built in an old house.
  • Ore Dock Brewing Company: Another big name local brewery. Great beer as well, but didn’t feel as comfortable to me, perhaps because it’s more of a large hall-type building. Has pretzels (hot and cold) and popcorn for food, but also allows outside food.
  • Third Street Bagel: Bagel / sandwich place. Ate a breakfast bagel from here which I’d first purchased intending to eat while driving, but after seeing its size I ate it sitting outside the restaurant. Also has good coffee. Both were quite tasty and made for a pretty quick breakfast.
  • Togo’s: Sub/sandwich place. On recommendation of an employee I had the hot pastrami sub with mustard and horseradish. This was a good choice; ate it at Ore Dock Brewing Company.

Trail Routes and Difficulty

To start, the maps on the NTN website are not as up to date as the one which can be purchased at the local shops. Additionally, the purchasable map does not include the 1-2-3 portion of the Harlow Farms Connector Trail which is incredibly useful for accessing the south trails from the Iron Ore Heritage Trail (rail trail / non-motorized path) which runs through downtown and within a couple hundred feet of the Ramada. Signs like this lead the way. Still, this was quite easy to find when actually riding, and both of the main Marquette systems were close enough to downtown that I didn’t regret riding to the trails each day.

Once on the trails, though, the marking is outstanding. I almost never had a problem figuring out where I was on the South Trails, and only a couple parts of the North Trails (in particular in The Cedars section where the trails is very close to the Noquemanon Trail and there are a spiderweb of connectors) where I got a little confused, but I wasn’t lost — I just wasn’t sure if I was on the right trail. It was still loads of fun, though.

Anxious to get out and ride, on my first day of riding I found myself on a black diamond trail, and this is where I had my first fall. I was trying to ride up some rocks, got my wheel stuck, and just toppled over. I slid a bit, but wasn’t hurt and was more amused than anything else. This photo shows where I fell, which in retrospect (and after riding other trails there) was really quite an easy spot. I think I may have been arrogantly pushing a bit that first day.

What I learned was that the trail designations are pretty spot on to the IMBA descriptions. Black diamond is about my upper limit, and these seem to either be because of exposure (steep drop-offs) or technical challenges, or a mix of both.  I can deal with both by walking, but my slight fear of heights makes it harder to deal with the exposure. On my last day of riding in Marquette I found myself on a trail called Gorge-ous which had enough exposure in spots to nearly induce a panic attack in me. It’s beautiful, but it snakes its way down the edge of a gorge up above the Carp River, and the drop-off would cause some serious problems. This photo shows one of the more exposed spots, complete with a repurposed truck mirror to allow riders to see around the corners (these are two way trails, remember).

I mostly enjoyed the blue square (intermediate) trails, as there was pretty much nothing on these I couldn’t ride comfortably. They were nice for just rolling around and seeing how beautiful the area is. When I’m up in Marquette the next time I’ll likely try out more of the black diamond stuff, but after being a bit thrown off by a technically difficult group ride on Wednesday evening I was playing it safe.

Group Ride

The folks at Sports Rack told me about a group ride at Al Quaal Recreation Area in Ishpeming on Wednesday nights at 6:30pm. Wanting to see some new trails I headed out for that. This ride apparently breaks into three groups (A, B, and C), and I made a mistake when I chose the A group. If/when I go back I’ll likely ride with the B group.

I’d heard that the A group was fast, and that Al Quaal was mostly XC ski trails with small amounts of single track. I’d also heard in the parking lot that the single track is about as difficult as the Blue loop at Marquette South, which sounded fine to me. I could ride hard on the wider stuff, then deal with the single track. This turned out to not be the case, the trails were some of the most technical and rocky that I’ve ever personally been on and I was in way over my head. There were numerous 8″ – 12″ rocky step-ups and climbs far beyond what I’ve ever ridden before and thus I walked quite a bit. For the part I rode there was actually very little XC ski trail, even though the climbs and downhills on it were quite fast and fun.

This held the group up a great deal, so after making my way through a bit of it I was going to head back early. Very kindly of them the group didn’t want to let me head off alone somewhere I hadn’t been before (even though I knew I could find my way back) so I kept on a bit further, before splitting off and heading back to the cars with someone who was cutting out early named Don. After this the group carried on to some other trails which apparently have considerably more exposure, including rocky ledges looking down at the tops of trees. I’m glad I didn’t carry on to this area.

(This technical loop seems to be partially labeled with pink signs indicating the Quaal Loop. It does not yet seem to be mapped.)

Later that evening I ran into two of the B group riders at Blackrocks who I had previously talked to in the lot, and that conversation confirmed that I was in over my head. It sounds like the B group would have been much more my thing… More XC ski trails, more single track but not things as hard as what the A group did. Whoops.

I just hope I didn’t squish the group’s plans too much. I definitely learned something that day, though.

Routes Ridden

In the three riding days in the Marquette area here’s where I went, as illustrated via Strava:

After Marquette…

After leaving Marquette I headed down to Glacial Hills in Bellaire. I’d heard of this trail for a couple years, and finally having the chance to ride it I wish I’d gone there sooner. This is incredibly flowing, quite easy (but fun) machine-built trail. I was amused that it was about the same difficulty as the Grom (Beginner / Kids) Loop in Marquette, but for almost 30 miles. It was a blast. (Strava data.)

Once I was done riding at Glacial Hills (mostly because the sun was setting) I headed to Traverse City and checked into a hotel, staying the night so I could attend an Iceman Out-and-Back ride put on by Einstein Cycles. This was a not-fast-paced-but fun ride from the shop out to Kalkaska, then back via most of the Iceman route. Due to pacing, stops to chat, and getting turned around on some of the newly cut trail segments we didn’t have time to do the full route, but it was still a good time. It was nice to spend some time in the northern Lower Peninsula riding as well; which is completely different from what’s found near home, and different still from Marquette. (Strava data.)

Photos

Photos from this trip to Marquette, including a couple along the drive and riding to and from there, can be found here.

1 Comment