There’s more than one way to draw a map - lessons learned after the Google Maps SDK became unaffordable
2020-09-18, 10:35–11:15, Virtual

The Google Maps SDK: well-known, powerful, and extremely popular - and after July 2018, suddenly unaffordable. We needed to find an alternative for Django geospatial projects. This is the story of our search and what we found, and the lessons that we’d like to share from the experience. The good news is: we returned with new knowledge from our wanderings, and were able to migrate our existing projects successfully.


What would you do if the costs of an essential service in your project grew 14 times, literally overnight? That’s what we faced in 2018, when the Google changed the pricing structure for its Maps API. Suddenly, a viable project - a P2P platform for renting photo and video equipment - was no longer viable.

Naturally, the first thing we did was panic. So did our client. Then we reminded ourselves that despite its ubiquity, Google is not the only provider of online maps. We started our search for a suitable alternative, that would offer equivalent functionality and convenience for a Django application, at an affordable price.

Our application had a number of demands: we needed accurate geodata, geolocation, disambiguation of similar or identical place-names, and the ability to manage and display many thousands of geolocated items. The frontend needed to handle this smoothly and performantly, with features such as clusterification in order to provide a responsive experience in the user’s web browser.

We found our solution in HERE Maps, but along the way, we researched several options in depth (OpenStreetMap, MapBox, TomTom and others) all from the point of view of the Django developer.

We’ll present our overview of these options and their various advantages, giving an up-to-date snapshot of some of the main candidates for Django mapping integration in 2020. We’ll show that not only is Google not the only option, it’s not even always the best.

We learned that the criteria for choosing a good mapping service are not always the obvious ones, and that choices made on the basis of smaller or test projects sometimes don’t scale well. Now that we know what to look for when presented with the options, we’d like to share tips that will benefit any Django developer facing a similar choice, and reveal some of the hidden traps we discovered along the way.

We’ll also describe how we adapted to HERE Maps, our new tool, and the work we had to undertake to replace some of the functionality provided in Google’s API; our findings will help other Python/Django developers adopt HERE Maps in the future.

In all, we hope that our experience will turn out to be an entertaining story for the audience, a valuable guide to other Djangonauts who need a new map - and a reminder that Google is not the only option.