cdm/src/main/java/ucar/nc2/ft/point/standard/plug/Madis.java
public TableConfig getConfig(FeatureType wantFeatureType, NetcdfDataset ds, Formatter errlog) {

    Dimension obsDim = Evaluator.getDimension(ds, "recNum", errlog);
    if (obsDim == null) {
      errlog.format("MADIS: must have an Observation dimension: named recNum");
      return null;
    }
    VNames vn = getVariableNames(ds, errlog);

    String levVarName = null;
    String levDimName = null;
    boolean hasStruct = Evaluator.hasNetcdf3RecordStructure(ds);
    FeatureType ft = Evaluator.getFeatureType(ds, ":thredds_data_type", errlog);
    if (null == ft) {
      if ((ds.findDimension("manLevel") != null) && (ds.findVariable("prMan") != null)) {
        ft = FeatureType.STATION_PROFILE;
        levVarName = "prMan";
        levDimName = "manLevel";
      } else if ((ds.findDimension("level") != null) && (ds.findVariable("levels") != null)) {
        ft = FeatureType.STATION_PROFILE;
        levVarName = "levels";
        levDimName = "level";
      }
    }
    if (null == ft) ft = FeatureType.POINT;

    // points
    if ((wantFeatureType == FeatureType.POINT) || (ft == FeatureType.POINT)) {
      TableConfig ptTable = new TableConfig(Table.Type.Structure, hasStruct ? "record" : obsDim.getShortName() );
      ptTable.structName = "record";
      ptTable.featureType = FeatureType.POINT;
      ptTable.structureType = hasStruct ? TableConfig.StructureType.Structure : TableConfig.StructureType.PsuedoStructure;      

      ptTable.dimName = obsDim.getShortName();
      ptTable.time = vn.obsTime;
      ptTable.timeNominal = vn.nominalTime;
      ptTable.lat = vn.lat;
      ptTable.lon = vn.lon;
      ptTable.elev = vn.elev;

      return ptTable;
     }

    if (ft == FeatureType.STATION) {
      TableConfig stnTable = new TableConfig(Table.Type.Construct, "station");
      stnTable.featureType = FeatureType.STATION;

      TableConfig obs = new TableConfig(Table.Type.ParentId, "record");
      obs.parentIndex = vn.stnId;
      obs.dimName = Evaluator.getDimensionName(ds, "recNum", errlog);
      obs.time = vn.obsTime;
      obs.timeNominal = vn.nominalTime;

      obs.stnId = vn.stnId;
      obs.stnDesc = vn.stnDesc;
      obs.lat = vn.lat;
      obs.lon = vn.lon;
      obs.elev = vn.elev;

      stnTable.addChild(obs);
      return stnTable;
    }

    else if (ft == FeatureType.STATION_PROFILE) {
      TableConfig stnTable = new TableConfig(Table.Type.Construct, "station");
      stnTable.featureType = FeatureType.STATION_PROFILE;

      TableConfig obs = new TableConfig(Table.Type.ParentId, "record");
      obs.parentIndex = vn.stnId;
      obs.dimName = Evaluator.getDimensionName(ds, "recNum", errlog);
      obs.time = vn.obsTime;
      obs.timeNominal = vn.nominalTime;

      obs.stnId = vn.stnId;
      obs.stnDesc = vn.stnDesc;
      obs.lat = vn.lat;
      obs.lon = vn.lon;
      obs.stnAlt = vn.elev;
  
      stnTable.addChild(obs);

      TableConfig lev = new TableConfig(Table.Type.MultidimInner, "mandatory");
      lev.elev = levVarName;
      lev.outerName = obs.dimName;
      lev.innerName = levDimName;
      obs.addChild(lev);

      return stnTable;
    }

    return null;
  }
public TableConfig getConfig(FeatureType wantFeatureType, NetcdfDataset ds, Formatter errlog) {

    Dimension obsDim = Evaluator.getDimension(ds, "recNum", errlog);
    if (obsDim == null) {
      errlog.format("MADIS: must have an Observation dimension: named recNum");
      return null;
    }
    VNames vn = getVariableNames(ds, errlog);

    String levVarName = null;
    String levDimName = null;
    boolean hasStruct = Evaluator.hasNetcdf3RecordStructure(ds);
    FeatureType ft = Evaluator.getFeatureType(ds, ":thredds_data_type", errlog);
    if (null == ft) {
      if ((ds.findDimension("manLevel") != null) && (ds.findVariable("prMan") != null)) {
        ft = FeatureType.STATION_PROFILE;
        levVarName = "prMan";
        levDimName = "manLevel";
      } else if ((ds.findDimension("level") != null) && (ds.findVariable("levels") != null)) {
        ft = FeatureType.STATION_PROFILE;
        levVarName = "levels";
        levDimName = "level";
      }
    }
    if (null == ft) ft = FeatureType.POINT;

    // points
    if ((wantFeatureType == FeatureType.POINT) || (ft == FeatureType.POINT)) {
      TableConfig ptTable = new TableConfig(Table.Type.Structure, hasStruct ? "record" : obsDim.getShortName() );
      ptTable.structName = "record";
      ptTable.featureType = FeatureType.POINT;
      ptTable.structureType = hasStruct ? TableConfig.StructureType.Structure : TableConfig.StructureType.PsuedoStructure;      

      ptTable.dimName = obsDim.getShortName();
      ptTable.time = vn.obsTime;
      ptTable.timeNominal = vn.nominalTime;
      ptTable.lat = vn.lat;
      ptTable.lon = vn.lon;
      ptTable.elev = vn.elev;

      return ptTable;
     }

    if (ft == FeatureType.STATION) {
      TableConfig stnTable = new TableConfig(Table.Type.Construct, "station");
      stnTable.featureType = FeatureType.STATION;

      TableConfig obs = new TableConfig(Table.Type.ParentId, "record");
      obs.parentIndex = vn.stnId;
      obs.dimName = Evaluator.getDimensionName(ds, "recNum", errlog);
      obs.time = vn.obsTime;
      obs.timeNominal = vn.nominalTime;

      obs.stnId = vn.stnId;
      obs.stnDesc = vn.stnDesc;
      obs.lat = vn.lat;
      obs.lon = vn.lon;
      obs.elev = vn.elev;

      stnTable.addChild(obs);
      return stnTable;
    }

    else if (ft == FeatureType.STATION_PROFILE) {
      TableConfig stnTable = new TableConfig(Table.Type.Construct, "station");
      stnTable.featureType = FeatureType.STATION_PROFILE;

      TableConfig obs = new TableConfig(Table.Type.ParentId, "record");
      obs.parentIndex = vn.stnId;
      obs.dimName = Evaluator.getDimensionName(ds, "recNum", errlog);
      obs.time = vn.obsTime;
      obs.timeNominal = vn.nominalTime;

      obs.stnId = vn.stnId;
      obs.stnDesc = vn.stnDesc;
      obs.lat = vn.lat;
      obs.lon = vn.lon;
      obs.stnAlt = vn.elev;
  
      stnTable.addChild(obs);

      TableConfig lev = new TableConfig(Table.Type.MultidimInner, "mandatory");
      lev.elev = levVarName;
      lev.outerName = obs.dimName;
      lev.innerName = levDimName;
      obs.addChild(lev);

      return stnTable;
    }

    return null;
  }
public TableConfig getConfig ( FeatureType wantFeatureType , NetcdfDataset ds , Formatter errlog ) { Dimension obsDim = Evaluator . getDimension ( ds , "recNum" , errlog ) ; if ( obsDim == null ) { errlog . format ( "MADIS: must have an Observation dimension: named recNum" ) ; return null ; } VNames vn = getVariableNames ( ds , errlog ) ; String levVarName = null ; String levDimName = null ; boolean hasStruct = Evaluator . hasNetcdf3RecordStructure ( ds ) ; FeatureType ft = Evaluator . getFeatureType ( ds , ":thredds_data_type" , errlog ) ; if ( null == ft ) { if ( ( ds . findDimension ( "manLevel" ) != null ) && ( ds . findVariable ( "prMan" ) != null ) ) { ft = FeatureType . STATION_PROFILE ; levVarName = "prMan" ; levDimName = "manLevel" ; } else if ( ( ds . findDimension ( "level" ) != null ) && ( ds . findVariable ( "levels" ) != null ) ) { ft = FeatureType . STATION_PROFILE ; levVarName = "levels" ; levDimName = "level" ; } } if ( null == ft ) ft = FeatureType . POINT ; // points if ( ( wantFeatureType == FeatureType . POINT ) || ( ft == FeatureType . POINT ) ) { TableConfig ptTable = new TableConfig ( Table . Type . Structure , hasStruct ? "record" : obsDim . getShortName ( ) ) ; ptTable . structName = "record" ; ptTable . featureType = FeatureType . POINT ; ptTable . structureType = hasStruct ? TableConfig . StructureType . Structure : TableConfig . StructureType . PsuedoStructure ; ptTable . dimName = obsDim . getShortName ( ) ; ptTable . time = vn . obsTime ; ptTable . timeNominal = vn . nominalTime ; ptTable . lat = vn . lat ; ptTable . lon = vn . lon ; ptTable . elev = vn . elev ; return ptTable ; } if ( ft == FeatureType . STATION ) { TableConfig stnTable = new TableConfig ( Table . Type . Construct , "station" ) ; stnTable . featureType = FeatureType . STATION ; TableConfig obs = new TableConfig ( Table . Type . ParentId , "record" ) ; obs . parentIndex = vn . stnId ; obs . dimName = Evaluator . getDimensionName ( ds , "recNum" , errlog ) ; obs . time = vn . obsTime ; obs . timeNominal = vn . nominalTime ; obs . stnId = vn . stnId ; obs . stnDesc = vn . stnDesc ; obs . lat = vn . lat ; obs . lon = vn . lon ; obs . elev = vn . elev ; stnTable . addChild ( obs ) ; return stnTable ; } else if ( ft == FeatureType . STATION_PROFILE ) { TableConfig stnTable = new TableConfig ( Table . Type . Construct , "station" ) ; stnTable . featureType = FeatureType . STATION_PROFILE ; TableConfig obs = new TableConfig ( Table . Type . ParentId , "record" ) ; obs . parentIndex = vn . stnId ; obs . dimName = Evaluator . getDimensionName ( ds , "recNum" , errlog ) ; obs . time = vn . obsTime ; obs . timeNominal = vn . nominalTime ; obs . stnId = vn . stnId ; obs . stnDesc = vn . stnDesc ; obs . lat = vn . lat ; obs . lon = vn . lon ; obs . stnAlt = vn . elev ; stnTable . addChild ( obs ) ; TableConfig lev = new TableConfig ( Table . Type . MultidimInner , "mandatory" ) ; lev . elev = levVarName ; lev . outerName = obs . dimName ; lev . innerName = levDimName ; obs . addChild ( lev ) ; return stnTable ; } return null ; }
/*
<!-- C:/data/dt2/station/madis2.sao -->
<stationCollection>
<table dim="maxStaticIds" limit="nStaticIds">
<lastLink>lastRecord</lastLink>

<table dim="recNum">
<stationId>:stationIdVariable</stationId>
<stationWmoId>wmoId</stationWmoId>
<coordAxis type="time">timeObs</coordAxis>
<coordAxis type="lat">latitude</coordAxis>
<coordAxis type="lon">longitude</coordAxis>
<coordAxis type="height">elevation</coordAxis>
<prevLink>prevRecord</prevLink>
</table>

</table>

<cdmDataType>:thredds_data_type</cdmDataType>
</stationCollection>
/ * <! -- C : / data / dt2 / station / madis2 . sao -- > <stationCollection > <table dim = maxStaticIds limit = nStaticIds > <lastLink > lastRecord< / lastLink >