private static void addFlagCoding(Product product, FlagCoding flagCoding, String flagCodingName) { final FlagCoding targetFlagCoding = new FlagCoding(flagCodingName); targetFlagCoding.setDescription(flagCoding.getDescription()); ProductUtils.copyMetadata(flagCoding, targetFlagCoding); product.getFlagCodingGroup().add(targetFlagCoding); }
private static void addFlagCoding(Product product, FlagCoding flagCoding) { final FlagCoding targetFlagCoding = new FlagCoding(flagCoding.getName()); targetFlagCoding.setDescription(flagCoding.getDescription()); ProductUtils.copyMetadata(flagCoding, targetFlagCoding); product.getFlagCodingGroup().add(targetFlagCoding); }
protected void addFlagCodingsToProduct(Product product) { final ProductNodeGroup<FlagCoding> flagCodingGroup = getSourceProduct().getFlagCodingGroup(); for (int i = 0; i < flagCodingGroup.getNodeCount(); i++) { FlagCoding sourceFlagCoding = flagCodingGroup.get(i); FlagCoding destFlagCoding = new FlagCoding(sourceFlagCoding.getName()); destFlagCoding.setDescription(sourceFlagCoding.getDescription()); cloneFlags(sourceFlagCoding, destFlagCoding); product.getFlagCodingGroup().add(destFlagCoding); } }
/** * Copies the given source flag coding to the target product. * If it exists already, the method simply returns the existing instance. * * @param sourceFlagCoding the source flag coding * @param target the target product * * @return The flag coding. */ public static FlagCoding copyFlagCoding(FlagCoding sourceFlagCoding, Product target) { FlagCoding flagCoding = target.getFlagCodingGroup().get(sourceFlagCoding.getName()); if (flagCoding == null) { flagCoding = new FlagCoding(sourceFlagCoding.getName()); flagCoding.setDescription(sourceFlagCoding.getDescription()); target.getFlagCodingGroup().add(flagCoding); copyMetadata(sourceFlagCoding, flagCoding); } return flagCoding; }
protected void addFlagCodingAndBitmaskDef() { BandReader bandReader = avhrrFile.createFlagBandReader(); Band flagsBand = new Band(bandReader.getBandName(), bandReader .getDataType(), avhrrFile.getProductWidth(), avhrrFile .getProductHeight()); FlagCoding fc = new FlagCoding(bandReader.getBandName()); fc.setDescription("Flag coding for AVHRR data quality"); addFlagAndBitmaskDef(fc, FLAG_QS, FLAG_QS_DESC, 0); addFlagAndBitmaskDef(fc, FLAG_SCANLINE, FLAG_SCANLINE_DESC, 1); addFlagAndBitmaskDef(fc, FLAG_3B, FLAG_SCANLINE_DESC, 2); addFlagAndBitmaskDef(fc, FLAG_4, FLAG_SCANLINE_DESC, 3); addFlagAndBitmaskDef(fc, FLAG_5, FLAG_SCANLINE_DESC, 4); addFlagAndBitmaskDef(fc, FLAG_SYNC, FLAG_SYNC_DESC, 5); flagsBand.setSampleCoding(fc); product.getFlagCodingGroup().add(fc); product.addBand(flagsBand); bandReaders.put(flagsBand, bandReader); }
private static FlagCoding createNdviFlagCoding() { FlagCoding ndviFlagCoding = new FlagCoding("ndvi_flags"); ndviFlagCoding.setDescription("NDVI Flag Coding"); MetadataAttribute attribute; attribute = new MetadataAttribute(NDVI_ARITHMETIC_FLAG_NAME, ProductData.TYPE_INT32); attribute.getData().setElemInt(NDVI_ARITHMETIC_FLAG_VALUE); attribute.setDescription("NDVI value calculation failed due to an arithmetic exception"); ndviFlagCoding.addAttribute(attribute); attribute = new MetadataAttribute(NDVI_LOW_FLAG_NAME, ProductData.TYPE_INT32); attribute.getData().setElemInt(NDVI_LOW_FLAG_VALUE); attribute.setDescription("NDVI value is too low"); ndviFlagCoding.addAttribute(attribute); attribute = new MetadataAttribute(NDVI_HIGH_FLAG_NAME, ProductData.TYPE_INT32); attribute.getData().setElemInt(NDVI_HIGH_FLAG_VALUE); attribute.setDescription("NDVI value is too high"); ndviFlagCoding.addAttribute(attribute); return ndviFlagCoding; }
private static FlagCoding createCloudFlagCoding(Product outputProduct) { MetadataAttribute cloudAttr; final FlagCoding flagCoding = new FlagCoding(CLOUD_FLAG_BAND); flagCoding.setDescription("Cloud Flag Coding"); cloudAttr = new MetadataAttribute("cloudy", ProductData.TYPE_UINT8); cloudAttr.getData().setElemInt(FLAG_CLOUDY); cloudAttr.setDescription("is with more than 80% cloudy"); flagCoding.addAttribute(cloudAttr); outputProduct.addMask(cloudAttr.getName(), flagCoding.getName() + "." + cloudAttr.getName(), cloudAttr.getDescription(), createBitmaskColor(1, 3), 0.5); cloudAttr = new MetadataAttribute("cloudfree", ProductData.TYPE_UINT8); cloudAttr.getData().setElemInt(FLAG_CLOUDFREE); cloudAttr.setDescription("is with less than 20% cloudy"); flagCoding.addAttribute(cloudAttr); outputProduct.addMask(cloudAttr.getName(), flagCoding.getName() + "." + cloudAttr.getName(), cloudAttr.getDescription(), createBitmaskColor(2, 3), 0.5); cloudAttr = new MetadataAttribute("cloud_uncertain", ProductData.TYPE_UINT8); cloudAttr.getData().setElemInt(FLAG_UNCERTAIN); cloudAttr.setDescription("is with between 20% and 80% cloudy"); flagCoding.addAttribute(cloudAttr); outputProduct.addMask(cloudAttr.getName(), flagCoding.getName() + "." + cloudAttr.getName(), cloudAttr.getDescription(), createBitmaskColor(3, 3), 0.5); return flagCoding; }
public void testWriteFlagCoding() throws Exception { Band flagBand = new Band("flag_band", ProductData.TYPE_UINT8, 10, 10); FlagCoding flagCoding = new FlagCoding("some_flags"); flagBand.setSampleCoding(flagCoding); flagCoding.setDescription("A Flag Coding"); for (int i = 0; i < 8; i++) { addFlag(flagCoding, i); } NetcdfFileWriteable writeable = NetcdfFileWriteable.createNew("not stored"); writeable.addDimension("y", flagBand.getSceneRasterHeight()); writeable.addDimension("x", flagBand.getSceneRasterWidth()); final DataType ncDataType = DataTypeUtils.getNetcdfDataType(flagBand.getDataType()); Variable variable = writeable.addVariable(flagBand.getName(), ncDataType, writeable.getRootGroup().getDimensions()); CfBandPart.writeCfBandAttributes(flagBand, new N3Variable(variable, writeable)); CfFlagCodingPart.writeFlagCoding(flagBand, new N3FileWriteable(writeable)); Variable someFlagsVariable = writeable.findVariable("flag_band"); assertNotNull(someFlagsVariable); Attribute flagMasksAttrib = someFlagsVariable.findAttribute("flag_masks"); assertNotNull(flagMasksAttrib); assertEquals(someFlagsVariable.getDataType(), flagMasksAttrib.getDataType()); assertEquals(8, flagMasksAttrib.getLength()); assertTrue(flagMasksAttrib.isUnsigned()); for (int i = 0; i < 8; i++) { assertEquals(1 << i, flagMasksAttrib.getValues().getInt(i)); } Attribute descriptionAttrib = someFlagsVariable.findAttribute("long_name"); assertNotNull(flagCoding.getDescription(), descriptionAttrib.getStringValue()); }