public static ucar.nc2.dataset.CoordinateSystem getCoordinateSystem(VariableDS variableDS) { final List<ucar.nc2.dataset.CoordinateSystem> systems = variableDS.getCoordinateSystems(); if (systems.isEmpty()) { throw new RuntimeException( "Coordinate system for Variable " + variableDS.getFullName() + " haven't been found"); } return systems.get(0); }
/** * get the data type */ public DataType getDataType() { return vs.getDataType(); }
/** * if val is missing data, see VariableDS.isMissingData() */ public boolean isMissingData(double val) { return vs.isMissing(val); }
/** @throws Exception */ private void initSlicesInfo() throws Exception { int[] shape = variableDS.getShape(); numberOfSlices = 1; for (int i = 0; i < variableDS.getShape().length - 2; i++) { if (!ignoredDimensions.contains(variableDS.getDimension(i).getFullName())) { numberOfSlices *= shape[i]; } } }
/** * Returns the data type which most closely represents the "raw" internal data of the variable. * This is the value returned by the default implementation of {@link * NetcdfImageReader#getRawDataType}. * * @param variable The variable. * @return The data type, or {@link DataBuffer#TYPE_UNDEFINED} if unknown. * @see NetcdfImageReader#getRawDataType */ public static int getRawDataType(final VariableIF variable) { VariableDS ds = (VariableDS) variable; final DataType type; if (Boolean.getBoolean(ENHANCE_SCALE_MISSING)) { type = ds.getDataType(); } else { type = ds.getOriginalDataType(); } return transcodeNetCDFDataType(type, variable.isUnsigned()); }
varElem.setAttribute("name", var.getFullName()); List dims = var.getDimensions(); for (int i=0; i<dims.size(); i++) { Dimension dim = (Dimension) dims.get(i); varElem.setAttribute("shape", buff.toString()); DataType dt = var.getDataType(); if (dt != null) varElem.setAttribute("type", dt.toString()); for (Attribute att : var.getAttributes()) { varElem.addContent(makeAttribute(att, "attribute")); if (var.isMetadata()) varElem.addContent( makeValues( var)); List csys = var.getCoordinateSystems(); if (csys.size() > 0) { buff.setLength(0);
public void check(Formatter f) { for (Variable v : getVariables()) { VariableDS vds = (VariableDS) v; if (vds.getOriginalDataType() != vds.getDataType()) { f.format("Variable %s has type %s, org = %s%n", vds.getFullName(), vds.getOriginalDataType(), vds.getDataType()); } if (vds.getOriginalVariable() != null) { Variable orgVar = vds.getOriginalVariable(); if (orgVar.getRank() != vds.getRank()) f.format("Variable %s has rank %d, org = %d%n", vds.getFullName(), vds.getRank(), orgVar.getRank()); } } }
String name = v.getShortName(); staxWriter.writeAttribute("name", escaper.escape(name)); String units = v.getUnitsString(); if ((units != null) && !units.equals(name) && !units.startsWith("Code")) staxWriter.writeAttribute(CDM.UNITS, escaper.escape(v.getUnitsString())); Attribute att = v.findAttribute(BufrIosp2.fxyAttName); String desc = (att == null) ? "N/A" : att.getStringValue(); staxWriter.writeAttribute("bufr", escaper.escape(desc)); if (v.getDataType() == DataType.CHAR) { ArrayChar ac = (ArrayChar) mdata; count++; if (v.getDataType().isNumeric()) { double val = mdata.nextDouble(); if (v.isMissing(val)) { staxWriter.writeCharacters("missing"); } else if ((v.getDataType() == DataType.FLOAT) || (v.getDataType() == DataType.DOUBLE)) { writeFloat(v, val);
.getDimension(variableDS.getRank() - NetCDFUtilities.X_DIMENSION) .getLength(); height = variableDS .getDimension(variableDS.getRank() - NetCDFUtilities.Y_DIMENSION) .getLength(); String candidateDimension = variableDS.getDimensions().get(0).getFullName(); MultipleBandsDimensionInfo multipleBands = reader.ancillaryFileManager.getMultipleBandsDimensionInfo(candidateDimension); numBands = variableDS.getRank() > 2 ? variableDS.getDimension(2).getLength() : 1; String description = variableDS.getDescription(); if (description == null) { description = variableDS.getShortName(); String unitString = variableDS.getUnitsString(); if (unitString != null) { try {
private List<CalendarDate> makeTimesFromChar(VariableDS org, Formatter errMessages) throws IOException { int ncoords = (int) org.getSize(); int rank = org.getRank(); int strlen = org.getShape(rank - 1); ncoords /= strlen; List<CalendarDate> result = new ArrayList<CalendarDate>(ncoords); ArrayChar data = (ArrayChar) org.read(); ArrayChar.StringIterator ii = data.getStringIterator(); ArrayObject.D1 sdata = new ArrayObject.D1(String.class, ncoords); for (int i = 0; i < ncoords; i++) { String coordValue = ii.next(); CalendarDate cd = makeCalendarDateFromStringCoord(coordValue, org, errMessages); sdata.set(i, coordValue); result.add( cd); } setCachedData(sdata, true); return result; }
VariableDS joinAggCoord = new VariableDS(ncDataset, null, null, dimName, coordType, dimName, null, null); ncDataset.addVariable(null, joinAggCoord); joinAggCoord.setProxyReader( this); if (isDate) joinAggCoord.addAttribute(new ucar.nc2.Attribute(_Coordinate.AxisType, "Time")); CacheVar cv = new CoordValueVar(joinAggCoord.getFullName(), joinAggCoord.getDataType(), joinAggCoord.getUnitsString()); joinAggCoord.setSPobject( cv); cacheList.add(cv); VariableDS vagg = new VariableDS(ncDataset, newGroup, null, aggVar.getShortName(), aggVar.getDataType(), dimName + " " + aggVar.getDimensionsString(), null, null); vagg.setProxyReader( this); DatasetConstructor.transferVariableAttributes(aggVar, vagg); Attribute att = vagg.findAttribute(_Coordinate.Axes); if (att != null) { String axes = dimName + " " + att.getStringValue(); vagg.addAttribute(new Attribute(_Coordinate.Axes, axes));
assert v instanceof VariableDS; VariableDS vs = (VariableDS) v; assert( vs.getDataType() == DataType.SHORT); Attribute att = vs.findAttribute(CDM.MISSING_VALUE); assert( null != att); assert( !att.isArray()); assert( vs.hasMissing()); assert( vs.hasMissingValue()); assert( vs.isMissing( (double) ((short) -9999))); assert( vs.isMissingValue( (double) ((short) -9999))); Array A = vs.read(); Index ima = A.getIndex(); int[] shape = A.getShape(); vs.setMissingDataIsMissing( false); vs.setFillValueIsMissing(false); assert( vs.getDataType() == DataType.SHORT); assert( !vs.hasMissing()); assert( vs.hasMissingValue()); assert( !vs.isMissing( (double) ((short) -9999))); assert( vs.isMissingValue( (double) ((short) -9999))); vs.setMissingDataIsMissing(true); assert( vs.hasMissing()); assert( vs.isMissing( (double) ((short) -9999)));
assert v instanceof VariableDS; VariableDS vs = (VariableDS) v; assert( vs.getDataType() == DataType.BYTE); Attribute att = vs.findAttribute("_FillValue"); assert( null != att); assert( !att.isArray()); assert( DataType.BYTE == att.getDataType()); assert( vs.hasMissing()); assert( vs.hasFillValue()); assert( vs.isMissing( (double) ((byte) 255))); assert( vs.isFillValue( (double) ((byte) 255))); Array A = vs.read(); assert( A.getElementType() == byte.class) : A.getElementType(); Index ima = A.getIndex();
try { ncfile = dataset.acquireFile(cancelTask); Variable v = ncfile.findVariable(timeAxis.getFullNameEscaped()); if (v == null) { logger.warn("readTimeCoordinates: variable = " + timeAxis.getFullName() + " not found in file " + dataset.getLocation()); return; VariableDS vds = (v instanceof VariableDS) ? (VariableDS) v : new VariableDS( null, v, true); CoordinateAxis1DTime timeCoordVar = CoordinateAxis1DTime.factory(ncDataset, vds, null); dateList.addAll(timeCoordVar.getCalendarDates()); int[] shape = timeAxis.getShape(); int ntimes = shape[0]; assert (ntimes == dateList.size()); DataType coordType = (timeAxis.getDataType() == DataType.STRING) ? DataType.STRING : DataType.DOUBLE; Array timeCoordVals = Array.factory(coordType, shape); IndexIterator ii = timeCoordVals.getIndexIterator(); if (timeAxis.getDataType() == DataType.STRING) { timeAxis.setDataType(DataType.DOUBLE); // otherwise fractional values get lost throw new IOException(e.getMessage()); timeAxis.addAttribute(new Attribute(CDM.UNITS, timeUnits)); timeAxis.setCachedData(timeCoordVals, false);
private void checkMissingValues(VariableDS elev, VariableDS azi, VariableDS time, VariableDS q) throws IOException, InvalidRangeException { Array elevData = elev.read(); IndexIterator elevII = elevData.getIndexIterator(); Array aziData = azi.read(); IndexIterator aziII = aziData.getIndexIterator(); Array timeData = time.read(); IndexIterator timeII = timeData.getIndexIterator(); while (elevII.hasNext()) { float elevValue = elevII.getFloatNext(); float aziValue = aziII.getFloatNext(); assert azi.isMissing(aziValue) == elev.isMissing(elevValue); // LOOK missing data broken for non-float coordinate axes //int timeValue = timeII.getIntNext(); //assert azi.isMissing(aziValue) == time.isMissing(timeValue) : " azi= "+aziValue +" time= "+timeValue; } int[] shape = q.getShape(); int rank = q.getRank(); int[] origin = new int[rank]; shape[rank-1] = 1; Array qData = q.read(origin, shape); assert qData.getSize() == aziData.getSize(); IndexIterator qII = qData.getIndexIterator(); aziII = aziData.getIndexIterator(); while (qII.hasNext()) { float qValue = qII.getFloatNext(); float aziValue = aziII.getFloatNext(); if (azi.isMissing(aziValue)) assert q.isMissing(qValue); } }
Variable orgVar = ncd_2dtime.findVariable(grid.getVariable().getFullNameEscaped()); VariableDS v = new VariableDS(target, orgVar, false); v.clearCoordinateSystems(); v.setDimensions(gridset.makeDimensions(v.getDimensions())); v.remove(v.findAttribute(_Coordinate.Axes)); v.remove(v.findAttribute(CF.COORDINATES)); String coords = makeCoordinatesAttribute(grid.getCoordinateSystem(), gridset.timeDimName); v.addAttribute(new Attribute(CF.COORDINATES, coords)); VariableDS vds = new VariableDS(newds.getRootGroup(), v, false); // reparent LOOK fishy !!!! vds.clearCoordinateSystems(); vds.remove(vds.findAttribute("coordinates"));
private TableConfig getPointConfig(NetcdfDataset ds, EncodingInfo info, Formatter errlog) throws IOException { if (info.time.getRank() != 1) { errlog.format("CFpointObs type=point: coord time must have rank 1, coord var= %s %n", info.time.getNameAndDimensions()); return null; } Dimension obsDim = info.time.getDimension(0); TableConfig obsTable = makeSingle(ds, obsDim, errlog); obsTable.featureType = FeatureType.POINT; return obsTable; }
static public CoordinateAxis1DTime factory(NetcdfDataset ncd, VariableDS org, Formatter errMessages) throws IOException { if (org instanceof CoordinateAxis1DTime) return (CoordinateAxis1DTime) org; if (org.getDataType() == DataType.CHAR) return new CoordinateAxis1DTime(ncd, org, errMessages, org.getDimension(0).getShortName()); else if (org.getDataType() == DataType.STRING) return new CoordinateAxis1DTime(ncd, org, errMessages, org.getDimensionsString()); else return new CoordinateAxis1DTime(ncd, org, errMessages); }
ReferencedEnvelope bbox = reader.georeferencing.getBoundingBox(variableDS.getShortName()); coordinateReferenceSystem = bbox.getCoordinateReferenceSystem();
@Test public void testScaleValidRange() throws IOException, URISyntaxException { File testResource = new File(getClass().getResource("testScaleOffsetMissingUnsigned.ncml").toURI()); try (NetcdfDataset ncd = NetcdfDataset.openDataset(testResource.getAbsolutePath(), true, null)) { VariableDS var = (VariableDS) ncd.findVariable("scaleValidRange"); var.addEnhancement(Enhance.ConvertMissing); Assert2.assertNearlyEquals(9.9f, (float) var.getValidMin()); Assert2.assertNearlyEquals(10.1f, (float) var.getValidMax()); Assert.assertEquals(DataType.FLOAT, var.getDataType()); // scale_factor is float. float[] expecteds = new float[] { Float.NaN, 9.9f, 10.0f, 10.1f, Float.NaN }; float[] actuals = (float[]) var.read().getStorage(); Assert2.assertArrayNearlyEquals(expecteds, actuals); } }