We've been proud users of Google Maps on Active.com for 3.5 years. We used them to show where events are happening and provide driving directions to participants. Underneath the hood, we used Google's Geocoding API to discover the latitude and longitude for events so we could properly render them on maps. Geocoding also enabled searching by location on Active.com Search.
But then, on 26 October, 2011, a date that will live in infamy, Google announced usage limits on Google Maps. The new terms limited websites to 25,000 free map renderings per day. And Google reserved the right to put ads on those using maps for free. Or, websites could negotiate a usage-based deal with Google should their volume exceed 25,000 per day. In our case, we were looking at millions of renderings per day.
We scrambled for options.
Our first was to approach Google and try to work out a deal. After several email exchanges and phone calls, we just couldn't justify paying hundreds of thousands of dollars per year for maps. Second, we looked at Bing's offering and found their terms to be similarly disagreeable.
Then we found OpenStreetMap. And after more digging around, we discovered that MapQuest was huge proponent of OpenStreetMap (God bless 'em), which lended credibility to the service (as did recent accusations of Google's tampering with OpenStreetMap data). MapQuest had developed an open service called Open Platform Webservices which was built on top of OpenStreetMap's abundant data sources. The platform offered to free access to what are called "tiles" - images pieced together to render a complete map. It also offered access to a service called Nominatim, which could geocode our events like the Google Geocoding API used to.
Armed with a good alternative we set forth and worked to replace Google Maps with MapQuest's offering. In the spirit of being good citizens and not overloading MapQuest's "open" servers, we did the following:
- Nominatim is our primary geocoding provider. We fall back to other commercial offerings when Nominatim is unable to deliver the precision (address-level) we need. Geocoding is abstracted by an internal service.
- Every map rendering is a single image drawn from MapQuest's Open Static Map service, which pulls its data from OpenStreetMap.
- We cache these images on our CDN (Akamai) for a period a time so that only uncached requests actually hit MapQuest servers.
- When a user clicks on a map to interact with it, javscript fires to pull in MapQuest tiles allowing the user to move the map around, zoom in and zoom out.
You can see it in action on the Gate River Run event details page:
I think it's a good move for Google to look for financial compensation with its Maps product. I'm sure they ran the numbers and expected some developers, like us, to jump ship while others would embrace their new cost structure. In our case, the numbers didn't make sense, especially with a great alternative like MapQuest on OpenStreetMaps.