function WebMercatorTilingScheme(options) {
  options = options ?? Frozen.EMPTY_OBJECT;

  this._ellipsoid = options.ellipsoid ?? Ellipsoid.default;
  this._numberOfLevelZeroTilesX = options.numberOfLevelZeroTilesX ?? 1;
  this._numberOfLevelZeroTilesY = options.numberOfLevelZeroTilesY ?? 1;

  this._projection = new WebMercatorProjection(this._ellipsoid);

  if (
    defined(options.rectangleSouthwestInMeters) &&
    defined(options.rectangleNortheastInMeters)
  ) {
    this._rectangleSouthwestInMeters = options.rectangleSouthwestInMeters;
    this._rectangleNortheastInMeters = options.rectangleNortheastInMeters;
  } else {
    const semimajorAxisTimesPi = this._ellipsoid.maximumRadius * Math.PI;
    this._rectangleSouthwestInMeters = new Cartesian2(
      -semimajorAxisTimesPi,
      -semimajorAxisTimesPi,
    );
    this._rectangleNortheastInMeters = new Cartesian2(
      semimajorAxisTimesPi,
      semimajorAxisTimesPi,
    );
  }

  const southwest = this._projection.unproject(
    this._rectangleSouthwestInMeters,
  );
  const northeast = this._projection.unproject(
    this._rectangleNortheastInMeters,
  );
  this._rectangle = new Rectangle(
    southwest.longitude,
    southwest.latitude,
    northeast.longitude,
    northeast.latitude,
  );
}
A tiling scheme for geometry referenced to a {@link WebMercatorProjection}, EPSG:3857.  This is
the tiling scheme used by Google Maps, Microsoft Bing Maps, and most of ESRI ArcGIS Online.

@alias WebMercatorTilingScheme
@constructor

@param {object} [options] Object with the following properties:
@param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid whose surface is being tiled. Defaults to
the default ellipsoid.
@param {number} [options.numberOfLevelZeroTilesX=1] The number of tiles in the X direction at level zero of
       the tile tree.
@param {number} [options.numberOfLevelZeroTilesY=1] The number of tiles in the Y direction at level zero of
       the tile tree.
@param {Cartesian2} [options.rectangleSouthwestInMeters] The southwest corner of the rectangle covered by the
       tiling scheme, in meters.  If this parameter or rectangleNortheastInMeters is not specified, the entire
       globe is covered in the longitude direction and an equal distance is covered in the latitude
       direction, resulting in a square projection.
@param {Cartesian2} [options.rectangleNortheastInMeters] The northeast corner of the rectangle covered by the
       tiling scheme, in meters.  If this parameter or rectangleSouthwestInMeters is not specified, the entire
       globe is covered in the longitude direction and an equal distance is covered in the latitude
       direction, resulting in a square projection.