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

  this._tilingScheme = options.tilingScheme;
  if (!defined(this._tilingScheme)) {
    this._tilingScheme = new GeographicTilingScheme({
      ellipsoid: options.ellipsoid ?? Ellipsoid.default,
    });
  }

  // Note: the 64 below does NOT need to match the actual vertex dimensions, because
  // the ellipsoid is significantly smoother than actual terrain.
  this._levelZeroMaximumGeometricError =
    TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(
      this._tilingScheme.ellipsoid,
      64,
      this._tilingScheme.getNumberOfXTilesAtLevel(0),
    );

  this._errorEvent = new Event();
}
A very simple {@link TerrainProvider} that produces geometry by tessellating an ellipsoidal
surface.

@alias EllipsoidTerrainProvider
@constructor

@param {object} [options] Object with the following properties:
@param {TilingScheme} [options.tilingScheme] The tiling scheme specifying how the ellipsoidal
surface is broken into tiles.  If this parameter is not provided, a {@link GeographicTilingScheme}
is used.
@param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid.  If the tilingScheme is specified,
this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither
parameter is specified, the default ellipsoid is used.

@see TerrainProvider