MapMyCV

The one where I turn my CV into a web map ….

The end of the MSc at Edinburgh is in sight, so as I start work on the dissertation it is time also to turn my attention to finding a job afterwards! In search of ways to stand out from the crowd while also showcasing my newfound skills, I hit upon my latest project – MapMyCV. That’s right, I’ve turned my CV into a web map!

Screen capture of the web map showing different colour markers for different categories – for example blue are jobs and purple are field experiences.

The map uses the same Python Folium library that I used to make the web map for the Capital Greenspace Project. However, this time I couldn’t host it on the university Linux servers, so I needed an alternative that would still allow me to connect to a database holding all the details I wanted to display. Sounds like an ideal task for the Django framework, which luckily I completed a Coursera specialisation in last summer, and the free PythonAnywhere hosting service.

I categorised experiences into four groups – education, employment, fieldwork, and miscellaneous. Each category is represented as a separate layer on the map that can be turned on or off, and each entry within a category is shown with a coloured marker. Clicking on any marker reveals a pop-up window with details about that entry. Those categories and entry details are drawn from a SQLite database that is built into the Django framework.

Clearly a web map makes it difficult to display data in temporal order, as a traditional CV does (not that this is intended to replace such a document). However, I am thinking of ways to incorporate that temporal aspect – possibly as a geologic column graphic! In the meantime it would be great if you took a look and let me know what you think – and of course if you know anyone looking to hire a geospatial professional you know where to send them!

Percy’s on Mars!

The one where I finally get back to posting content ….

Despite going to the wrong place (see here and here!) NASA’s Perseverance rover safely landed in Jezero Crater last month, and the images and video(!) coming back are incredible. If you missed the finale of the Mars landing site analysis project last summer you can read all about it here. However, exciting as that is, this blog post is about something else.

Since last September I have been studying on the MSc programme in GIS and Earth Observation at the University of Edinburgh. It’s certainly been keeping me busy, hence the lack of updates here, but I have learned an incredible amount too, despite the ongoing challenges posed by Coronavirus restrictions. As I near the end of the instructional phase of the course and begin work on my dissertation, I thought this would be a good time to update the site with some of the work that I have done. The Past Projects section of the site contains two new entries, one on a big spatial analysis and web mapping group project from Semester One, and the other a database methods group project from earlier this semester for which we built a version of the game Battleships! Considering that 15 months ago I had never written a line of code in my life, the web map component of the first project is a piece of work that I am particularly proud of.

I also have a new section of the site dedicated to the dissertation research that I will be conducting between now and August. The project will be working with data from NASA’s Global Ecosystem Dynamics Investigation (GEDI, pronounced ‘Jedi’) lidar instrument on the International Space Station. I will be working on methods to improve the accuracy of the algorithm that estimates ground elevation from the waveforms that are generated by the instrument. That section of the site is still under construction and I hope to post some further updates over the coming weeks and months.

Finally, at some point I would like to move this blog to my site on PythonAnywhere. Building on two Coursera specialisations that I completed last summer, in web design and web applications, I built a SQLite database-backed blog using the Django framework. At this point it is more a demonstration piece, but with a little more work it should be a fully-fledged and operational blog.

I also hope to use my newfound web mapping skills, in combination with Django, to launch my latest project – MapMyCV! Stay tuned for further details …

No visuals in this post so I’ll include a link here to this piece of satellite imagery from the greenspace project simply because I like looking at it!

Mars Top Ten!

The one where I reveal the results ….

Every blog needs a ‘Top 10’ post at some point right? Well this is mine. Let me introduce my ‘Top 10 Places to go on Mars if You’re a Rover’!

  • Eberswalde Crater
  • Gale Crater
  • Gale SE
  • Milna Crater
  • Robert Sharp Crater
  • Holden Crater
  • Ismenius Cavus
  • Subur Vallis
  • Subur Vallis Crater SE
  • Hellas NE 1
  • Lederberg Crater SW
  • Sibut Crater SE

In the last blog post I had all my planet-wide rasters created, and discussed the ‘mask’ that I made to restrict my analysis only to appropriate parts of the planet. Now the rasters have been reclassified, the suitability analysis conducted, and the results interpreted. If you want to know more about the process (or why my top ten list has 12 entries!) head on over to the Current Projects section of the site to read all about it and see some pretty sweet looking maps – I recommend the Swiss hillshade personally.

I’ll give you a teaser here:

In other exciting news, I have accepted an offer from the University of Edinburgh School of GeoSciences to start their MSc in Geographical Information Science this September! In the meantime, look out for an announcement here soon about my next exciting GIS project!

Let the Analysis Begin!

The one where I begin to analyze the data ….

In the last post I detailed all the steps necessary to get my data into a form that I could feed into the suitability analysis, and the ModelBuilder model I constructed to do much of that work. As is always the case with GIS, and something this complex, the process was not as straightforward as just running that model. However, all of those steps are complete and I now have a nice collection of planet-wide rasters (and a very large data folder – 32 GB and counting!). I am now ready to build the second model that will reclassify all of these rasters.

Before I do that I want to create my mask though. In essence, this will be a single polygon that I will use to ‘cut out’ only those areas of the planet that meet certain requirements. The relevant engineering criteria are:

  • Latitude less than 45 degrees
  • Elevation less than 2000 m
  • Albedo less than 0.25
  • Thermal inertia greater than 100 J m-2 s-0.5 K-1

In addition, I will exclude areas that meet certain geologic requirements. For instance the young volcanic provinces and northern lowlands, which likely formed long after Mars became the cold, dry planet it is today. The image below shows the areas meeting all these criteria, which will be excluded from the final analysis. The underlying colour image, a digital elevation model, shows the areas from which landing sites can be selected.

The elevation, albedo, and thermal inertia masks were made by selecting only the relevant cells from the corresponding rasters, and setting all other cells to ‘null’. Each of these rasters was then converted to a single multipart polygon, which is what is shown here shaded black or gray. The geology mask was created by selecting polygons from a global geologic map representing units that are not of interest. These were then dissolved into a single multipart polygon, shown here in dark gray. The four individual masks are shown below for the entire planet. The final analysis mask was made by ‘inverting’ this process. A single rectangular polygon was created for the 45 N to 45 S area (the extent of the coloured DEM above) and then the four mask polygons were cut out of this. The end result is a single polygon encompassing only the areas where the coloured DEM can be seen in the image above. That polygon will be used to extract valid cells from the final suitability raster.

Next up I have to reclassify all my rasters, feed them into the suitability analysis, and apply the mask I have created to generate my final suitability raster.

Data, Data, Data!

The one where I gather the data ….

The project is chosen, the proposal is written, now I just need some data to work with! Milestone 2 in the capstone course requires us to start constructing a detailed plan for how we are going to approach our project. For me, that means gathering all the data that I will need, and constructing a model in ModelBuilder to do the processing necessary to allow me to conduct the suitability analysis.

For those not familiar with GIS, let me explain what ‘suitability analysis’ actually means, and exactly how I intend to approach mine. A suitability analysis is essentially a way of asking “where is the best location for something?”. The “something” can be almost anything imaginable – a new business (ok, maybe not right now), habitat for some endangered species, even relocating an entire town. All that is required is a list of criteria for where your “something” should or shouldn’t be, and a representation of those data in GIS. My “something” is the landing site for a rover on Mars, and my criteria are a combination of engineering and science criteria, as described in the previous post. Each criterion that I want to inform the analysis will be represented as a raster. A raster is simply a grid of uniform cells where each cell holds a value representing some quantity – elevation data is an incredibly common example. Every time you take a photo with your smartphone or digital camera you are creating a raster image too (actually three raster bands stacked together, one each representing red, green, and blue – the combination of different intensities of those colours gives each cell (or pixel) a colour, and the combination of millions of such cells generates your image). For use in a suitability analysis, multiple rasters are typically reclassified to a common “good” to “bad” numeric scale, maybe 0 – 1 or 1 – 10. Don’t want to locate your dream house on a steep slope? Create a slope raster and assign high scores to low slope areas and low scores to high slope areas! Once you have reclassified all of your criteria, simply add the rasters together and the resulting areas with the highest scores are the most suitable locations for your “something”. Of course the process is rarely that simple, but that is the general idea.

For my landing site analysis I have obtained the following global datasets in raster form:

  • elevation (from which I can generate a slope raster)
  • albedo (i.e., surface reflectance)
  • thermal inertia
  • relative mineral abundance for hematite, carbonates, sulfates, and smectite clays

All of these rasters have different resolutions (i.e., the size of each cell is different for each dataset), ranging from approximately 460 m/pixel for the elevation data to nearly 15 km/pixel for the mineral abundance data. To facilitate comparison and allow the reclassified rasters to be added together, the low resolution datasets must be resampled and cells aligned with the highest resolution dataset. I also created constant rasters for different latitude bands, so that I could include a preference for lower latitudes over higher latitudes in my analysis.

There are also lots of Mars datasets that are not in raster form, but exist as vector, or feature, data (i.e., points, lines, or shapes). These datasets require a little more processing to be able to use them in a raster-based suitability analysis. For datasets such as the locations of water-carved channels or delta structures, my model creates distance rasters for these features, where the value in each cell is the distance to the nearest input feature (channel or delta structure). I also did some data processing to identify relatively large (> 25 km diameter) impact craters that are suspected of having hosted closed- or open-basin lakes at some point in the past. The locations of these craters will be converted directly to raster format (where each cell is either within or outwith such a crater). The final dataset of this type is the location of areas of ‘polygonal ridges’. These are landforms suspected, in many cases, of hosting mineral-filled veins and thus recording subsurface groundwater flow. A distance raster will be created for these features too.

The ModelBuilder model that accomplishes all of this data processing is shown below. The end result of running this model will be approximately 18 rasters. The second model that I will create will reclassify each of these rasters and add them together to create my final suitability raster. While that part sounds easy, the devil is, as always, in the detail. Exactly how I choose to reclassify the rasters, and the weight I give to different features, likely will have a significant impact on the final analysis. By automating the analysis in a model I can repeat it multiple times, giving different weight to different features, and assess this impact.

Let’s Land on Mars!

The one where I choose a project …

The first ‘Milestone’ in the Coursera capstone course requires submitting a project proposal – the research question being addressed, where we might find data that we will need, etc. This means I need to settle on a project!

Since I first started thinking about the project I have wanted to analyze Mars data to find suitable landing sites for potential future missions – what’s known as a ‘suitability analysis’ in GIS. There were several reasons, however, that I thought this might be a bad idea: is the question too broad?; is the data I would need available?; do I know what I am doing in ArcGIS well enough to analyze the data? I considered a few other options too: something about the spread or impacts of Coronavirus; a political analysis of Brexit or climate views; some climate change-related satellite imagery analysis. In the end I decided to go with my original idea – we’re going to Mars!


Mars Global Surveyor (MGS) mosaic of the Martian surface digitally reconstructed from over 200 million laser altimeter measurements (credit: NASA/JPL/NGS/MGS MOLA).

This is the red planet in its purest form, digitally stripped of clouds and dust to reveal the surface in detail and true daytime colour (read more about this image here: MGS MOLA/MOC mosaic). How does NASA/ESA/etc. decide where to send their landers and rovers? How do they evaluate whether scientifically interesting locations can be explored safely? What is ‘scientifically interesting’ in the context of Martian exploration? These are some of the questions I hope to address in this project by using GIS to evaluate a variety of criteria that factor into the landing site selection process for missions like the Mars Science Laboratory (MSL, i.e., the Curiosity rover) and the upcoming Mars 2020 mission (the recently named rover Perseverance).


With a mission like MSL having a lifetime cost of around $2.5 billion, choosing an appropriate landing site is obviously an extremely important decision. The success or failure of the entire mission depends to a large extent on making this choice months if not years before the mission lifts off. Ultimately the choice is a trade-off between two broad sets of factors – engineering constraints that dictate where the rover can be safely landed and operated, and scientific constraints that seek to maximize the scientific knowledge gained from the mission. Engineering constraints include factors such as absolute elevation, latitude, slope, various surface properties, and the dimensions of the ‘landing ellipse’. The primary scientific impetus for missions like MSL (and before that MER – i.e., the rovers Spirit and Opportunity) is the determination of the past habitability of Mars. In other words, did environmental conditions conducive to the presence of life ever exist on the planet. The upcoming Mars 2020 mission will take the next step, and actually search directly for signs of past life (i.e., ‘biosignatures’).

Evaluating some of these criteria on a global scale in a GIS program is relatively straightforward – selecting for elevation, latitude, and slope for example. Other criteria need to be evaluated at a much more restricted scale – for example candidate landing sites will be investigated much more closely for detailed slope analysis and identification of large rocks in the area (landing a billion dollar rover directly on top of a large boulder is generally not advised). The geological criteria will be harder to evaluate at a global scale and this is where my analysis will necessarily have to diverge from the real process. However, with a global geologic map, spectroscopic data on mineral occurrences, and datasets like channel landforms I hope to be able to provide some geologic context to inform the engineering side of the process.

Ultimately I hope to produce a map highlighting the locations that best meet all the available criteria. I will then overlay the locations of the top candidate sites for both the MSL and Mars 2020 missions to see how I did! In the next post I will discuss the engineering and science criteria in more detail and share some of the GIS-ready datasets that are available from NASA.

If you would like to learn more about Mars and the MSL and Mars 2020 missions there is a wealth of information on the NASA website:

Welcome to the Blog!

The one where I explain things ….

Hi, thanks for checking out my blog! You’re probably wondering why I suddenly have a website and blog in the first place, right? Let me explain ….

If you got this far on the site you probably know that I have been learning GIS, or Geographic Information Systems, for the past several months. I have been doing this through the online learning platform Coursera, and specifically the GIS Specialization (their term for a series of related courses) offered by the University of California at Davis (if you’re reading this, Hi Nick!). This is a five-course specialization, with the first four courses covering fundamental aspects of GIS. You will find some of the maps I have worked on during these four courses in the ‘Past Projects’ section of the site. The fifth and final course in the specialization is a longer, more independent project; where all the skills learned in the preceding courses are pulled together to conduct a full geospatial analysis project of our own choosing.

That is where this site comes in. I am creating it at the start of that fifth and final course. If you are reading this in April or May 2020 (and let’s be honest, you’re stuck inside thanks to the Coronavirus so you’ve likely nothing better to do!) you can follow along in real time and live vicariously through my struggles as I work through the various phases of the project. At times things may get a little technical (I want this to be a detailed documentation of the process), so if you find yourself confused feel free to skip ahead or come back when a new post appears. If you know GIS yourself and find yourself thinking “Well that was a dumb way of doing that!”, please let me know! This is a learning experience after all and I still have much to learn. If you are a fellow student in the course, now or in the future, I would love to hear from you about your own experiences.

So what’s next? Well, several things:

  • the first important task in the course is to choose the subject matter for the project – I have several ideas, none that I have settled on yet, so I will likely make a separate post about that in the next few days;
  • second, I would like to flesh out the content on this site so that you can see some of the things that I have been up to so far;
  • at the same time as learning GIS, I also have been learning to code; initially Python and a little bit of SQL, and more recently HTML and CSS – at some point I would like to put these skills to use and create my own website from the ground up, although that is probably some way off still;
  • finally, I would like to continue my education in all things GIS by earning a M.Sc. in Geographic Information Science from the University of Edinburgh – stay tuned for more about that!

That’s all for now. I hope you’ll check out the rest of the site (once there is some content!) and consider subscribing to the blog to follow along with my progress. Thanks, and see you soon! Euan