DESCHUTES RIVER RECEIPT

If you’re on mobile and want to skip to the full map, tap here.

This map was a collaborative effort with Nick Parish over at Current Flow State. Nick reached out to me after seeing one of my previous ribbon maps and pitched the idea of doing a map of the Deschutes River in central Oregon that would be more geared toward fishing/recreation and could potentially raise money for the Deschutes River Alliance. I thought it was a cool idea, and so off we went. While we first talked about the project in spring 2025, I didn’t actually start working on the map in earnest until winter 2026. Mostly because a lot of my free time was soaked up trying to move into and fix up a first house with my wife. In the meantime, however, Nick tracked down a specific receipt printer and paper he thought would be good to use. Unlike the basic stuff I used for the Wakulla and Boston Marathon maps, Nick wanted to try a tougher water-and-tear resistant paper that the Oregon Fish and Wildlife service used to print their fishing licenses on. And whereas the printer I had only supported printing at 180 dpi and on paper either 2 or 3 inches wide, the Zebra GX420D we’d be using for this project could print up to 4 inches across with a resolution of 203 dpi. Such luxury! As far as the map design went, it was a similar process to the other ribbon maps I’ve done, so I’ll just hit some of the highlights here and you can read those other posts if you want to know more. You can also read an interview I did with Nick for Current Flow State.

The biggest difference with this ribbon map is that is has some basic shaded relief, which was a bit of challenge to include. While I considered showing terrain and elevation on previous ribbon maps, it ultimately never made sense. Two were in Florida, which is famously flat, and the other (Boston) was so packed and narrow that it simply wouldn’t fit (although I did used elevation data to show the uphill segments on the route). Terrain felt important for a map of the Deschutes River, however, as it cuts through steep gorges and valleys and is flanked by a slew of creek-laden canyons. The tough part was that while previous ribbon maps used only vector data (points, lines, polygons)—shaded relief is derived from elevation data, which typically comes in a raster format. My workflow until now had been to gather all my data in a GIS software, do a bit of processing and adjustments as needed, then bring it all into Adobe Illustrator where I could manually cut, twist, and warp everything by hand (mouse). Doing that to rasterized shaded relief would’ve been nigh impossible, and would’ve left really obvious smear marks no matter how deft I was with the smudge tool to try and fill in the gaps left by cuts and rotations. The other option—vectorize and import my shaded relief as simple shapes first, then manipulate those—would’ve been nearly as difficult to work by hand but presented another problem:

These ribbons maps have no true north. The orientation is shifting all along the length of the map in order to keep the river contained to a linear layout, which is fine because the only direction we really care about is up river or down river. When you do a shaded relief, however, you typically pick an angle/direction for your light source (northwest around 315°, for example) to cast the shadows from. But if the orientation of the map changes all along the ribbon, the shadows stop making sense. You’ll have shadows on “north” or top faces pointing up in some places and shadows on faces pointing “south” or down in others. It would be difficult to interpret the ridges from valleys—relief inversion to the extreme. To solve this, I would need to manipulate or project my elevation data in to my layout first, then calculate the shaded relief.

After some fiddling around, I settled on a solution using Blender. I’d experimented with weird projections in Blender using UV maps many years ago when I worked on my Apalachicola River table, where instead of straightening out a river, I curled it into a spiral shape. I won’t go too deep on UV maps here (there are plenty of tutorials out there on what they are and how to use them), but their basic purpose is to map 2D textures to 3D objects. If you think of the orange peel map projection example, which demonstrates mapping a 3D sphere to a 2D plane, UV mapping is sort of the reverse process: how to take a 2D texture and cut/slice it so it can be fit to a 3D object. In this case, however, I’m mapping one 2D object to another 2D object. The video below sort of demonstrates this, where I’m using an image of the river path as a guide to position my UV map (right) and the resulting elevation data is warped to fit (left).

After completing this UV map, I could render out the projected image, send it over to GIS, and calculate aspect data from it. In this case I just wanted a simple 3-tone relief, rather than a full-on hillshade. So I classified the aspect data into three 60°segments covering 60° to 240°(or picture 2 to 8 on a clock face), and gave each one a different shade of grey. Once I had this UV map set up in Blender, I could then pass whatever other images I wanted into it (assuming it had the same aspect ratio as my elevation raster) and have them warped to match.

To bring in the campsites, for example, I exported out a raster image from my GIS software that had a dot for each location, passed that image through my Blender UV map, rendered it out, and then sent it to Adobe Illustrator. In Illustrator, I could use the Image Trace functionality to re-vectorize those dots into objects. Then, using Nathaniel Kelso’s handy Find and Replace script, I could replace all those objects with a tent symbol I made. Rinse and repeat for all the other points of interest.

Roads and water lines were similar, but needed a bit of manual clean up after. It helped to adjust the material settings in Blender to use a Color Ramp set to “Constant” to get a pure 1-bit black and white image as the output, with no shades of gray in between or aliasing. This helps the Image Trace tool sus out the lines from the raster image into nice vector paths. To my knowledge, Blender doesn’t do SVG files when it comes to textures, which is why I had to go from vector to raster and back to vector. But perhaps in the future this workflow could be streamlined.

In the end we did an initial print run of 400 maps, and Nick got them distributed to various fly shops in the area and even brought some out to the 2026 Troutfest in Maupin, Oregon. After just a couple of weeks, more than 300 of had been sold, which is still hard for me to believe. You can order one for yourself at Current Flow State, if interested (and if they’re even still available!). 100% of the money from sales goes to support the Deschutes River Alliance.

Aaron Koelker