function interpolate(from, to, fraction) {
  // http://en.wikipedia.org/wiki/Slerp
  var fromLat = toRadians(from.lat);
  var fromLng = toRadians(from.lng);
  var toLat = toRadians(to.lat);
  var toLng = toRadians(to.lng);
  var cosFromLat = Math.cos(fromLat);
  var cosToLat = Math.cos(toLat);

  // Computes Spherical interpolation coefficients.
  var angle = computeAngleBetween(from, to);
  var sinAngle = Math.sin(angle);
  if (sinAngle < 1E-6) {
    return from;
  }
  var a = Math.sin((1 - fraction) * angle) / sinAngle;
  var b = Math.sin(fraction * angle) / sinAngle;

  // Converts from polar to vector and interpolate.
  var x = a * cosFromLat * Math.cos(fromLng) + b * cosToLat * Math.cos(toLng);
  var y = a * cosFromLat * Math.sin(fromLng) + b * cosToLat * Math.sin(toLng);
  var z = a * Math.sin(fromLat) + b * Math.sin(toLat);

  // Converts interpolated vector back to polar.
  var lat = Math.atan2(z, Math.sqrt(x * x + y * y));
  var lng = Math.atan2(y, x);
  return new LatLng(toDegrees(lat), toDegrees(lng));
}
Returns the LatLng which lies the given fraction of the way between the
origin LatLng and the destination LatLng.
@param from     The LatLng from which to start.
@param to       The LatLng toward which to travel.
@param fraction A fraction of the distance to travel.
@return The interpolated LatLng.