_validateLocationSet(obj) {
    if (obj.locationSetID) return;  // work was done already

    try {
      let locationSet = obj.locationSet;
      if (!locationSet) {
        throw new Error('object missing locationSet property');
      }
      if (!locationSet.include) {      // missing `include`, default to worldwide include
        locationSet.include = ['Q2'];  // https://github.com/openstreetmap/iD/pull/8305#discussion_r662344647
      }

      // Validate the locationSet only
      // Resolve the include/excludes
      const locationSetID = _loco.validateLocationSet(locationSet).id;
      obj.locationSetID = locationSetID;
      if (this._knownLocationSets.has(locationSetID)) return;   // seen one like this before

      let area = 0;

      // Resolve and index the 'includes'
      (locationSet.include || []).forEach(location => {
        const locationID = _loco.validateLocation(location).id;
        let geojson = this._resolved.get(locationID);

        if (!geojson) {    // first time seeing a location like this
          geojson = _loco.resolveLocation(location).feature;     // resolve to GeoJSON
          this._resolved.set(locationID, geojson);
        }
        area += geojson.properties.area;

        let s = this._locationIncludedIn.get(locationID);
        if (!s) {
          s = new Set();
          this._locationIncludedIn.set(locationID, s);
        }
        s.add(locationSetID);
      });

      // Resolve and index the 'excludes'
      (locationSet.exclude || []).forEach(location => {
        const locationID = _loco.validateLocation(location).id;
        let geojson = this._resolved.get(locationID);

        if (!geojson) {    // first time seeing a location like this
          geojson = _loco.resolveLocation(location).feature;     // resolve to GeoJSON
          this._resolved.set(locationID, geojson);
        }
        area -= geojson.properties.area;

        let s = this._locationExcludedIn.get(locationID);
        if (!s) {
          s = new Set();
          this._locationExcludedIn.set(locationID, s);
        }
        s.add(locationSetID);
      });

      this._knownLocationSets.set(locationSetID, area);

    } catch {
      obj.locationSet = { include: ['Q2'] };  // default worldwide
      obj.locationSetID = '+[Q2]';
    }
  }
_validateLocationSet
Pass an Object with a `locationSet` property.
Validates the `locationSet` and sets a `locationSetID` property on the object.
To avoid so much computation we only resolve the include and exclude regions, but not the locationSet itself.

Use `_resolveLocationSet()` instead if you need to resolve geojson of locationSet, for example to render it.
Note: You need to call `_rebuildIndex()` after you're all finished validating the locationSets.

@param  `obj`  Object to check, it should have `locationSet` property