function load(that, geoJson, options, sourceUri, clear) {
  let name;
  if (defined(sourceUri)) {
    name = getFilenameFromUri(sourceUri);
  }

  if (defined(name) && that._name !== name) {
    that._name = name;
    that._changed.raiseEvent(that);
  }

  const typeHandler = geoJsonObjectTypes[geoJson.type];
  if (!defined(typeHandler)) {
    throw new RuntimeError(`Unsupported GeoJSON object type: ${geoJson.type}`);
  }

  //Check for a Coordinate Reference System.
  const crs = geoJson.crs;
  let crsFunction = crs !== null ? defaultCrsFunction : null;

  if (defined(crs)) {
    if (!defined(crs.properties)) {
      throw new RuntimeError("crs.properties is undefined.");
    }

    const properties = crs.properties;
    if (crs.type === "name") {
      crsFunction = crsNames[properties.name];
      if (!defined(crsFunction)) {
        throw new RuntimeError(`Unknown crs name: ${properties.name}`);
      }
    } else if (crs.type === "link") {
      let handler = crsLinkHrefs[properties.href];
      if (!defined(handler)) {
        handler = crsLinkTypes[properties.type];
      }

      if (!defined(handler)) {
        throw new RuntimeError(
          `Unable to resolve crs link: ${JSON.stringify(properties)}`,
        );
      }

      crsFunction = handler(properties);
    } else if (crs.type === "EPSG") {
      crsFunction = crsNames[`EPSG:${properties.code}`];
      if (!defined(crsFunction)) {
        throw new RuntimeError(`Unknown crs EPSG code: ${properties.code}`);
      }
    } else {
      throw new RuntimeError(`Unknown crs type: ${crs.type}`);
    }
  }

  return Promise.resolve(crsFunction).then(function (crsFunction) {
    if (clear) {
      that._entityCollection.removeAll();
    }

    // null is a valid value for the crs, but means the entire load process becomes a no-op
    // because we can't assume anything about the coordinates.
    if (crsFunction !== null) {
      typeHandler(that, geoJson, geoJson, crsFunction, options);
    }

    return Promise.all(that._promises).then(function () {
      that._promises.length = 0;
      DataSource.setLoading(that, false);
      return that;
    });
  });
}
Updates the data source to the provided time.  This function is optional and
is not required to be implemented.  It is provided for data sources which
retrieve data based on the current animation time or scene state.
If implemented, update will be called by {@link DataSourceDisplay} once a frame.

@param {JulianDate} time The simulation time.
@returns {boolean} True if this data source is ready to be displayed at the provided time, false otherwise.