constructor(channelToken, clientId) {
    // The Google Map.
    this.map = exporter.App.createMap($('.map').get(0));

    // The drawing manager, for drawing on the Google Map.
    this.drawingManager = exporter.App.createDrawingManager(this.map);

    // Outstanding map ID requests, keyed by layer name.
    // Used to cancel no-longer-needed requests if the user changes dates before
    // an outstanding map ID is returned.
    this.layerRequests = {};

    // Outstanding URL paths for the current map IDs, keyed by layer name.
    // Used to avoid needlessly changing the layer when the layer requested is
    // the same as the current layer.
    this.layerPaths = {};

    // The ID of this client for socket communication with App Engine.
    this.clientId = clientId;

    // The channel used for communication with our App Engine backend.
    this.channel = new goog.appengine.Channel(channelToken);

    // Initialize the UI components.
    this.initDatePicker();
    this.initRegionPicker();
    this.initExport();

    // Load the default image.
    this.refreshImage();
  }
@param {string} channelToken The token used for Channel API communication
    with the App Engine backend.
@param {string} clientId The ID of this client for the Channel API.