If you know my friend Kirk Goldsberry and didn't land on my page via map nerd circles, you probably know him as a sports writer who has introduced innovative visual analytics over the past decade or so, mostly to NBA basketball. But he's really a geographer who applies his expertise to sports—and who still wants to make maps.
Kirk's ambition on a recent project was to bring basketball and maps together (again) by creating an actual basketball that's also a globe. He turned to me to help with the cartography to make it happen.
Printing on fish
Look at a standard basketball and notice how it's assembled. There are eight panels separated by recessed seams. Those panels are identical in shape (or mirror images of one another), in different orientations.
From the manufacturer, Kirk had a template with these panel shapes where artwork needed to fit. They kind of look like fish when flattened. The central challenge of getting this ball started was: how do you project a map to fit in these weird fish shapes!?
Finding a "solution"
Here's where I must confess a shameful lack of expertise in map projections, spherical geometry, or I guess math in general. I think I could learn how to produce standard globe gores, but I never did find the right way to do it for a basketball. Anything I found about the geometry of a basketball surface was beyond my understanding.
My first step was to stare at a ball and understand which sections of the template would correspond to which parts of the world. Then, using some logic I've since forgotten, I digitized lines where I thought the seams go on the map. (Some are simple, like the equator, and some are less straightforward.) I overlaid those lines and the template shape on a map and began projecting away, trying this and that but never finding a projection where the graticule or my digitized seams seemed to match the curve of the template shape.
I gave up on GIS and moved to a D3 sandbox on Observable, where it was easier for me to overlay graphics, try different projections, and drag the map to adjust projection centering, etc. To the best of my understanding, D3's assumption of a spherical earth allows various transformations and rotations that are handy if you're, say, printing a map onto arbitrary sections of a spherical ball.
Saved by the seams
In the end, I recall landing on the good old Mercator projection and by trial and error finding some rotations that got the map close to the correct distortions for each panel. It still wasn't right, as was evident among the series of not-quite-matching lines at the edges. But those edges would be covered by the large black seams on the ball, masking any misalignments between adjacent panels. Phew! (Sorry, cities that are buried under those seams!)
Adding depth
The cartographic design itself is not much of a story to tell. I set up some initial styles and handed it to Kirk. Later, although the globe looked pretty good, we agreed that ocean bathymetry would make it much more striking. We turned to the great Tom Patterson's beautiful Natural Earth rasters for this.
Initially I thought adding a raster layer would be a bigger challenge beyond using D3 for projecting vector layers. But it turned out I could simply stick with what I'd already built, and use the D3 projection functions on the images, pixel by pixel, to squash them into the right shape. The crude method doesn't result in particularly smooth images, but they're perfectly fine for a bumpy basketball!
Stay tuned
When the balls were finished and Kirk put them up for sale, they were gone within a few days. But he's planning another run, and we hope to collaborate on more variations now that we've got something of a process!