constructor(options) {
    const baseOptions = Object.assign({}, options);
    delete baseOptions.maxSpeed;
    delete baseOptions.speedFactor;
    delete baseOptions.particles;
    super(baseOptions);

    /**
     * @type {Style}
     * @private
     */
    this.style_ = options.style || {};

    if (!(options.maxSpeed > 0)) {
      throw new Error('maxSpeed is required');
    }
    /**
     * @type {number}
     * @private
     */
    this.maxSpeed_ = options.maxSpeed;

    /**
     * @type {number}
     * @private
     */
    this.speedFactor_ = options.speedFactor;

    /**
     * @type {number}
     * @private
     */
    this.particles_ = options.particles;

    /**
     * @type {Object<string, (string|number)>}
     * @private
     */
    this.styleVariables_ = this.style_.variables || {};

    this.addChangeListener(LayerProperty.SOURCE, this.handleSourceUpdate_);
  }
@param {Options} options Flow layer options.