code: function createMappingFromFeatureMembers(featureMembers) {
    var mapping = {};
    featureMembers.forEach(member => {
      var shape = member.MonitoringPoint.shape;
      if (defined(shape.Point)) {
        var posString = shape.Point.pos;
        if (defined(posString.split)) {
          // Sometimes shape.Point.pos is actually an object, eg. {srsName: "http://www.opengis.net/def/crs/EPSG/0/4326"}
          var coords = posString.split(" ");
          if (coords.length === 2) {
            var identifier = member.MonitoringPoint.identifier.toString();
            mapping[identifier] = {
              lat: coords[0],
              lon: coords[1],
              name: member.MonitoringPoint.name,
              id: member.MonitoringPoint["gml:id"],
              identifier: identifier,
              type:
                member.MonitoringPoint.type &&
                member.MonitoringPoint.type["xlink:href"]
            };
            return mapping[identifier];
          }
        }
      } else {
        throw new DeveloperError(
          "Non-point feature not shown. You may want to implement `representAsGeoJson`. " +
            JSON.stringify(shape)
        );
      }
    });
    return mapping;
  }
docs: Converts the featureMembers into a mapping from identifier to its lat/lon and other info.
  @param  {Object[]} featureMembers An array of feature members as returned by GetFeatureOfInterest in body.GetFeatureOfInterestResponse.featuresResponse.featureMember.
  @return {Object} Keys = identifier, values = {lat, lon, name, id, identifier, type, chart}.
  @private