It’s been a good while since I wrote a tutorial, so let’s take a moment to learn something new! Today, I’ll show you a way to create scale rankings for cities. This is a technique I have been using for years (and occasionally mentioned), but I’ve never really written it up in useful detail. Scale … Continue reading Urban Relativity →
Show full content
It’s been a good while since I wrote a tutorial, so let’s take a moment to learn something new! Today, I’ll show you a way to create scale rankings for cities. This is a technique I have been using for years (and occasionally mentioned), but I’ve never really written it up in useful detail.
Scale rankings are used in some GIS datasets to indicate how “important” something is to include on your map. Maybe you’re making a small reference map of a state, and you don’t have room to show every city. How do you choose which ones to include? A common answer is to simply show all the most populous ones. You can pick a threshold and show all cities that have populations above it.
This works fine in many cases, but there are downsides. For example, here are the fifteen most populous cities in Michigan, according to the 2020 census:
Notice how the majority are suburbs of Detroit. These cities have a lot of denizens, but they’re not necessarily important on a statewide basis. If you asked residents where they lived, many of them would say “the Detroit area,” rather than naming their city. On the other hand, the map doesn’t show a place like Kalamazoo (where I grew up). It’s a true city: a transportation hub with a university, manufacturing, and other things you’d associate with a population center. It’s more urban than many Detroit suburbs, even if it has a lower total population. It makes sense to include Kalamazoo on a general reference map ahead of a suburb like Sterling Heights; the former is a bigger part of the state’s spatial “picture,” and showing it would improve a reader’s understanding of the lay of the land.
Instead of choosing cities by using population, we need some other metric of “importance.” Some datasets already have this built in. Natural Earth datasets are a great example: you can filter cities (and many more datasets) based on the scale rankings included in the attribute table. As the Natural Earth team says on their website: “We favor regional significance over population census in determining our selection of places.” A small town with 1,500 people may not be very large, but if it’s the biggest place in a rural region, it could be important to show.
Scale rankings of cities in Natural Earth’s populated places dataset.
But, Natural Earth doesn’t cover everything. It’s got most of the cities you might want for a regional map, but if you’re zooming in, you could need to develop your own set of rankings for smaller locations. So let’s discuss one way that I do that.
First, Consider Mountains
My method for generating city scale rankings is derived from one that I originally developed for showing terrain. You can read my article about it by clicking here. In brief, I modify a digital elevation model (DEM) to turn it into what Daniel Coe calls a relative elevation model (REM)—one that encodes terrain not based on its absolute height, but how it compares to that of the nearby region.
Why might you want to do that? As an example, the Appalachian Mountains are not that big when compared to the Himalayas, and that might make them show up poorly on a world map (depending on how you choose to depict terrain). But if we instead generate an REM and use it to style mountains based on how tall they are compared to their surroundings, we can emphasize locally important features even if they’re fail to rise to the lofty heights of Mt. Everest. Below are a couple of figures from the aforementioned paper. In the first, terrain is depicted using greyscale tints based on absolute elevation, and in the second, based on relative elevation.
If you’ve ever played around with Photoshop’s HDR Toning tool, that’s pretty much what this technique does. It adjusts the contrast for each region, to show additional detail.
Now, if we simply swap out “elevation” with “population,” we can use the same technique to answer the question: “how populated is this place relativeto places nearby?” Let’s go step by step through the process of calculating this for cities in Michigan.
Method
First off, we need some population density data. How to get/generate this will depend on the area you’re interested in mapping, and is beyond the scope of this tutorial. For this specific example, I started with vector data from the US Census. I downloaded a shapefile of census blocks, joined them to a table of 2020 population counts, and calculated the population densities.
Then I rasterized my vectors, with a pixel size of 25m (and working within an appropriate statewide equal-area projection). The subsequent raster is about 26,000px wide—which is ridiculously huge—but blocks can be pretty small and it’s important to capture most of the detail.
Next up, we can start calculating. We want to know “how populated is any given place, relative to places nearby?” In mathematical terms, we can think of that as: “for any given pixel, how many standard deviations is it above or below the neighborhood mean?” If we go back to the origin of this technique in depicting terrain—and hopefully you read the paper I linked above—it might make a little more sense. Imagine you’ve got a little hill, in the midst of a vast, flat plain. That hill is much higher than the mean elevation of its flat neighbors, so that’s a clue that we should mark the hill as important. But maybe that hill is instead a member of a whole range of hills, and isn’t actually that unique or special. That’s where calculating the standarddeviation comes in. It tells us how bumpy things are in the neighborhood, and whether our hill’s prominence is unusual or ordinary. Together, these two statistics can give us a rough sense of how important the hill is. It gets a higher score if it is in a relatively smooth area (a low standard deviation) and if it is taller than its neighboring terrain.
We can apply this same concept to our raster of population density. If there’s a small concentration of people in an area that’s otherwise mostly empty, that’s worth noting. And if our small town is just one of many similar towns in the area, the standard deviation calculation will let us know that it’s perhaps unremarkable.
Whether it’s elevation or population density, the analysis depends heavily on what you think of as the “neighborhood.” For any given pixel, how many neighbors should we be comparing it to? There’s no right answer here. The fewer neighbors you examine, the more likely your individual town/hill is likely to be seen as important. The right choice will depend on your data and purpose, and I recommend experimenting. For this tutorial’s example, I’m going to compare each pixel in my raster with every other pixel that is less than 100km away.
GIS-wise, most of the procedure is simple. First I’ll run a neighborhood statistics tool (r.neighbors in QGIS, focal statistics in ArcGIS) to generate a new raster that shows, for each pixel in the original population density raster, the mean of all of its neighbors.
Running this analysis can take a long time, depending on your neighborhood size and your total raster size. There is a way to dramatically speed this up, and I’ll discuss it later. So, don’t run anything for now until you’ve read the whole blog post.
Once I have calculated the mean, I will use the tool again to find the standard deviation in each neighborhood.
Next, it’s time to use the raster calculator in QGIS or ArcGIS to run the following simple formula:
(original population density – neighborhood mean) ÷ neighborhood standard deviation
When we run that calculation, we get this:
We can now see, for any individual pixel, how much more (or less) prominent its population density is vs. the whole neighborhood’s. We can call this the relative population density (RPD), and you can see above how it gives more prominence to isolated communities.
Now we can use this dataset to figure out the relative prominence of cities and towns. First off, we need the boundaries of all the settlements. I downloaded another Census shapefile with all of those. From there, I can use a zonal statistics tool (I believe it’s called the same thing in ArcGIS and QGIS) to calculate, for each individual polygon, what the median RPD value is within that polygon.
And then we can multiply the median RPD by the settlement’s area to get a sort of “modified population value” for each settlement. Isolated places have their populations boosted vs. reality, while cities that are part of a conurbation have theirs reduced by the influence of their neighbors.
And here is a map of our top 15 cities after we’ve done the analysis.
Notice that the distribution is much better, and the Detroit suburbs less prominent. Depending on your familiarity with the state, you might say, “Well, those aren’t the fifteen places that I would have picked as the best ones to show.” And I agree. This method does not eliminate the need to make subjective judgments. Changing the neighborhood size will get you a different set of cities, and it’s up to you to decide what is the best group. You’ll need to experiment to find a parameter that gets closer to what you think looks “right.” Once you have the analysis results, you might not want to use them as-is. Sometimes I create a custom mix, combining the absolute population rankings with the results of my relative population analysis. I might do that as a weighted average, or I might select the top cities from both the absolute and relative population lists.
Other subjective factors besides relative population can also come into play. For example, maybe a city is small now, but has outsized historical or cultural significance. Or maybe it’s a regional capital. The method described here does not account for things like that, and you may want to manually adjust your results for that purpose. In the end, plenty of judgment is needed to decide what are the most “important” cities for your map, but the RPD method can offer really valuable input for determining regional importance.
Interrupting the tutorial to say thanks to all my patrons, whose support helps keep this blog and its tutorials going! If you’d like to support my efforts, you can donate via the links below. Also, just spreading the word about my work is a big help! Finally, consider subscribing, to make sure that you catch every post here.
When generating an RPD dataset, make sure you have enough neighbors. In the Michigan example, notice that my original population density data stopped at the state boundary. Neighboring states were shown as having zero population. That’s going to mess up the calculations: as an example, Menominee—a small city in the top left of the above map—is likely only shown here because the calculations found it to be next to the empty state of Wisconsin. So, if I were doing this for real (instead of a contrived example for a tutorial), I’d want to include population data for the regions surrounding Michigan.
I mentioned before that the neighborhood analysis, while straightforward, can be slow to run. It can take hours (or worse), especially on large datasets and/or with large neighborhood windows. But, there’s a way out: when finding the mean and standard deviation values, you don’t really need to use the full-size raster. Think of it this way: the larger the neighborhood you choose, the less important each individual pixel becomes in the calculation, and so it’s less important that your raster has a lot of pixels. If you have a 10,000-pixel-wide map and you calculated a 500-pixel neighborhood average, you’re going to get basically the same result as if you’d cut everything in half and done a 250-pixel neighborhood average on a 5,000-pixel-wide raster. The bigger your neighborhood, the fuzzier the result looks, and thus the more useless it is to have a very high resolution raster. That’s why these two neighborhood analysis results below look identical, even though one took over an hour to calculate, and the other was finished in under a minute.
Top image: neighborhood mean of a population density raster with coarse, 250m pixels. Bottom image: neighborhood mean of a raster with finer, 75m pixels. Both images use the same neighborhood mean size of 62.5km.
So I’d suggest making your population density raster coarser if the analysis is running slowly. Then, once you’re ready to use them, upsample the resulting neighborhood rasters to match your orignal population density raster. We want to preserve and make use of the full level of original detail in the population density raster, since it’s not fuzzy, and we also want the result of the calculation to be kept at a high-resolution so that when we do the zonal statistics, those small city polygons are sampling a lot of small RPD pixels.
Generating a rank ordering for cities like this can be pretty helpful when figuring out what places to show on a map, but it’s not the only way to determine importance. Other subjective factors come into play, and your own judgment will be needed. But I hope that the method I’ve described above can help ease some of the decision-making.
I make most of my living doing freelance mapping and GIS (and it’s been very busy lately, hence why I’ve not written here in months). Clients come to me and ask me to deliver specific things, and I prepare whatever they need. But I also make a lot of things that no one specifically asked … Continue reading Financial Transparency: Print Sales Edition →
Show full content
I make most of my living doing freelance mapping and GIS (and it’s been very busy lately, hence why I’ve not written here in months). Clients come to me and ask me to deliver specific things, and I prepare whatever they need. But I also make a lot of things that no one specifically asked for—and when I’m done with those, I often put them up for sale.
So many side projects.
Today I want to show you behind the scenes of the “selling mappy goods” side of the business, in my tradition of being open about my finances. I can’t say whether my experience is typical, but you might find it interesting if you’re thinking about selling mappy things.
Background
First off, it’s important to understand that earning money isn’t my primary motivation for creating these designs. Don’t get me wrong: I’d love to make a living just selling prints, but I’m not expecting it to ever happen, and that reality won’t stop me from continuing to create things. I make them because it’s enjoyable to do so, and when I sell one, I’m excited to see that someone else likes my work enough to give it a place in their home. The income I receive is just a nice bonus. This is not only true for me, but for many of the folks in the Independent Map Artists.
Before I start diving into the details, here are the big numbers: in 2025, I sold 174 items, and made a total of approximately $2,410 USD in profit on $7,498 in sales. It’s a welcome bit of passive income, but I am quite far from something that I could live off of. On a per-item basis, that’s an average of $14.67 in profit on a $43.09 sale. Here’s how that breaks down:
Printing is the cost of producing the physical items that people paid for.
Shipping includes not only postage, but also cost of tubes, labels, etc.
Platform fees cover what I get charged to sell my items on various websites. For example, in order to sell on Etsy, I have to pay them a fee for each item in my store, plus a portion of every sale I make.
Ads aren’t something I spend on often, but I have tried them on Etsy.
Processing is what I am charged by payment processors like Stripe and PayPal. They charge your credit card and pass the money on to me, while taking a portion in the process. Sometimes I can avoid these by getting people to pay me with Venmo or a check.
It’s hard to figure out what a map should cost, so I just arbitrarily aimed for about a ⅓ profit margin (which the numbers above reflect), because that felt comfortable to me. But I didn’t do any real research to arrive at that number, and so I’d be curious to know what others set their margin at.
Of 145 orders, 125 (86%) went to the United States, which is where I am based and probably were the vast majority of people who’ve heard of me live.
Below, I’ll break down all the stuff I sell, and how. It’s worth noting that my situation is probably more complex than many other sellers. I work with a variety of sales channels and production partners, a haphazard approach that developed organically. Each way of producing and selling my maps made sense at the time, but now I’m (slowly) working on consolidating some of them.
TerrainLines Prints
A couple of years ago, I started designing sketch views of famous peaks, and I branded them as “TerrainLines.” I set up an Etsy store to sell posters, mugs, and decals with these designs.
I wanted to try Etsy because it already has a built-in customer base. I figured that people would find my work more easily than stumbling across my personal website. And, in 2025, that seems to have been borne out. The TerrainLines designs formed the bulk of my sales last year. The downside is that this easy customer access costs: money Etsy takes a decent-sized fee from of each of my sales. Of course (as we’ll see), I sell different items on Etsy vs. other stores, so maybe this success on Etsy was simply (or partly) a matter of people just liking these particular designs more than my others.
In any case, I sold 73 TerrainLines pieces — 45 posters, 16 mugs, and 12 decals, and profited about $550. Most of that was through Etsy. As an experiment, I also listed the poster designs on eBay, but I only got 2 sales there, vs. 71 on Etsy.
I don’t have commercial printing equipment, and so when a customer orders from Etsy, a print-on-demand company called Printful automatically produces the mug, poster, or sticker, and ships it out to them. This saves me effort (at the cost of having to pay more for printing than if I were doing it myself).
Etsy tracks various interesting statistics about each of my listings: how many people looked at them, how many people marked them as a “favorite,” and how many bought them. Of over 5,000 people who clicked on my products last year, about 3.9% favorited my items, and 1.3% bought them. That 1.3% is the “conversion rate” — what percentage of people who look at your item decide to buy it.
I offer a few dozen different designs, based on my guesses of what people might find interesting (and I also made some that I figured no one would want, but were simply ones I wanted to have fun making). Out of 39 poster designs, by far the most popular is the Seven Summits (12 sold), which shows the highest peaks on each continent:
On the other hand, 16 designs (41%) didn’t sell a single copy. Surprisingly, the group included Mount Everest. Less surprisingly, it also included Mount Hadley (on the Moon).
Most of them are listed and sold on Zazzle, which is a print-on-demand company that also runs a marketplace. The customer orders on Zazzle’s site, Zazzle handles the printing and shipping, and then they send me a check every year or so with my profit. I chose them because a colleague recommended them to me long ago, and it’s been very easy to work with them. But as time has gone on, I’ve become unhappy with their print quality and prices, so I’m working on shifting these designs to other sales/printing partners.
I also sell these maps through partnerships with two other mappy colleagues. A few of my designs are exclusively sold via Cameron Booth’s transitmap.net store. He’s got a built-in customer base of transit nerds, so these posters are a good fit. He also does the printing on his end, and produces a higher quality product than Zazzle at a lower price. I also have one design of Rhode Island’s rivers that is sold exclusively at The Map Center, in Pawtucket, RI.
In 2025, I sold 21 river transit map prints and profited about $250. Like with the TerrainLines prints, I have many different designs, but only a few sell in a given year. Out of 41 different designs, only 7 sold a copy in 2025. But, if a design doesn’t sell, there’s no real financial harm to me, and perhaps someday someone will want one. When someone buys one of the items that only sell rarely, it’s fun to think about the connection that’s made. Maybe they despaired of ever finding a map of the Nelson River watershed, until they stumbled upon mine.
Chiron
Last year, I finished up a poster for fans of a late 1990s sci-fi video game: Sid Meier’s Alpha Centauri.
This was a big undertaking and a labor of love. I decided to sell prints because I knew that a small subset of nerds (like me) would want to proudly display it. I only sell this item through direct email inquiry. Two reasons for this:
It’s fun to connect directly with nerds who appreciate this fandom the way I do.
I do not own the rights to the game, and I don’t want to antagonize the lawyers of a multi-billion-dollar corporation (and they’ll obviously never read this confession on my blog). However, the company has enough wealth that I definitely don’t feel bad making a bit of money off of this effort.
Through word of mouth, I sold 20 of these in 2025, almost all within a period of about two months. Possibly I’ll sell more in the future, if another fan stumbles upon the blog post, but I expect I have already nearly saturated the market. These posters were produced via Printful, though I handled all the sales transactions manually via PayPal and Venmo.
I earned about $440. This sounds good at first, but this is a good time to weigh it against my labor. I don’t know exactly how long it took me to design this poster, but it was many dozens of hours, executed over years. If I had to guess, maybe 50 hours? So, that works out to under $10/hr for my cartography work. Again, this is not a complaint—it just goes to emphasize what I said above about both me and many of my colleagues: we are doing this first for our own enjoyment and our love of sharing, not because it pays a good rate. Sometimes we might get lucky and find a big audience, but that’s more the exception than the rule. And it’s the same story if you tally up my earnings on the other items above.
Asymmetric Monstrosity
Besides Chiron, the other large hobby project I released last year was my physical world map in the Asymmetric Monstrosity projection.
This one is sold on a free little web store that I have, so it only attracts customers through my own website and social media (for example, by clicking the link above!). I also just remembered to add it to Etsy to see if anyone there goes for it. You know, someone who’s shopping for a gift online and thinks, “this will be perfect for torturing my loved ones!”
I earned about $400 in profit by selling 33 of these in 2025 (printed via Printful), though the majority of that was some bulk orders (a set went to The Map Center, and another set to customers of the Map of the Month initiative that I mentioned last year). I’m excited to see it spreading out into the world and getting people to think about projections more.
Landforms of Michigan
For several years I’ve been selling prints of my Landforms of Michigan map, which is a big poster showing off the physical terrain of my beloved home state.
This one is a bit unique. Years ago, I ran a Kickstarter to cover the cost of ordering about 1000 printed copies. I sold a few dozen during the campaign, and now the rest sit in my office. I sold 11 of them in 2025, which is higher than normal. Usually I only sell about one per year. I ship these myself, and since the cost of printing was already covered by the Kickstarter, they are mostly pure profit—$175 in total for 2025.
You might ask: why not do this with my other designs? Bulk printing would allow me to drastically reduce my printing costs. This would allow me to sell at a lower price and still earn a higher profit. A couple of reasons:
It’s a big upfront expense that can take years to pay off. And the risk is just too high — even if it let me significantly lower my sales prices, I don’t think that my designs would sell in large enough quantities for a bulk printing to make sense.
I would need to keep hundreds or thousands of maps around my home (or pay for storage).
I would have to do much more labor — packing and shipping every order.
For now, print-on-demand services make the most sense. Easy for me, no risk, and no inventory to store. My designs just don’t sell enough copies for me to expand my operation. And in the past, I’ve seen colleagues get stuck with hundreds of unsold maps.
Cyanotypes
While most of my works are printed by third parties, I do print a few of my own maps using the cyanotype process. This is a nineteenth century technique for making blueprint designs, which you can learn more about here.
I use expensive materials in making these, so they cost far more than most of my other maps. I sold 12 of these last year, which was a significant improvement on years past (where I often went over a year without selling a single one). My profit was about $700, but unlike everything above, this is very much not passive income: the process is rather laborious (I can make about 1½–2 prints an hour), and I sometimes mess it up and have to start over.
Odds and Ends
Together, the items above account for 98% of the things I sold. I also sold a handful of other items: a couple copies of my Lake Michigan Unfurled map, one Isle Royale plan oblique poster, and a custom TerrainLines shirt someone requested.
And, of course, there are all the items I have listed that I didn’t sell in 2025 (though I have sold them in the past): Metropotamia, Round Islands, Ways of the Framers, and many more. All told, across all platforms, I list 142 different products for sale, of which 20 sold in 2025 (14%).
One last note on labor: I don’t just sit back and let the money roll in. Once the map is designed there’s a trickle of steady work to keep the prints flowing to people. I spend time communicating with (potential) customers, preparing shipments, creating mockup images, tracking money, and more. Probably I’d make more money if I spent more time on this part of the hustle.
So there you have it: a look inside the life of someone who sells mappy things on the side. Earnings and sales can fluctuate wildly from year to year. For example, in 2025, my numbers were inflated by selling a few dozen pieces to The Map Center and to folks in the Map of the Month club.
As to the future, I have noticed that, while they bounce around, sales of any individual item tends to decline over time. For example, during the most recent holiday season (Nov–Jan), my Etsy TerrainLines store received about ½ the visitors it did during the previous one. But, that’s all the more reason for me to keep making things. And maybe do a better job reminding people about items I made years ago that they can still buy.
I hope this has all been useful for someone! I certainly learned a lot while tallying up the data (for example, I sold about 3 times as many items as I would have guessed). If you’re interested in taking a deeper dive into printing services, sales platforms, and more, the Independent Map Artists has a handy guide for you that summarizes the experiences and wisdom of quite a few folks who sell prints online.
If you benefitted from this breakdown of my business, consider clicking one of the buttons below. Your support helps me continue sharing information like this! Also please share my work with others if you enjoyed it—it’s a big help!
It’s been a summer full of side projects here. Which is a very good sign — I used to do many, many side projects, but for the last couple of years, poor health has left me with reduced energy, and my output dropped off significantly. It’s nice to feel inspired again, in so many directions … Continue reading A Sketch of Isle Royale →
Show full content
It’s been a summer full of side projects here. Which is a very good sign — I used to do many, many side projects, but for the last couple of years, poor health has left me with reduced energy, and my output dropped off significantly. It’s nice to feel inspired again, in so many directions at once.
I’m pleased to share with you my first-ever map of a US National Park. It’s one I’ve not yet been to, though I’m hoping to change that in the coming years.
I’m making 30×15 inch prints of this available, but be warned that it’s pricier than my usual work: this map contains a lot of very fine details, and the print-on-demand services that I have used in the past were not quite able to achive the quality that this piece needs. So, I need to work with a much more expensive printer geared toward fine art.
While this map is free to download, it took a long while to make. So if you grab a digital copy, consider clicking the buttons below. Your support helps me continue doing things like this! Also please share my work with others if you enjoyed it—it’s a big help!
This project began because I wanted to continue experimenting with the hachure methods that I’ve talked about many times in the last year or so. I’ve done a number of simple terrain views using these methods, but I’ve hardly made anything that was more map-like: i.e., featuring more layers beyond the terrain. However, I’ve recently developed enough experience with my new methods that I finally felt able to take this on. I won’t be going into the specifics of the hachure method here. I’ve already written some articles that are awaiting publication, and I’ll post those here when they’ve been reviewed and adjudged to be ready for public consumption.
Unlike quite a number of my colleagues, I’ve never made a map of a national park before, so I thought it would be a good item to mark off my cartographer checklist. And, since I’m always trying to share my love of the Great Lakes, I chose Isle Royale, which is, I am informed, the most re-visited US national park.
I created this map with a plan oblique view, which is a fun hybrid of a top-down view and an oblique view (such as you’d see from an airplane window). I’ve known about this technique for years, but I’d never had an excuse to use it. Below you can see a simple view of the terrain in plan view, oblique view, and the plan oblique that I did.
Basically, plan oblique allows you to view all the mountains and ridges and such from an oblique angle, yet it maintains everything in its correct horizontal position as though you were still viewing the island from a top-down position.
Technically, it’s not quite a proper plan oblique view, as there are some slight distortions in the way I executed it. But, they are small enough to be unnoticeable. if you’d like to know how to do this correctly in Blender, Andrew Tyrrell posted about it on Bluesky, and that’s the method I’ll use next time to get it perfect.
The hardest part of this map was the icons. It was important to me that they looked like small 3D objects, rather than more abstract, flat items placed upon the landscape. However, I am not a great illustrator, and there was a lot of trial and error, and a lot of stealing ideas from other peoples’ icons. But, I’m pleased with how they came out.
The labels are done in a typeface I picked up a long time ago called Bolton. It feels to me like it’s got an Edwardian character. It’s wobbly in a way that pairs well with the hachure lines, while not looking too manual.
There is a lesson I’ve often shared with classes and colleagues: when choosing a typeface, make sure, in advance, that it’s got all the pieces you need for your map. I didn’t do that, and it turns out Bolton has a pretty limited set of glyphs. I had to concoct my own fractions and make some other tweaks—for example, the commas look too thin, so I had to change their weight manually. But, I liked Bolton’s look well enough to stick with it.
I originally designed this to be printed at a size of 24 by 12 inches, but after getting some test prints, I decided to scale it up a bit, and the final print size is 30 by 15. It still has quite a few fine details, and could easily be made larger. But, I liked the idea of keeping the linework very fine on the print, and rewarding a reader who’s willing to spend a long time with their face close to it.
I’m excited to see my oblique hachure method finally making its way onto a map, and crafting this piece has also renewed my interest in making the trek up north to finally see Isle Royale. Maybe I’ll bring a copy along with me, when that time comes. Meanwhile, I’ll be showing this off at NACIS this year, so if you’re headed to Louisville this October, check it out!
Gentle readers, I have just wrapped up a fun side project that will be of great interest to a very small number of you. The result of one of the most technically demanding efforts of my career, I am very pleased to share it with you. Most of you will wonder what this place is, … Continue reading Planetfall →
Show full content
Gentle readers, I have just wrapped up a fun side project that will be of great interest to a very small number of you. The result of one of the most technically demanding efforts of my career, I am very pleased to share it with you.
Click to have a look at a detailed version. Contact me if you’re interested in a physical copy.
Most of you will wonder what this place is, but I hope that, for a few of you, the names clicked into place in your memory. This is the planet Chiron, the setting (and one of the main characters) of Sid Meier’s Alpha Centauri—a computer game from 1999 that has a cult following; I count myself among the cult. I know many of you are, as well (and if you have a few tens of dollars and want to express your fandom by obtaining a physical copy of the map, you can email me at somethingaboutmaps AT gmail.com).
I could go on about the game—which is deep and thought-provoking and has a remarkably beautiful and carefully considered visual language—but I’m here to talk about the map. This project pushed my skills into some new places, so even if you don’t care about the game, I think it’s worth talking about the technical details behind it.
But first, before we get in to those details, I want to mention something that this project helped teach me about the difference between real and fictional maps. Recently, after I’d told someone I was a cartographer, they asked if I mapped real or fictional places. To an outsider, it’s reasonable to put those two things on equal footing. But, to me, they felt like entirely different things. Other than the map above, I stick almost exclusively to the real world, and I observe this to be true for the majority of my colleagues. As I was grappling with this person’s question, I realized that this split might be because fantasy maps require a different (but overlapping) skill set than real maps. If a fantasy or sci-fi author asked me to construct a map for them, I would need to sit down and draw something new from scratch. I’m not trained to work that way. All of my experience centers on manipulating and styling geographic data, not on creating that geographic data.
Some mappers can, and do, handle both fictional and real places, but a lot of us, myself included, are primarily skilled in cooking with ingredients someone hands us, rather than growing the ingredients ourselves. Thus, the only reason I was able to make a fictional map was because there were actual pre-existing datasets I could use to build it.
Before we jump in, I’ll mention that while this map is free to download, it was quite laborious. Your support helps me continue doing things like this, so consider clicking the buttons below, and/or sharing my work with others if you enjoyed it—it’s a big help!
The game of Alpha Centauri is played on a map. The program can make up a new, random map for you, but there’s also an official, built-in map of the planet, carefully crafted by one of the game designers, Chris Pine.
The official map is 128 × 64 diamond-shaped pixels. Importantly, each pixel has several attributes: elevation, rainfall level, rockiness, and more. These attributes were the basis for my mapping. I sampled various datasets from the in-game map, and then used them to construct my poster. Though, that was often easier said than done.
Part of the game map. Note the pixel highlighted in the center of the map. In the lower left, we can see data about the highlighted pixel: its elevation, the fact that it is arid and rocky, the presence of native lifeforms (xenofungus), and that it is at coordinates (16, 50).
I began by tackling the elevation data. While it isn’t uncommon for games (then or now) to have 3D terrain, Alpha Centauri is somewhat unusual in my experience, in that it actually tells you the exact elevation value for each map tile. You can see that in the lower left of the above image. So, I went over the map and wrote down the elevation value of every tile. All 8,192 of them. And then I double-checked them to make sure I had transcribed them correctly. As you can imagine, this took a very long time—many hours. I began this process sometime in 2022 and poked at it occasionally until wrapping up in 2025.
If you look back to the snippet of the in-game map above, you’ll notice that some tiles have what appears to be vegetation on them. This is the game’s way of visually symbolizing a tile’s average rainfall. There are only three levels: rainy, moist, and arid. Fortunately, I did not have to manually sample every pixel to get this information. My version of Alpha Centauri has a mod, not found in the original game, which shows you a thematic map of rainfall level.
I took screenshots of the whole map, and did a little Photoshop work to separate the different colors into three maps, one per raininess level.
Then I brought each into QGIS, and dropped a grid of vector points on top, one per grid square. Each point sampled the underlying raster and absorbed its raininess level. The dataset still needed some double-checking and correcting, since there are other map items in the way that obscured the raininess data. But, I was able to get it done without too much hassle.
I did the same procedure with the rockiness, which likewise comes in three levels—though I ended up not using that dataset.
Finally, there’s the xenofungus, which is one of the native lifeforms on Chiron. That’s the pink ground cover on the map above (though according to a game manual, it’s “crimson”). This dataset is binary: xenofungus is there, or not. There wasn’t a thematic map available in-game for this, so I just brought in the normal game map and sampled it with my grid points and looked for pixels that matched the pink/red range of colors, then did some corrections.
With that, I had all the ingredients I would need to make my map. While the elevation data took me years to finish sampling, the rest was done in a matter of hours.
Projection
Like a lot of game maps, Alpha Centauri effectively takes place on a cylinder. You can travel infinitely toward the left or the right, but once you reach the top or the bottom, you stop; the map/world ends.
Though our map is cylindrical, the planet was certainly meant by the designers to be understood as spherical. Various in-game media, including the game’s title screen, show that Chiron is round. So I assumed that the in-game map was, like most maps, a 2D representation of a globe. But what was its projection?
Every time you build a base in the game, that base offers you control of a certain region, and the size of that region is always the same number of pixels, no matter where it is built. So, it seems reasonable to assume that each pixel represents the same amount of space on the planet—thus, the game map is on an equal-area projection. And given the rectilinear shape of the map (and the diagram above), we can reasonably assume a cylindrical projection. Thus, I assigned the game map acylindrical equal area projection.
The aspect ratio of the cylindrical equal-area projection varies based on where you set the standard parallel. Here, on this excerpt from my Projection Connections poster, you can see a few named variations on this projection. Each just varies in where you set the standard parallel.
Setting it to 37.4° got me an aspect ratio that matched the in-game map, and that setting also means that we’re using the Trystan Edwards projection. To give you a better sense of all this, here’s how the game map and an earth map compare, under the same projection.
The map on the right is by daan Strebe, via Wikipedia.
All this projection work actually took place before the data sampling. So, when I say that I brought game maps into QGIS and dropped vector points on them, I already had a projection set up to handle the new datasets I was generating.
Preparing the DEM
At this point I had a projection, and I had a bunch of data in a very low-resolution (128 × 64) grid. Part of my interest in tackling this project was in figuring out how to make a map that was more detailed than the original game map, while still conforming to the known, in-game facts about Chiron. So, I wanted to explore how to turn my 8,192 elevation values into a much more detailed grid.
I tried many, many things. I spent enough hours at it that, in truth, I don’t remember a lot of the details of my attempts. But, after many dead ends, here’s the technique that I finally landed on. I started with the elevation grid—one elevation value per tile, just like we have in the game.
A snippet of the original game elevations, near Planetneck.
Then I scattered a bunch of random points on it, while enforcing a minimum distance between them, so that they weren’t too bunched up. I ended up with about 1–3 points on each grid tile.
A small number of grid tiles ended up without a point. I added extra points to cover those (I just found the centroids of each of those tiles). I then gave each point the value of the elevation of the grid tile it sat on top. So, I effectively turned my original elevation grid tiles into a scattered bunch of dots, with some elevation values repeated multiple times.
And then I ran a TIN (triangulated irregular network) interpolation to generate an initial elevation model:
Now, if I hadn’t done any of the point scattering, and had simply used my original elevation grid, here’s what it would have looked like:
Notice how it’s much more grid-like and regular. By shifting all the points around, and sometimes duplicating them, I was able to break that grid up, and randomly give more weight to some areas vs. others. The first interpolation looks much more organic than the second, but it still uses the original elevation values.
That was only the first iteration of the process. I actually went back and refined it several times. While shifting all the elevation dots around, and duplicating them, was helpful, it wasn’t detailed enough. I wanted more elevation points, so I could have a finer scale of terrain. To do that, I first did a Delauney triangulation on my randomized points. This just draws triangles between all the points. Then I found the point at the center of each of those triangles.
And then I assigned an elevation value to each of those new points, simply by taking average of the three elevation values nearby. Finally, I added a bit of random noise: I nudged the elevation value of each point randomly up or down by a small amount, so that they would represent new bumps in the terrain, not a smooth continuation of the existing values. Here’s how that looks.
I repeated this process of triangulation and bumping a couple more times (reducing the amount of bumping each time), until I had a very large number of points.
And here’s what that looks like when interpolated into an elevation surface:
This is a big improvement over what we began with. It’s organic and detailed, and while it’s not perfect, it’s a large step in the right direction.
I made a few other adjustments to the field of elevation points before conducting the final interpolation. These were to help match my results with the canonical map of Chiron. Sometimes, due to the nature of the interpolation, or the random noise I introduced, things didn’t quite turn out as they should.
Above, you can see the canonical map, overlaid with a land/water mask from my interpolation. There’s an island in the top-center on the canonical map, but in my interpolated elevation model, it’s actually (barely) joined to the mainland. That occurs simply because I had some elevation points in the area that were above sea level, and some below, and the ones above sea level won out in the interpolation.
Here’s another situation requiring adjustment:
An island on the canonical map is only a couple of pixels wide in my interpolated elevation model. I would like it to be a bit bigger, so that it’s noticeable on the final map.
I manually reviewed the map to find places like these and added a few extra elevation data points, to correct things like closed straits, tiny islands, etc.
I also needed to manually adjust one major feature of the original map: Garland Crater. Here’s how it looks on the canonical map:
But remember, that map is based on an underlying diamond-shaped grid. When looking at the actual elevation values, the crater is much more of a square.
But, the crater is clearly meant to be a circle. The game designers even drew special map tiles to represent it as such. So, I un-squared this region of the map. I did a little rubbersheeting to shift my original elevation points around until I had something more circular.
It looks a bit vertically stretched here, but that’s just due to the projection.
With manual points added, and the crater circularized, I was ready to do the triangulation and interpolation steps once again. I’m explaining things a bit out of order here—there were many hours of trial and error and revision as part of this whole process. But this is effectively what I did.
Once I had the interpolation, I did a bit of smoothing on it. I do not remember the exact formula—it was a bit like mixing paints, in that I kept playing around until I got something that looked right. I did some focal statistics (mean and median), some line integral convolution via the Karika plugin, and I also added just a bit of Perlin noise. I mixed together smoothed layers with unsmoothed ones, and smoothed again. Again, a very seat-of-the-pants process.
In the end, here’s what I came up with:
Compare that to a simple TIN interpolation of just the original, unmodified elevation points (before any randomization, manual patches, triangulation, etc.):
Near the center of the image, and just a bit to the left, you can see the original square crater shape.
I think the process of all those adjustments yielded something much more organic-looking.
I wasn’t quite done yet with the elevation model, however. This interpolation was fine for most areas, but the poles needed attention. Given how stretched-out they are on the above map, I knew I would need to re-do the elevation interpolation for the north/south poles using projections that were less distorted in those areas. As an example, here’s the north pole DEM that I came up with, along with the original elevation point locations.
Since a large chunk of the pole had no game data, I sprinkled some mostly-random noise in the middle. And then I proceeded to randomize my point locations and add extra triangulated points, as I did with the main elevation model.
I made separate DEMs for the north and south poles, for use in any future cartography that might focus on those areas. And I also blended them back into the main DEM. With that, my elevation model was done!
Except it wasn’t. As I went through the rest of the mapmaking process, I kept finding small errors: missing lakes, tiny islands, etc. Much like the ones I showed above, except this time I didn’t catch them until I was done with the DEM. I patched those up as best I could, either through tiny changes to the elevation model, or, more often, by manually drawing lakes and islands later on in the cartographic process. Speaking of which, let’s actually start making a map with all these data…
Fun with Projections
For the main map in the layout, decided I wanted to show Chiron using an orthoapsidal (Raisz Armadillo) projection, which also happens to be one of my favorite projections.
Another daan Strebe map that I stole from Wikipedia.
I love that it explicitly reminds the reader that they’re dealing with a curved surface. Given that game players are accustomed to seeing only a flat representation, I thought was especially important to try and show something rounder to bring it to life.
I’d never gotten to make a map in this projection before. It’s not available in QGIS, so I had to create my own little projection script. Fortunately, Wikipedia had the formulae for the transformation. That info, plus a little Python knowledge (aided by ChatGPT, as I’m still not super-comfortable with PyQGIS yet) let me start using the orthoapsidal projection.
I ended up modifying the projection. To better fit Chiron’s landmasses, I adjusted the amount and the direction of the vertical tilt (the default is 20°, but I changed it to -10°). I also reduced the curvature on the sides. The downside of the orthoapsidal is that, by showing the curvature that gives such a nice sense of roundness, we lose some areas (Australia is cut off on the above map, as is Antarctica). But, with a clever bit of tweaking, I was able to reduce the curvature. I did this by first horizontally shrinking anything I was projecting:
Then, when it was projected, it took up less horizontal space on the torus, and thus did not extend nearly as far to the sides:
I’m using Earth landmasses here, so that you can get a sense of the projection using more familiar shapes.
Thus I avoided the severe perspective distortion that occurred on the left/right edges. Notice the right edge of the above image, how the landmasses start to really compress along the edge of the projection as it curves away from the viewer. But, the green version does not do this as badly. By shrinking the landmass, I kept more of it on the parts of the torus that most directly face the viewer. Another way to think about it: In effect, I sort of made the torus larger, in relation to the map.
When I was done with the projection, I stretched things out horizontally a bit to un-do the shrinking I’d done.
My script unfortunately only handled vectors, and I was too impatient to dig in and make the code work with rasters. So, for projecting something like the elevation model, I did a hacky GIS thing and just turned each pixel into a polygon, projected it, and then re-rasterized it. That was not ideal, and meant long processing times, but it worked fine.
At this point, we can probably start breaking down my map layer-by-layer, as I’ve often done in this blog.
Finally, Actual Cartography
So, let’s break down the main map, which was constructed mostly in Photoshop. First we start with the bathymetry.
This is a black and white raster showing the parts of my (reprojected) DEM that had an elevation below zero. To this, I applied a gradient map to recolor everything into shades of blue.
A gradient map in Photoshop takes each pixel in the underlying raster and recolors based on its greyscale value. So, it can (among other things) take a black-to-white raster and turn those pixels into a new color ramp.
Next up: the initial land. I took my reprojected elevation model, clipped off any underwater values, and fed it through Eduard, a program which simulates Swiss-style hand-shaded relief.
I spent a while tweaking the settings to try and find a good balance. Remember, I made some of this information up, because I wanted a realistically detailed relief model. But, I also didn’t want to show too much of the noise I’d added. Once done, I added a bit of a coastal inner glow to help separate the land from the water.
It also had the advantage of hiding the relief near the coastline, so that any nearby mountains gradually fade out as we hit the coast. That gives us a tiny bit of coastal plain. There are almost no flat areas in my map—this is a consequence of the very bumpy elevation values that are in the game. Mountains appear and disappear suddenly, often right next to the coast. I wanted to make the coasts just a little less rugged.
Next up, I used a hue/saturation layer to colorize the relief:
I then sprinkled a little color noise onto it, to help it feel a bit more organic.
I did this just by having a couple of adjustment layers: another hue/saturation, and one brightness/contrast, and having these each masked by a channel that contained some small specks of noise:
Next up was the greenery. Just like the canonical map, I intended to use the rainfall intensity data to show vegetation. First off, I made a copy of the relief and tinted it green, including some noisy variations on those colors.
I did this in exactly the same way I did the earlier tan/brown relief: a hue/saturation layer to colorize it, plus a couple of adjustment layers to add some noisy speckles of lighter/darker areas.
Due to the darker green color, some of the relief was getting lost, so I also added a few more adjustments to emphasize it. These were just more adjustment layers that lightened/darkened the underlying image.
I used the shadows/highlights of the relief in the mask for these adjustment layers, so that they only lightened/darkened the right areas. Here’s a look inside one mask:
Now I blend the green vegetation version of the relief with the original brown relief.
Some areas are still brown (those marked “arid” on the game map) and some are green (“rainy” or “moist” on the game map). But, how did I do this blending? Here’s a look at the mask that controls the opacity of the greenery layer:
On a macro scale, it comes from those rainfall data I gathered a long while back. Remember, each grid tile in the game has one of 3 raininess levels, and I had a point representation of that dataset. I conducted a thin plate spline interpolation on the points (after reprojecting).
That was the basis of my Photoshop mask. But, I also made it somewhat noisy, which you can see if you zoom into the Photoshop version:
This was done using a stack of Photoshop filters. First, I make use of the dissolve blending mode. This is one I’ve talked about before on this very blog. Below, I have a solid black layer, and it’s masked with the rainfall data.
In the dissolve mode, basically Photoshop uses the mask layer to decide the likelihood of a pixel appearing. There are no semi-transparent pixels: they are either wholly transparent, or wholly opaque. So this turns our rainfall data into a scatter of dots.
I took this scatter of dots, flattened it out (with a white background) into a single layer, and then made a bunch of copies. I blurred each copy a different amount, and stacked them all together. And then did some re-sharpening. In the end I was left with a speckly, but soft, noise texture.
And this is what I used to control where the green layer blended into the tan. If we zoom in closely you can see it at work.
I did all this work to ensure that the vegetation layer looked more like vegetation (i.e., individual plants). Though, honestly, a lot of this doesn’t show up on the printed version of the map unless you’ve got a magnifier. But, most people will look at it on screen and so they’ll hopefully still appreciate it.
Here’s what it would look like if I’d just used the original, unspeckled, smooth rainfall layer as a mask:
Now as we go from a rainy area to a dry one, the vegetation just sort of slowly fades out. It doesn’t look quite natural. At the boundary of a desert, individual trees don’t suddenly become transparent. Instead, you still have trees, but you just have fewer and fewer of them. That’s what the speckling accomplishes.
Next up: xenofungus. This is one of the native lifeforms of Chiron. It’s show on the game map, and in various in-game media, as pinkish or reddish. I add this to the map using pretty much exactly the same process as the greenery. I interpolated the point data, smooth it out a bit, make it noisy, and use it as a mask for a reddish version of the relief.
Next up : rivers. There are a handful of these which appear on the in-game map. They are very square, since they’re confined to the map grid. To make these a bit more real-looking, I redrew them manually in QGIS.
For the cartography side of things, I gave a slight taper to the source end of each river in Adobe Illustrator, and then brought them into Photoshop, colored them, and gave them a little bit of a downward bevel so that they seem incised into the land. It’s a tiny thing that no one will really notice on the final print, but you’d be able to tell if I didn’t do it.
I did look at generating a new set of rivers based on my DEM. I ran some hydrological analysis tools, but, due to the bumpy nature of the terrain (both because of my noise, and because of the original game map elevations) I mostly got a lot of endorheic basins and stubby rivers. Drawing my own was easier (and I looked at my relief model to make sure I didn’t cross over any ridges).
That wraps up all the stuff on land. I applied a clipping mask to all this stuff, so that the fungus/greenery/tan relief/etc. only show up where they are supposed to. I also put a little outer glow on the land, to lighten up the coastal waters. Here’s where we’re at right now in our Photoshop stack:
Just a few more layers to go! Next up is more xenofungus. The fungus occurs not only on land, but also in the water. I didn’t want to use exactly the same color, though, so I added the water fungus separately. Just a simple purple layer that uses the same speckled mask as the land fungus, but is also in a layer that keeps it clipped to the water only. It’s set to blend into the underlying water via a linear burn blending mode.
Next up, I apply a saturation boost to the whole map, and add a graticule to help visualize the curvature. The increase in saturation was something I originally did by accident, just moving layers around in Photoshop. But, I liked how it looked, so I kept it.
The result is a color scheme that’s a little outside of my comfort zone. I tend to lean toward less saturated colors, and am noted for my fondness of working in monochrome. But, this is a side project, so it’s a good time for me to experiment.
Next up, I gave things a semi-painted look. I copied the map, flattened it into a single layer, shrank it down, and ran a dry brush filter in Photoshop. This gives things a somewhat painted look that I really like.
Above, you can see both the before and after. In the center, we have the pre-filtered version. Around the outside, you can see the much softer version after the effect is applied. I’ve been meaning for some time to do a tutorial on this technique, and that might happen this year.
The softness was a little too blurry, so I actually mixed it 50-50 with the original map, which I think gives a nice balance of detail and painterly softness.
We’re nearly done with this file. Here’s how it looks at this stage:
Finally, I added a bit of darkening to emphasize the curved surface. I just did a couple of inner shadows to slightly darken the edges (by different amounts, depending on the edge), to give a sense of the light falling off in a way that perhaps suggests the reader that this is not a flat piece.
Labeling
I did the initial labeling work in Adobe Illustrator, as it has significantly better tools for handling type than Photoshop does. When I was done, the labels were ported back over to Photoshop to blend into the map.
I blurred the map under each label, which helps with legibility by keeping the text edges sharper than the background.
I also applied a glow to the land labels and the graticule, which you can see above. It’s just a darkened version of the original map, feathered out around the areas I chose to depict in semitransparent white text. I also added a light glow to the outside of the dark labels. Both of these help with contrast and let me get away with light text on a light background and dark text on a dark background.
I also applied a version of my smart halos technique to further strengthen the glow where needed.
I set all the labels in BellTopo Sans, designed by my friend and colleague Sarah Bell. Finding the right typeface for this map was a bit of a challenge. I didn’t want to go with a serif—I thought most of them looked too delicate for the map’s bold color scheme, and also seemed out of place on a sci-fi map. Plus they wouldn’t hold up very well when set semi-transparent.
The game itself uses Eurostile, but I thought it looked too hard for a map with a soft palette and style.
Most sans serifs seemed a little too solid for the feel of the map. But, BellTopo Sans worked nicely. It has the strength of a sans serif, but also has some strong humanistic elements. For example, look at that colorful lowercase g, the rounded tops of the W, or the squished curve forming the bowl of the a. The whole typeface has hints of a hand-drawn character (it’s derived from old topo maps).
The biggest challenge in labeling was not one that I usually face in my work: I didn’t always know where features were. In the game, features are not always labeled clearly. They are simply bits of white text placed atop single grid tiles.
In many cases, I had to apply my own interpretation to decide the boundaries of ambiguous features. Planetneck, seen above, was the most challenging of these. Does it refer to that finger of water? To the bit of land crossing it? To make matters worse, that bit of land is itself ambiguous. There are several spots in the game marked with these thin brown lines that indicate that they are traversable on both land and water.
Blue arrows: You can move ships across the thin bits of land. Orange arrows: you can move land units along the thin bits of land.
So, there are plenty of areas that might reasonably be construed as land or as water. My randomization process used in creating the elevation model made it so I didn’t have to decide which was which, but it also still left me to decide what Planetneck is. I ended up deciding it was the narrow entrance to the long, finger-like bay.
This was mostly an arbitrary decision, but it is supported by the fact that the game has names for a few other straits, so there were other features of this type already called out in the canonical map.
The official map only has 32 names, which is far less than I would usually have for a map like this. But, I didn’t feel comfortable coining any new ones. The choices of what to label are sometimes strange. Only two landmasses are named, and they’re mid-sized islands. The big continents are anonymous. There’s only one body of water called an “ocean,” and it’s smaller than some that are called “seas.” But, it is what it is. Maybe one of the game developers will find this and comment with their thoughts on how this came to be.
Finally, it was time to put this map into a poster. I added a few more, smaller maps, made from the same datasets and with the same techniques. One to show the elevation data more clearly, and two to show the polar regions with less distortion.
I continued to use BellTopo Sans for the poster text. I also added some faint scanlines to the background and the maps themselves.
This is an homage to the game interface (as is the blue color on the title and the frames surrounding the map). I think the scanlines also really do a great job of tying all the items in the layout together.
Wrap-Up
So there you have it! This was one of the most technically laborious projects of my career. Tedious sampling from the game data; lots of GIS work to convert those data into something higherer resolution; the demands of fine-tuning a custom projection that isn’t supported in QGIS; and many Photoshop layers to try and bring everything together with lots of carefully constructed noise.
I wish I could say I did all of these things in the order I presented them above, or as efficiently as I described them. But, the real process was months of meandering and false starts and dead ends.
Now that I have the datasets, I may do more with them. I’ll probably play around in the future with larger scale mapping, zooming in on smaller chunks of the planet. This will give me a chance to explore ways to generate even more realistic terrain that still conforms with the handful of known elevation values. Your suggestions are welcome. One thing I didn’t try was using the rockiness data. I only thought of that after I finished the map designs. I went back and quickly had a look at using that layer as a mask to smooth my elevation model. Fortunately, it didn’t really make much of a difference at this scale, but it would if I zoomed in.
The original DEM also still needs some further cleanup (I had to manually patch a couple of missing lakes and islands onto the map, but I didn’t fix them in the elevation model). Though I’ll probably just replace it with a better one, once I know how to generate something with a bit more realism.
As I said, I could only make this map because I had data to work with. I don’t presently have the skills to sit down and make something like this just by drawing. I’m a manipulator, rather than a generator, of data. But it was fun to try and take those skills and apply them to a fictional location. It took basically all of my fifteen years of growth as a cartographer to get to the point where I could do justice to this game from my past (and present, though it’s been a few years since I played much). As is so often the case, the more I work on something, the more niche its appeal tends to be, but I’m glad to know that there is a specific type of nerd out there who will really appreciate it.
Speaking of, if you’re a nerd who appreciates this, I’ll once again remind you that your support helps me continue doing projects like this, so consider clicking the buttons below, and/or sharing my work with others if you enjoyed it—it’s a big help!
Friends, you might remember that, last year, I wrote to you about how I was finally able to see a dream I’d had for many years come true: bringing together a bunch of map creators onto a single website. I had hoped that this would only be the beginning of our cooperation with each other. … Continue reading Map of the Month: An Experiment →
Show full content
Friends, you might remember that, last year, I wrote to you about how I was finally able to see a dream I’d had for many years come true: bringing together a bunch of map creators onto a single website. I had hoped that this would only be the beginning of our cooperation with each other. Those of us who sell map-related goods have a lot to gain, I think, in combining forces.
This summer I’m embarking on a new experiment in expanding the reach of our group (the Independent Map Artists). We’re going to be offering a Map of the Month club.
For a one-time subscription fee of $200, folks can get new mappy goods sent to them each month for five months (so, $40 per month). People can explore items from multiple artists, and I hope it will help bring new attention to my colleagues—support that these individual mappers might not otherwise get if they were not part of a group. Picking out individual interesting maps can be hard, so we’re making it easy for people to receive an assortment.
If you’re interested in signing up, or reading a bit more, you can click here.
It’s an experiment right now, just a one-time offering. But if it works out, we’ve got dozens of IMA members, collectively offering hundreds of types of cartographic goodness, so I’m hopeful that it can continue.
I’m taking on the management of this enterprise, coordinating the payments and subscriber lists and the individual map stores who will be sending their goods to our customers (that’s why the link takes you to my personal storefront).
I hope you’ll consider sharing this news with others, and potentially purchasing a subscription for yourself or someone in your life who is geographically obsessed. There are a lot of folks out there doing great mapping work, and I’m excited to be able to introduce their work to new people.
Though it’s been about a week since we sent it out there, I just recalled that I haven’t alerted all of you to the 2025 edition of the freelance cartographer survey that Aly Ollivierre and I conduct. Due to popular demand, we are going to try conducting it annually, rather than biennially. This survey is … Continue reading 2025 AFC Freelancer Survey →
Show full content
Though it’s been about a week since we sent it out there, I just recalled that I haven’t alerted all of you to the 2025 edition of the freelance cartographer survey that Aly Ollivierre and I conduct. Due to popular demand, we are going to try conducting it annually, rather than biennially.
This survey is for anyone, anywhere in the world, who did any amount of freelance mapping last year. Even if it was just one project. You don’t have to think of yourself as “running a business” — as long as someone paid you to make a map, and it wasn’t part of a normal salaried job, we want to hear from you!
This survey helps provide valuable information to the cartographic community, at a time when we all need to stick together. To that end, you might want to consider signing up for the Alliance of Freelance Cartographers mailing list, which announces the survey and distributes the results (and occasionally does other things).
Results will be posted here once we have them. And eventually we may construct a dedicated website to house them. Meanwhile, you can review the 2018–2024 results by clicking here.
Friends, I’m excited to share that I have just completed a world physical map, in my new asymmetric monstrosity projection. It’s free to download, or if you want to buy a 30″ × 20″ print, you can also do that (and I will be pleasantly surprised). If you download it and print it yourself, I … Continue reading A Usefully Useless Projection →
Show full content
Friends, I’m excited to share that I have just completed a world physical map, in my new asymmetric monstrosity projection.
It’s free to download, or if you want to buy a 30″ × 20″ print, you can also do that (and I will be pleasantly surprised). If you download it and print it yourself, I hope you’ll consider making a donation using the links you’ll find below. This project took a lot of time, and while I am giving it away, your support helps me continue doing things like this.
Also, spreading the word about my work is a big help, so please share this around! Finally, consider subscribing, to make sure that you catch every post here.
This is only the second world wall map I’ve made (the first was for a private client), and it’s definitely the most interesting and/or possibly upsetting. Let’s talk about how it came about and all the terrible things that I did.
Background
Back in 2022–23, I had fun making a series of quick maps that I posted to social media and called Useless Projections. Here’s a little slideshow of those:
Useless Projection #1: The Double Apple. Based upon Strebe’s 1993 quasiazimuthal equal-area apple projection.
Useless Projection #2: Equal Earth With Spikes
Useless Projection #3: Why Not Both?
The left half is a Lambert Conformal Conic, the right side is an Albers Equal Area Conic.
Useless Projection #4: Greenland Oblique
An oblique equirectangular, pinched in along each side in Photoshop, à la a pseudocylindric (though a bit of an imprecise approximation of the concept).
Useless Projection #5: Layer Cake
Six delicious projections stacked atop one another, so you don’t have to choose your favorite.
For a long time after, I wanted to make a detailed, proper world map using one of these, but health issues kept me from having the will to do so. But a few months ago, I was playing around with yet another Useless Projection when I finally decided that I had the energy and time to take it to the next level and turn it into something more than a quick post to Mastodon.
The Mastodon post where I made the first iteration of the projection.
My projection is a composite of several pieces. This is not unheard of in the world of non-useless projections. The Goode homolosine, for example, is made from a Mollweide (a.k.a. homolographic) projection glued to a sinusoidal. “Glued” is an apt metaphor, as creating my asymmetric monstrosity involved separately projecting each piece and sticking them together in Illustrator and Photoshop.
Figure 1: Dissecting the beast
I went through multiple iterations of the design as I kept thinking up ways to make it even weirder. These ideas didn’t stop once I’d settled on the final design, and I had to resist the urge to start over several times. So, perhaps I’ll do another someday.
The process of fitting everything together properly was sometimes a bit finicky, and I’m sure there are some small inaccuracies, but overall I’m quite pleased with how well the pieces joined.
Features
This is a physical map, rather than a political one or a combination. I did this both because of personal interest, and also because it’s less likely to become outdated anytime soon. Despite the bizarre projection, I also treated much of the design as seriously as I would a more traditional map. I did a relief in Eduard, and stylized it a bit in Photoshop to give it a pseudo-watercolor effect (which I plan to someday do a tutorial post or livestream about). I also applied a subtle tinting based on Copernicus land cover data, mostly a a visual texture (thus, the tints are not strongly separated). There are colors for ice cover, forest, desert, and grassland/shrubs. The gradations are most noticeable in Africa.
Though my basemap was “serious,” I also leaned into the general weirdness suggested by the projection. The graticule, for example, is subtly uneven. I started with a 15° grid, and then shifted each line by one or two degrees.
I also added a Tissot’s Indicatrix. Subtly striped circles show the angular distortions in the projection. But, they are placed somewhat randomly around the map. At the bottom of the map, I even instruct the reader to “find them all,” as they make up a sort of scavenger hunt.
Since the map has many interruptions, I decided to interrupt my labels, as well. Europe was particularly mistreated in this manner, with labels for the “Alp s,” “Sc andinavia,” and more. This is probably something I’ll never have a good reason to do ever again.
Finally, the type is set in Mrs. Eaves, by Zuzana Licko. Always give typeface credits — typographers work just has hard on their typefaces as we do on our maps.
Why Did You Do This?
Great question! It’s both the result of personal exploration/fascination, and a desire to educate.
First off, it was fun and interesting for me to think about how projections can be glued together. This map is a Frankenstein’s Monster–like creation, but it doesn’t leave anything out, nor does it have mismatches at the joints. Landmasses fit together seamlessly at the boundaries of any given transition zone between projections, because with a little math and the right tools, you can make two projections (of the right variety) match each other at a given location.
The other goal is to educate, through entertainment. It looks funny, thus drawing attention; and in doing so I hope it will jar people into realizing how distorted all projections are. This projection is just as valid as any other, in terms of how faithfully it represents the earth. It’s equal-area, showing everything in proper size proportion. It has interruptions, sure, but so do many others. It is a composite, yes, but so are other projections.
I think it’s in the same vein as those “south-up” world maps that you can buy, or ones centered on the Pacific. Many audiences would find them unfamiliar, but the maps use their uniqueness to make people realize that there’s really no right way to portray the world, and that our conventions are frequently arbitrary.
In the end, I suppose I’m making a bit of an artistic statement about mapmaking, one that I hope will be of interest to some people. As I said above, I don’t really expect most folks to buy this, or even download and print it themselves. It’s something I made for me, for fun, and I’m satisfied to look at it. However, I can imagine that if I were still a cartography lecturer, I’d find this a useful classroom example.
And, it was good experience. It’s only my second world wall map, so I got to play around with exploring and labeling many places that I’ve hardly otherwise touched my cartographic career.
If you find all this projection stuff fascinating, I’ll give a quick plug for the Projection Connections poster I made a few years ago, which shows how various map projections are connected to each other. Click the image to have a look at that post (which has a link to download a copy).
Meanwhile, if you find yourself printing the asymmetric monstrosity map, or showing it off for in a presentation (classroom or otherwise), I’d be interested to know!
I know it’s short notice, but I wanted to let you all know that I’m doing a livestream tomorrow. It’s been well over 2½ years since my last one. I’ll be covering a few monochrome maps I made for an upcoming book. Please come on by to ask questions, offer feedback, and share your thoughts … Continue reading Going Live →
Show full content
I know it’s short notice, but I wanted to let you all know that I’m doing a livestream tomorrow. It’s been well over 2½ years since my last one.
I’ll be covering a few monochrome maps I made for an upcoming book. Please come on by to ask questions, offer feedback, and share your thoughts with other folks!
I’m not sure yet if I’ll return to livestreaming regularly. I might do more this year, or it might once again be years before I get the urge. Either way, I’ll post about it on my social media channels when the time comes.
I hope to see you there!
Also, if you’ve read this far, I just wanted to note that I’ve also been putting my terrain hachures on new surfaces. Besides posters, I now have mugs and vinyl decal stickers on my store.
I’m planning, at some point, to write about my experiences with “selling out,” in hopes that it might be useful to some of you out there who are interested in launching something like this, yourself. But I have more than a few side projects in the hopper to get to first (including publishing the technical details of my hachuring methods).
Nearly five years ago, I completed a project that, to my mind, remains the most significant of my cartographic career: An Atlas of Great Lakes Islands, manually printed in cyanotype, with a hand-stitched binding. I wanted to share this project with all of you, but there were only a few copies. So, I decided to … Continue reading Journey’s End →
Show full content
Nearly five years ago, I completed a project that, to my mind, remains the most significant of my cartographic career: An Atlas of Great Lakes Islands, manually printed in cyanotype, with a hand-stitched binding.
I wanted to share this project with all of you, but there were only a few copies. So, I decided to send one on a journey around the world. Several dozen people signed up to host it, and it was mailed from one host to the next, on a journey that took four years, ten months, and twenty-nine days. Today, it has finally returned to me.
The places the atlas visited from Jan 2020–Dec 2024
I dispatched the book in late January, 2020, expecting that its travels would take approximately two years. The world was very different, then. The tour was greatly delayed by the disruptions of the COVID pandemic, and by my overestimation of how quickly people would pass the atlas along to the next host. I wasn’t even sure it would return — not every package makes it to its destination, after all. But, it has succesfully passed through dozens of hands in thirteen countries, and is now home to tell me about what it saw.
Upon opening the package, I saw that it contained far more than just the atlas. Along the way, people added postcards, stickers, and signage from instances when it was exhibited at libraries, meetups, and workplaces. And one recipient was inspired to create an embroidery version of my map of Christian Island.
The package also includes hundreds of notes, signatures, doodles, and more, covering the once-blank pages of the logbook that I included. I’d hoped to receive a few comments and hand-drawn maps, but I was surprised by the quantity of writing. So many people left kind words, and it is gratifying to know that the atlas was so appreciated.
Many people commented about how the atlas brought them a feeling of connection. The book left my hands just as pandemic lockdowns began, and in times of separation, it brought people together in ways I could not have anticipated. The atlas connected them to me, but also to each other: there were several comments about how reading the notes in the logbook allowed recipients to fell connected to each other. And, when possible, they shared it in gatherings with friends, colleagues, and family.
For some, it arrived during difficult times, and brought some joy. For others, it added to the celebration of a birthday. People mentioned that they were spurred to try cyanotyping. And some people whom I admire said that it inspired them — which is great praise, coming from those who likewise inspire me.
The book’s journey yielded far more than I would have guessed at the start. I thought I might receive some kind comments, and people would enjoy perusing it. Maybe someone would doodle a map in the logbook. But the scale of people’s reaction to it was outside of what I anticipated.
As I said before, this project is very special to me, as a creator. And it is meaningful to connect to people who, for lack of a better phrase, get it. This artwork isn’t for everyone, and that’s fine. But for some people it resonates in the ways that it does for me, and that is a sustenance which can keep my work going.
I’m not sure what’s next. Someday I might make another atlas, and/or send this one out on another tour (perhaps a shorter one). In the meanwhile, I am grateful to the many of you who took the book into your homes.
Thanks again to all who support my work in creating tools like this! If you would like to encourage my continued cyanotype work, please consider supporting me via the buttons below. Also, just spreading the word about my work is a big help! Finally, consider subscribing, to make sure that you catch every post here.
I know lately I’ve been in commercial mode, pointing you toward various projects of mine that you can support by giving me money. And I promise I’ll get back to less commercial musings as time goes on. But for now, I also want to alert you to a way you can give other people money, … Continue reading The Dream Lives →
Show full content
I know lately I’ve been in commercial mode, pointing you toward various projects of mine that you can support by giving me money. And I promise I’ll get back to less commercial musings as time goes on. But for now, I also want to alert you to a way you can give other people money, one I’ve been thinking about for a long time.
For many years, I’ve had a dream of uniting together small businesses selling map gifts. I think we’re stronger when we work together. I can’t find it on the Wayback Machine, but I know that my first map-related website back in 2010 had a blurb about this idea. Finally, in 2020, I put together a Google Doc that listed independent map sellers, and that’s been passed around the internet a number of times. But, the format limited how far it could go.
Finally, though, I’m excited to announce that this Google Doc has been transformed into a website. Thanks to the efforts of my friend & colleague Andy Woodruff, our new mapartists.org site is now live.
Click the image to have a look!
This website collects together a group of people, like me, who make various map posters, clothing, puzzles, and more. It’s my hope that it becomes a marketplace for people looking for mappy gifts. Instead of people finding each of us individually, small voices in the vastness of the internet, people will have one website they can visit that points them toward a whole variety of options.
I’m excited to see this collaboration grow. I think it’s great for both we who make things, and those who might want to buy our wares. I hope you’ll spread the word!