cdm/src/main/java/ucar/nc2/ft/point/standard/PointDatasetStandardFactory.java
@Override
  public Object isMine(FeatureType wantFeatureType, NetcdfDataset ds, Formatter errlog) throws IOException {
    if (wantFeatureType == null) wantFeatureType = FeatureType.ANY_POINT;
    if (wantFeatureType != FeatureType.ANY_POINT) {
      if (!wantFeatureType.isPointFeatureType())
        return null;
    }

    TableConfigurer tc = TableAnalyzer.getTableConfigurer(wantFeatureType, ds);

    // if no explicit tc, then check whatever we can before expensive analysis)
    if (tc == null) {
      boolean hasTime = false;
      boolean hasLat = false;
      boolean hasLon = false;
      for (CoordinateAxis axis : ds.getCoordinateAxes()) {
        if (axis.getAxisType() == AxisType.Time) //&& (axis.getRank() == 1))
          hasTime = true;
        if (axis.getAxisType() == AxisType.Lat) //&& (axis.getRank() == 1))
          hasLat = true;
        if (axis.getAxisType() == AxisType.Lon) //&& (axis.getRank() == 1))
          hasLon = true;
      }

      // minimum we need
      if (!(hasTime && hasLon && hasLat)) {
        errlog.format("PointDataset must have lat,lon,time");
        return null;
      }
    } else if (showTables) {
      System.out.printf("TableConfigurer = %s%n", tc.getClass().getName());
    }

    try {
      // gotta do some work
      TableAnalyzer analyser = TableAnalyzer.factory(tc, wantFeatureType, ds);
      if (analyser == null)
        return null;

      if (!analyser.featureTypeOk(wantFeatureType, errlog)) {
        return null;
      }
      return analyser;

    } catch (Throwable t) {
      return null;
    }
  }
@Override
  public Object isMine(FeatureType wantFeatureType, NetcdfDataset ds, Formatter errlog) throws IOException {
    if (wantFeatureType == null) wantFeatureType = FeatureType.ANY_POINT;
    if (wantFeatureType != FeatureType.ANY_POINT) {
      if (!wantFeatureType.isPointFeatureType())
        return null;
    }

    TableConfigurer tc = TableAnalyzer.getTableConfigurer(wantFeatureType, ds);

    // if no explicit tc, then check whatever we can before expensive analysis)
    if (tc == null) {
      boolean hasTime = false;
      boolean hasLat = false;
      boolean hasLon = false;
      for (CoordinateAxis axis : ds.getCoordinateAxes()) {
        if (axis.getAxisType() == AxisType.Time) //&& (axis.getRank() == 1))
          hasTime = true;
        if (axis.getAxisType() == AxisType.Lat) //&& (axis.getRank() == 1))
          hasLat = true;
        if (axis.getAxisType() == AxisType.Lon) //&& (axis.getRank() == 1))
          hasLon = true;
      }

      // minimum we need
      if (!(hasTime && hasLon && hasLat)) {
        errlog.format("PointDataset must have lat,lon,time");
        return null;
      }
    } else if (showTables) {
      System.out.printf("TableConfigurer = %s%n", tc.getClass().getName());
    }

    try {
      // gotta do some work
      TableAnalyzer analyser = TableAnalyzer.factory(tc, wantFeatureType, ds);
      if (analyser == null)
        return null;

      if (!analyser.featureTypeOk(wantFeatureType, errlog)) {
        return null;
      }
      return analyser;

    } catch (Throwable t) {
      return null;
    }
  }
Check if this is a POINT datatype. If so, a TableAnalyser is used to analyze its structure.
The TableAnalyser is reused when the dataset is opened.
<ol>
<li> Can handle ANY_POINT FeatureType.
<li> Must have time, lat, lon axis (from CoordSysBuilder)
<li> Call TableAnalyzer.factory() to create a TableAnalyzer
<li> TableAnalyzer must agree it can handle the requested FeatureType
</ol>

@param wantFeatureType desired feature type, null means FeatureType.ANY_POINT
@param ds              analyse this dataset
@param errlog          log error messages here (may not be null)
@return if successful, return non-null. This object is then passed back into open(), so analysis can be reused.
@throws IOException