Map of Steinbeck's Route
All great journeys start with a map. I wanted to loosely follow John Steinbeck's route from Sag Harbour, NY, but he gives very little guidance for the majority of the trip. There was no way to duplicate the route from the book alone, but I wanted general guidelines to follow. Since data always becomes much clearer once made visual, I opted to create a map.
Warning: from here out, this blog entry gets pretty technical and map-geeky. Scroll to the bottom to see the full interactive map.
The first order of business was to figure out where Steinbeck had gone during his 1960 road trip. I combed through my paperback copy of "Travels With Charley", copying down every place he mentioned and listing them all in a spreadsheet that looked like this:
At the end of the process, a helpful soul pointed my towards this map from Atlas Obscura, which details the routes of a few Great American Novel road trip books, including Travels with Charley. I used this map for verification but opted to still create my own. Once I had all the places Steinbeck mentions, it was time to get coordinates.
I ran the place names through a batch geocoder that I have been using for years. "Doogal", who runs the site, is a Google Maps integrator and has some handy tools. This geocoder takes addresses and spits out coordinates for ease in mapping.
While some mapping programs don't require latitude and longitude to plot points, I always like to take this step in order to make sure my data is mapping in the right place. It's easier to fix any mistakes at this step, rather than once the map is designed.
Once I had all my coordinates, I saved my spreadsheet as a CSV file and then loaded it into Google My Maps. The interim result, with some styling, is below.
Scripting for Lines
I have no doubt there is an easy way to get Google to draw lines in between each one of these points to denote a route, but I couldn't figure it out. Instead, I copied the coordinates of each "next" point on Steinbeck's route to the next columns in the spreadsheet, giving each place a start point and an end point.
Then I used Python to write a quick script to create a series of "placemarks" in KML, which I then copied and pasted into an empty "linestring" KML file.
import csv with open('c:/temp/filename.csv', newline='', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: print("<Placemark>") print("<name>" + row + "</name>") print("<styleUrl>#line-000000-1-nodesc</styleUrl>") print("<LineString>") long1 = row long2 = row lat1 = row lat2 = row print("<coordinates>" + long1 + "," + lat1 + " " + long2 + "," + lat2 + "</coordinates>") print("</LineString>") print("</Placemark>")
The KML linestring file with all its new placemarks was loaded into Google My Maps.
Map Design Considerations
I chose to use CartoDB to create this map rather than Google My Maps or Mapbox, the two other excellent free choices for map creation. CartoDB had the nicest looking "vintage" basemap I could use "out of the box" (stellar basemaps can also be designed via Mapbox but I didn't want to devote the time). I also wanted to show each of the states in the continental US, and found an administrative layer through the CartoDB Data Library.
CartoDB also has the easiest interface for map-making when adding other layers. I used CartoCSS to style the layer in nice vintagey-looking pastels. This is not possible in My Maps and painful in Mapbox. Yes, I could have done it via code for either program, but at this point I prefer to use CartoDB's tools.
Live, Interactive Map
With the map designed, I now had a good guideline for where to go on my own trip. Next it was time to design my route, but that's a story for another posting.