constructor(url, mapId, token, init, opt_profiler) {
    super(url, mapId, token, init, opt_profiler);

    // Set ImageMapTypeOptions properties.
    this.minZoom = init.minZoom || 0;
    this.maxZoom = init.maxZoom || 20;
    if (!window['google'] || !window['google']['maps']) {
      throw Error('Google Maps API hasn\'t been initialized.');
    }
    this.tileSize = init.tileSize || new google.maps.Size(256, 256);
    this.isPng = (init.isPng !== undefined) ? init.isPng : true;
    this.name = init.name;

    /** @private {goog.structs.Set} The set of loaded tiles. */
    this.tiles_ = new goog.structs.Set();

    /** @private {number} The layer's opacity. */
    this.opacity_ = 1.0;

    /** @private {boolean} Whether the layer is currently visible. */
    this.visible_ = true;

    /**
     * Map tile calculation cost will be sent to this profiler, if its enabled
     * flag is set.
     * @private {?ee.data.Profiler}
     */
    this.profiler_ = opt_profiler || null;
  }
@param {string} url The url for fetching this layer's tiles.
@param {string} mapId The map ID for fetching this layer's tiles.
@param {string} token The temporary token for fetching tiles.
@param {Object} init Initialization options, of the same form as a
    google.maps.ImageMapTypeOptions object.
@param {ee.data.Profiler=} opt_profiler Map tile calculation cost will be
    sent to this profiler, if its enabled flag is set.