Ptolemy's Geography

This project focuses on the work of Claudius Ptolemy, a mathematician and astronomer who lived in the Roman Empire during the 2nd Century CE

Background

This project focuses on the work of Claudius Ptolemy, a mathematician and astronomer who lived in the Roman province of Alexandria during the second century CE. His surviving work is often titled Ptolemy’s Geography in English, but the Ancient Greek translation is a bit closer to Guide to Drawing a World Map. (Berggren, 4). While no complete maps have survived to modern times, the work contains instructions for creating a map on a globe as well as a flat surface, using two of Ptolemy’s original map projections. Of greatest interest to me was the “enormous catalogue of localities and their coordinates” included by Ptolemy, which the authors of the translated edition posit would be “chiefly the concern of specialists in geography of the ancient world” (Berggren, 4). However, I saw this as an opportunity to create both a new dataset and a digital edition of one of Ptolemy’s maps using this catalogue. 

The detailed instructions, projections, and coordinates left behind by Ptolemy allowed future cartographers to reproduce maps according to his methodologies and projection systems. While reading complex theories on cartographic methods (translated from Ancient Greek) is a bit beyond the scope of this project, I was curious about what reproducing one of Ptolemy’s maps in ArcGIS software could tell us about his cartographic practice. Although I did not have access to any of Ptolemy’s original maps, I used a 1584 edition of his work from the  National Library of Scotland  with map layouts by Gerhard Mercator. According to the library website, Mercator studied hundreds of versions of reproductions of Ptolemy’s maps, as well as Ptolemy’s methodologies and work, in order to produce an accurate representation of his cartographic theories. 

Research Questions:

  1. What would Ptolemy's maps look like adjusted to modern map projections?
  2. Where are ancient place names in Ptolemy's maps located?

Scholarship I Drew Upon for this Project

Thayer, Bill. Ptolemy: the Geography. Penelope.uchicago.edu,12 December.2023, https://penelope.uchicago.edu/Thayer/E/Gazetteer/Periods/Roman/_Texts/Ptolemy/home.html .

An incredibly rich resource, Thayer digitized all of Ptolemy’s maps, based on what seems like transposing the coordinate system he used into 3D space. Within the digital reproductions, you can click on each ancient place name and be linked back to the part in Ptomley’s work where it is mentioned, as well as the reference coordinates (using Ptolemy’s system). This project is very much built from the ground up and is more technical than descriptive (ie, the creator put more time into trying to follow Ptolemy’s cartographic principles than they did trying to gather information about location or history of the locations they were plotting). I didn’t end up using any of the coordinate systems from this resource, but it was encouraging to see someone else had been interested in the topic, and it inspired me to have a system of linking back to the place referenced as the creator of this project did.

J. Lennart Berggren, and Alexander Jones. Ptolemy’s Geography: An Annotated Translation of the Theoretical Chapters. Princeton University Press, 2020,  https://doi.org/10.2307/j.ctv10h9d98  

Before the publication of this edition, there was not an adequate English translation of Ptolemy’s Geography, so this work was instrumental in my research! The introduction provided a concise and detailed overview of Ptolemy’s life, predecessors, and work. It also included multiple detailed geographic indexes of ancient places and what modern locations they correspond to. This index was what I started with when I initially became curious about attempting to locate places from Ptolemy’s maps. 

Maps

The map I chose to digitize

Digital Reproduction of the Georeferenced Map Scan [Asiae Tabula I]

Comparison Between the Two

It also contains what is essentially a reference index with his coordinate system - all of the place names on the digitized map above come from this table

Accurately Referenced Overlay on Digitized Polygons

The pinkish-red layer represents the digitized reproduction of Asiae Tabula one that is referenced above. By overlaying a geographically 'accurate' representation of the same area (the blue-ish gray layer) we can see where Ptolemy's map is spatially inaccurate in terms of sizing and placement

Interactive Map Tours

The above exploratory map tour walks you through each point from Asiae Tabula I and its historical information, as well as the location on a modern map projection such as this one. Some only had coordinates associated with them and no other information, so if you only see a name, that is why!

All Collected Data Points on a world map- Lighter Purple is the extent of the Roman Empire in 117 AD (about 20 years after Ptolemy was born)

If you click on a point, you will see all ancient names associated with it, as well as the place description (if one exists) from Pleiades

Data Sources

 Here  is the main map I am working on georeferencing and digitizing, and  here  is the table with the Latin names of the main locations on the map. These are both from the National Library of Scotland. The format is a scanned map. 

 Pleiades  is a gazetteer of ancient place names and their associated coordinate/historical information. I am essentially making my own dataset by combining these two resources (using Pleiades to georeference place names annotated on the map scan).

Data Collection Process

Complete Code and Data Files all contained on above Github link

#link to full code on Github above- just some examples 
def get_pleiades_searchresults(places): 
  for place in places:
    url=f'https://pleiades.stoa.org/search?SearchableText={place}&submit=Search' #searches the general search box in Pleiades
    r = requests.get(url)
    return (r.content)  #returns the html page of the search results


html_results= {}
for x in placez_:
  try:
    get_pleiades_searchresults(x)
    if get_pleiades_searchresults(x) in html_results:
      continue
    else:
      html_results[x]= get_pleiades_searchresults(x)
  except:  
      pass

def get_coordinates(pid):
    try:
        url = f'http://api.pleiades.stoa.org/places/{pid}/json'
        r = requests.get(url)
        cont = json.loads(r.content)
        coordinates = cont['features'][0]['geometry']['coordinates']
        if len(coordinates) == 2:
          return coordinates
        elif len(coordinates[0]) == 2:
          return coordinates[0]
        elif len(coordinates[0][0]) == 2:
          return coordinates[0][0]
        else:
            return coordinates[0][0][0]   
    except:                               
      pass
                                                                     

Data Preparation and Analysis

  • Once I had gone through the web scraping process (described in the section below) to obtain the Pleiades ID for each location, I was able to query the Pleiades database to get more information
  • I collected coordinates, description of the coordinates and/or feature, providence of the source of information (usually an older Atlas) as well as a description of the historic relevance/use of that place 
  • To do this I used the Python libraries BeautifulSoup and Pandas 
  • I ended up with a dataframe containing all of this information. Each row represented one location and my columns were : Ancient Name, Pleiades_ID, Latitude, Longitude, Feature Description, and Place Description. 

Once I had collected all my data, I used the ‘plot XY coordinates’ function to populate my map with my new location information. I turned on the labels so that I could see the corresponding ancient name for each of my datapoints. I then loaded in my ancient map scan, and projected everything into WGS 84 UTM Zone 35N, because this covered the largest area of the map I was attempting to recreate. I then began a georeferencing process, using the location point layer as the reference for my control points. After I finished adding control points, I applied a 1st order polynomial transformation. 

Now that I had my georeferenced map scan, I used the ‘create’ tools to digitize the map scan, through tracing over it to transpose it into arcgis feature classes. I used polygons for each ‘country’ specified and used freehand lines to draw in the rivers. I also added labels for all of the place names in the final map layout.

Potential Errors in Data

Since I gathered my data points through an automated process (web scraping) there were multiple results associated with each ancient location. When you hover over a point on the map, you can often see that there are multiple labels associated with the same point. This occurs for many reasons– one name could have been used for multiple locations, some points had different names at different points in time and have the same location information associated with them, etc. I am not an expert in ancient geography and this fact combined with the amount of results returned per name (I limited it to 5  but there were often 20+ search results returned) it was difficult to determine which points were more accurate. If I had more time to curate the dataset and research each of the places, this error could have been greatly reduced. However, this project was mainly exploratory, so I ultimately decided that having more data with some error would be more useful than having less data that was perfectly accurate. 

The map I chose to digitize

Digital Reproduction of the Georeferenced Map Scan [Asiae Tabula I]

Comparison Between the Two

It also contains what is essentially a reference index with his coordinate system - all of the place names on the digitized map above come from this table

Accurately Referenced Overlay on Digitized Polygons