docs: function runRecordRoute(callback) {
    var argv = parseArgs(process.argv, {
      string: 'db_path'
    });
    fs.readFile(path.resolve(argv.db_path), function(err, data) {
      if (err) {
        callback(err);
        return;
      }
      // Transform the loaded features to Feature objects
      var feature_list = _.map(JSON.parse(data), function(value) {
        var feature = new messages.Feature();
        feature.setName(value.name);
        var location = new messages.Point();
        location.setLatitude(value.location.latitude);
        location.setLongitude(value.location.longitude);
        feature.setLocation(location);
        return feature;
      });
  
      var num_points = 10;
      var call = client.recordRoute(function(error, stats) {
        if (error) {
          callback(error);
          return;
        }
        console.log('Finished trip with', stats.getPointCount(), 'points');
        console.log('Passed', stats.getFeatureCount(), 'features');
        console.log('Travelled', stats.getDistance(), 'meters');
        console.log('It took', stats.getElapsedTime(), 'seconds');
        callback();
      });
      /**
       * Constructs a function that asynchronously sends the given point and then
       * delays sending its callback
       * @param {messages.Point} location The point to send
       * @return {function(function)} The function that sends the point
       */
      function pointSender(location) {
        /**
         * Sends the point, then calls the callback after a delay
         * @param {function} callback Called when complete
         */
        return function(callback) {
          console.log('Visiting point ' + location.getLatitude()/COORD_FACTOR +
              ', ' + location.getLongitude()/COORD_FACTOR);
          call.write(location);
          _.delay(callback, _.random(500, 1500));
        };
      }
      var point_senders = [];
      for (var i = 0; i < num_points; i++) {
        var rand_point = feature_list[_.random(0, feature_list.length - 1)];
        point_senders[i] = pointSender(rand_point.getLocation());
      }
      async.series(point_senders, function() {
        call.end();
      });
    });
  }