cdm/src/main/java/ucar/nc2/ft/point/standard/plug/CFpointObs.java
private TableConfig makeStationTable(NetcdfDataset ds, FeatureType ftype, EncodingInfo info, Formatter errlog) throws IOException {
    Variable lat = CoordSysEvaluator.findCoordByType(ds, AxisType.Lat);
    Variable lon = CoordSysEvaluator.findCoordByType(ds, AxisType.Lon);
    if (lat == null || lon == null) {
      errlog.format("CFpointObs: must have lat and lon coordinates%n");
      return null;
    }
    //Dimension stationDim = (info.encoding == Encoding.single) ? null : lat.getDimension(0); // assumes outer dim of lat is parent dimension, single = scalar

    Table.Type stationTableType = Table.Type.Structure;
    if (info.encoding == Encoding.single) stationTableType = Table.Type.Top;
    if (info.encoding == Encoding.flat) stationTableType = Table.Type.Construct;

    Dimension stationDim = (info.encoding == Encoding.flat) ? info.childDim : info.parentDim;
    String name = (stationDim == null) ? " single" : stationDim.getShortName();
    TableConfig stnTable = new TableConfig(stationTableType, name);
    stnTable.featureType = ftype;

    // stnId
    Variable stnIdVar = Evaluator.findVariableWithAttributeAndDimension(ds, CF.CF_ROLE, CF.TIMESERIES_ID, stationDim, errlog);
    if (stnIdVar == null)
      stnIdVar = Evaluator.findVariableWithAttributeAndDimension(ds, CF.STANDARD_NAME, CF.STATION_ID, stationDim, errlog);
    if (stnIdVar == null) {
      errlog.format("CFpointObs: must have a Station id variable with %s = %s%n", CF.CF_ROLE, CF.TIMESERIES_ID);
      return null;
    }
    stnTable.stnId = stnIdVar.getFullName();
    info.instanceId = stnIdVar;

    stnTable.stnDesc = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.PLATFORM_NAME, stationDim, errlog);
    if (stnTable.stnDesc == null)
      stnTable.stnDesc = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.STATION_DESC, stationDim, errlog);
    stnTable.stnWmoId = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.PLATFORM_ID, stationDim, errlog);
    if (stnTable.stnWmoId == null)
      stnTable.stnWmoId = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.STATION_WMOID, stationDim, errlog);
    stnTable.stnAlt = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.SURFACE_ALTITUDE, stationDim, errlog);
    if (stnTable.stnAlt == null)
      stnTable.stnAlt = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.STATION_ALTITUDE, stationDim, errlog);
    stnTable.lat = lat.getFullName();
    stnTable.lon = lon.getFullName();

    if (info.encoding != Encoding.single && stationDim != null) {
      stnTable.dimName = stationDim.getShortName();
      makeStructureInfo(stnTable, ds, stnIdVar.getParentStructure(), stationDim);
    }

    // LOOK probably need a standard name here
    // optional alt coord - detect if its a station height or actually associated with the obs, eg for a profile
    if (stnTable.stnAlt == null) {
      Variable alt = CoordSysEvaluator.findCoordByType(ds, AxisType.Height);
      if (alt != null) {
        if ((info.encoding == Encoding.single) && alt.getRank() == 0)
          stnTable.stnAlt = alt.getFullName();

        if ((info.encoding != Encoding.single) && (lat.getRank() == alt.getRank()) && alt.getRank() > 0 && alt.getDimension(0).equals(stationDim))
          stnTable.stnAlt = alt.getFullName();
      }
    }

    return stnTable;
  }
private TableConfig makeStationTable(NetcdfDataset ds, FeatureType ftype, EncodingInfo info, Formatter errlog) throws IOException {
    Variable lat = CoordSysEvaluator.findCoordByType(ds, AxisType.Lat);
    Variable lon = CoordSysEvaluator.findCoordByType(ds, AxisType.Lon);
    if (lat == null || lon == null) {
      errlog.format("CFpointObs: must have lat and lon coordinates%n");
      return null;
    }
    //Dimension stationDim = (info.encoding == Encoding.single) ? null : lat.getDimension(0); // assumes outer dim of lat is parent dimension, single = scalar

    Table.Type stationTableType = Table.Type.Structure;
    if (info.encoding == Encoding.single) stationTableType = Table.Type.Top;
    if (info.encoding == Encoding.flat) stationTableType = Table.Type.Construct;

    Dimension stationDim = (info.encoding == Encoding.flat) ? info.childDim : info.parentDim;
    String name = (stationDim == null) ? " single" : stationDim.getShortName();
    TableConfig stnTable = new TableConfig(stationTableType, name);
    stnTable.featureType = ftype;

    // stnId
    Variable stnIdVar = Evaluator.findVariableWithAttributeAndDimension(ds, CF.CF_ROLE, CF.TIMESERIES_ID, stationDim, errlog);
    if (stnIdVar == null)
      stnIdVar = Evaluator.findVariableWithAttributeAndDimension(ds, CF.STANDARD_NAME, CF.STATION_ID, stationDim, errlog);
    if (stnIdVar == null) {
      errlog.format("CFpointObs: must have a Station id variable with %s = %s%n", CF.CF_ROLE, CF.TIMESERIES_ID);
      return null;
    }
    stnTable.stnId = stnIdVar.getFullName();
    info.instanceId = stnIdVar;

    stnTable.stnDesc = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.PLATFORM_NAME, stationDim, errlog);
    if (stnTable.stnDesc == null)
      stnTable.stnDesc = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.STATION_DESC, stationDim, errlog);
    stnTable.stnWmoId = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.PLATFORM_ID, stationDim, errlog);
    if (stnTable.stnWmoId == null)
      stnTable.stnWmoId = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.STATION_WMOID, stationDim, errlog);
    stnTable.stnAlt = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.SURFACE_ALTITUDE, stationDim, errlog);
    if (stnTable.stnAlt == null)
      stnTable.stnAlt = Evaluator.findNameVariableWithStandardNameAndDimension(ds, CF.STATION_ALTITUDE, stationDim, errlog);
    stnTable.lat = lat.getFullName();
    stnTable.lon = lon.getFullName();

    if (info.encoding != Encoding.single && stationDim != null) {
      stnTable.dimName = stationDim.getShortName();
      makeStructureInfo(stnTable, ds, stnIdVar.getParentStructure(), stationDim);
    }

    // LOOK probably need a standard name here
    // optional alt coord - detect if its a station height or actually associated with the obs, eg for a profile
    if (stnTable.stnAlt == null) {
      Variable alt = CoordSysEvaluator.findCoordByType(ds, AxisType.Height);
      if (alt != null) {
        if ((info.encoding == Encoding.single) && alt.getRank() == 0)
          stnTable.stnAlt = alt.getFullName();

        if ((info.encoding != Encoding.single) && (lat.getRank() == alt.getRank()) && alt.getRank() > 0 && alt.getDimension(0).equals(stationDim))
          stnTable.stnAlt = alt.getFullName();
      }
    }

    return stnTable;
  }
private TableConfig makeStationTable ( NetcdfDataset ds , FeatureType ftype , EncodingInfo info , Formatter errlog ) throws IOException { Variable lat = CoordSysEvaluator . findCoordByType ( ds , AxisType . Lat ) ; Variable lon = CoordSysEvaluator . findCoordByType ( ds , AxisType . Lon ) ; if ( lat == null || lon == null ) { errlog . format ( "CFpointObs: must have lat and lon coordinates%n" ) ; return null ; } //Dimension stationDim = (info.encoding == Encoding.single) ? null : lat.getDimension(0); // assumes outer dim of lat is parent dimension, single = scalar
 Table . Type stationTableType = Table . Type . Structure ; if ( info . encoding == Encoding . single ) stationTableType = Table . Type . Top ; if ( info . encoding == Encoding . flat ) stationTableType = Table . Type . Construct ; Dimension stationDim = ( info . encoding == Encoding . flat ) ? info . childDim : info . parentDim ; String name = ( stationDim == null ) ? " single" : stationDim . getShortName ( ) ; TableConfig stnTable = new TableConfig ( stationTableType , name ) ; stnTable . featureType = ftype ; // stnId
 Variable stnIdVar = Evaluator . findVariableWithAttributeAndDimension ( ds , CF . CF_ROLE , CF . TIMESERIES_ID , stationDim , errlog ) ; if ( stnIdVar == null ) stnIdVar = Evaluator . findVariableWithAttributeAndDimension ( ds , CF . STANDARD_NAME , CF . STATION_ID , stationDim , errlog ) ; if ( stnIdVar == null ) { errlog . format ( "CFpointObs: must have a Station id variable with %s = %s%n" , CF . CF_ROLE , CF . TIMESERIES_ID ) ; return null ; } stnTable . stnId = stnIdVar . getFullName ( ) ; info . instanceId = stnIdVar ; stnTable . stnDesc = Evaluator . findNameVariableWithStandardNameAndDimension ( ds , CF . PLATFORM_NAME , stationDim , errlog ) ; if ( stnTable . stnDesc == null ) stnTable . stnDesc = Evaluator . findNameVariableWithStandardNameAndDimension ( ds , CF . STATION_DESC , stationDim , errlog ) ; stnTable . stnWmoId = Evaluator . findNameVariableWithStandardNameAndDimension ( ds , CF . PLATFORM_ID , stationDim , errlog ) ; if ( stnTable . stnWmoId == null ) stnTable . stnWmoId = Evaluator . findNameVariableWithStandardNameAndDimension ( ds , CF . STATION_WMOID , stationDim , errlog ) ; stnTable . stnAlt = Evaluator . findNameVariableWithStandardNameAndDimension ( ds , CF . SURFACE_ALTITUDE , stationDim , errlog ) ; if ( stnTable . stnAlt == null ) stnTable . stnAlt = Evaluator . findNameVariableWithStandardNameAndDimension ( ds , CF . STATION_ALTITUDE , stationDim , errlog ) ; stnTable . lat = lat . getFullName ( ) ; stnTable . lon = lon . getFullName ( ) ; if ( info . encoding != Encoding . single && stationDim != null ) { stnTable . dimName = stationDim . getShortName ( ) ; makeStructureInfo ( stnTable , ds , stnIdVar . getParentStructure ( ) , stationDim ) ; } // LOOK probably need a standard name here
 // optional alt coord - detect if its a station height or actually associated with the obs, eg for a profile
 if ( stnTable . stnAlt == null ) { Variable alt = CoordSysEvaluator . findCoordByType ( ds , AxisType . Height ) ; if ( alt != null ) { if ( ( info . encoding == Encoding . single ) && alt . getRank ( ) == 0 ) stnTable . stnAlt = alt . getFullName ( ) ; if ( ( info . encoding != Encoding . single ) && ( lat . getRank ( ) == alt . getRank ( ) ) && alt . getRank ( ) > 0 && alt . getDimension ( 0 ) . equals ( stationDim ) ) stnTable . stnAlt = alt . getFullName ( ) ; } } return stnTable ; }
for station and stationProfile, not flat
for station and stationProfile not flat