How much do you need those Google Maps API features anyway?
Like lots of people in our field, I have been contemplating moving off of the Google Maps API. I am in no way in danger of hitting the usage caps or violating the API’s TOS. I just have better data. With tools like TileMill/Mapnik I can make (I believe) better cartography. I can make a snappier app with Leaflet. I’d have more flexibility. And there would be no way a future Google Maps API TOS change could screw me.
But…there are some nice things about the API that are awfully hard/impossible to replace. Street view is a big one. Traffic is a big one. Google Earth integration (as hacky as it is with the v3 API) is a big one.
To gauge the level of protest I might encounter should I jump off the Google Maps API, I decided to do a little experiment. For the past week I have been capturing how often people use those features on GeoPortal. Now I can compare those numbers with Google Analytics to see how many people are taking advantage of those features and may show up at my door with torches and/or pitch forks.
First, how did I do that? Pubsub.
/*
Some google maps related metrics
*/
function sendCounter(counter) {
$.ajax({
type: "POST",
url: "counter.php",
data: { name: counter }
}).done(function( msg ) {
console.log( "Data Saved: " + msg );
});
}
function watchAnything() {
sendCounter("anything");
$.unsubscribe("/watch/anything", watchAnything);
}
function watchEarth() {
sendCounter("earth");
$.publish("/watch/anything");
$.unsubscribe("/watch/earth", watchEarth);
}
function watchStreetview() {
sendCounter("streetview");
$.publish("/watch/anything");
$.unsubscribe("/watch/streetview", watchStreetview);
}
function watchTraffic() {
sendCounter("traffic");
$.publish("/watch/anything");
$.unsubscribe("/watch/traffic", watchTraffic);
}
$.subscribe("/watch/anything", watchAnything);
$.subscribe("/watch/earth", watchEarth);
$.subscribe("/watch/streetview", watchStreetview);
$.subscribe("/watch/traffic", watchTraffic);
The first function there is what writes to the database. The rest of the functions are subscribed to a specific “/watch/*”. Each unsubscribes itself as soon as it fires once. So, in something like the streetview change position event, I’ll have:
$.publish("/watch/streetview");
Then the watchStreetview function fires. It writes to the database, publishes “/watch/anything”, and unsubscribes itself. The watchAnything function also writes to the database and unsubscribes itself. In this way each application load will only fire a particular usage once, and I’ll capture whether anything was used as well so I can roughly tell if people use more than 1 feature. This kind of dynamic coupling is what makes Pubsub so awesome.
The data gets written to a SQlite database. The PHP for that is painfully simple.
/**
* Upload data to sqlite
*/
try
{
//open the database
$db = new PDO('sqlite:.\counter.db');
//insert some data...
$count = $db->exec("UPDATE counter SET " . $_REQUEST["name"] . " = " . $_REQUEST["name"] . " + 1");
// close the database connection
$db = NULL;
}
catch(PDOException $e)
{
print 'Exception : '.$e->getMessage();
}
Yes, I know I’m totally SQL-injection vulnerable there. That’s one of the nice things about throw-away SQLite databases: I don’t care.
That code and making the SQLite database took all of an hour. Now on to the good stuff.
Over the course of a week, GeoPortal got 4,582 unique visitors and 7,168 page views. That’s enough people to do a reasonable calculation. The type of user on GeoPortal should also be a good cross-section of regular users and “power” users (whatever the hell that means). Because there is only 1 page in GeoPortal, a page view represents an app session and will translate 1:1 with the counts we accumulated in the experiment.
Here’s the final analysis:
| Info | Count |
|---|---|
| App Sessions | 7,168 |
| Used any of the features: Streetview, Traffic, Earth | 160 |
| Used Earth | 68 |
| Used Streetview | 73 |
| Used Traffic | 35 |
| Used more than 1 feature (estimate) | 16 |
| % Users that will Come for my Head | 2.2-3.5% |
There were a few surprising results. I was surprised that Earth was so popular, almost as much as Streetview, particularly because it doesn’t show up for people that don’t have the Google Earth extension installed. I thought Streetview would be a lot more popular than it is. Traffic wasn’t too surprising.
But I found what I was expecting: those hard-to-replace Google Maps API features are not terribly popular. I can shift away from the Google Maps API and effect only a tiny percentage of my users. 3% of 4,582 is only 137 people. And if less than 500 people in a given week show up at my door with torches and/or pitch forks, it’s pretty clear what would happen.