final TiePointGrid slantRangeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, rangeTime);
private void addTiePointGrids(final Product product) { final int gridWidth = 11; final int gridHeight = 11; final int subSamplingX = product.getSceneRasterWidth() / (gridWidth - 1); final int subSamplingY = product.getSceneRasterHeight() / (gridHeight - 1); final BinaryRecord sceneRec = leaderFile.getSceneRecord(); final TiePointGrid slantRangeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY); slantRangeGrid.setUnit(Unit.NANOSECONDS); product.addTiePointGrid(slantRangeGrid); if (isProductIPF) { setIPFTiePointGridRasterData(slantRangeGrid); //populate sR grid data } if (sceneRec != null) { final TiePointGrid incidentAngleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY); incidentAngleGrid.setDiscontinuity(TiePointGrid.DISCONT_AUTO); incidentAngleGrid.setUnit(Unit.DEGREES); product.addTiePointGrid(incidentAngleGrid); } }
final TiePointGrid latGrid = new TiePointGrid("latitude", gridWidth, gridHeight, 0.5f, 0.5f, subSamplingX, subSamplingY, latTiePoints); latGrid.setUnit(Unit.DEGREES); final TiePointGrid lonGrid = new TiePointGrid("longitude", gridWidth, gridHeight, 0.5f, 0.5f, subSamplingX, subSamplingY, lonTiePoints, TiePointGrid.DISCONT_AT_180); lonGrid.setUnit(Unit.DEGREES);
private void addShiftFile(final Product product, final String fileName) { try { final File level1ProductDir = getBaseDir(); final File shiftFile = new File(level1ProductDir, "COMMON_AUXRASTER" + File.separator + fileName); if (shiftFile.exists()) { final SunRasterReader sunRasterReader = new SunRasterReader(); final Product shiftProduct = sunRasterReader.readProductNodes(shiftFile, null); final Band band = shiftProduct.getBandAt(0); band.readRasterDataFully(ProgressMonitor.NULL); final int gridWidth = band.getRasterWidth(); final int gridHeight = band.getRasterHeight(); final float subSamplingX = product.getSceneRasterWidth() / (float) (gridWidth - 1); final float subSamplingY = product.getSceneRasterHeight() / (float) (gridHeight - 1); final TiePointGrid azShiftGrid = new TiePointGrid(fileName, gridWidth, gridHeight, 0.5f, 0.5f, subSamplingX, subSamplingY, (float[]) band.getData().getElems()); product.addTiePointGrid(azShiftGrid); } } catch (Exception e) { SystemUtils.LOG.severe("Unable to add " + fileName + " shift file " + e.getMessage()); } }
public static Product createProduct1() { Product product = new Product("Test_Product_1", "Test_Type_1", 2048, 1024); product.addTiePointGrid(new TiePointGrid("Grid_A", 32, 16, 0, 0, 2048f / 32, 1024f / 16, createRandomPoints(32 * 16))); product.addTiePointGrid(new TiePointGrid("Grid_B", 32, 16, 0, 0, 2048f / 32, 1024f / 16, createRandomPoints(32 * 16))); product.addBand("Band_A", "sin(4 * PI * sqrt( sq(X/1000.0 - 1) + sq(Y/500.0 - 1) ))"); product.addBand("Band_B", "sin(4 * PI * sqrt( 2.0 * abs(X/1000.0 * Y/500.0) ))"); product.addMask("Mask_A", "Band_A > 0.5", "I am Mask A", Color.ORANGE, 0.5); product.addMask("Mask_B", "Band_B < 0.0", "I am Mask B", Color.RED, 0.5); product.getMetadataRoot().addElement(new MetadataElement("Global_Attributes")); product.getMetadataRoot().addElement(new MetadataElement("Local_Attributes")); product.setModified(false); double sx = 40.0 / product.getSceneRasterWidth(); AffineTransform at = new AffineTransform(); at.translate(-80, -30); at.rotate(0.3, 20.0, 10.0); at.scale(sx, sx); product.setSceneGeoCoding(new ATGeoCoding(at)); return product; }
final TiePointGrid latGrid = new TiePointGrid(OperatorUtils.TPG_LATITUDE, gridWidth, gridHeight, 0.0f, 0.0f, (int) subSamplingX, (int) subSamplingY, targetLatTiePoints); final TiePointGrid lonGrid = new TiePointGrid(OperatorUtils.TPG_LONGITUDE, gridWidth, gridHeight, 0.0f, 0.0f, (int) subSamplingX, (int) subSamplingY, targetLonTiePoints, TiePointGrid.DISCONT_AT_180);
@Override protected void addTiePointGrids(final Product product) { final int gridWidth = 4; final int gridHeight = 4; final double subSamplingX = (double) product.getSceneRasterWidth() / (gridWidth - 1); final double subSamplingY = (double) product.getSceneRasterHeight() / (gridHeight - 1); if (subSamplingX == 0 || subSamplingY == 0) return; final float[] flippedSlantRangeCorners = new float[4]; final float[] flippedIncidenceCorners = new float[4]; getFlippedCorners(product, flippedSlantRangeCorners, flippedIncidenceCorners); if (product.getTiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE) == null) { final float[] fineAngles = new float[gridWidth * gridHeight]; ReaderUtils.createFineTiePointGrid(2, 2, gridWidth, gridHeight, flippedIncidenceCorners, fineAngles); final TiePointGrid incidentAngleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, fineAngles); incidentAngleGrid.setUnit(Unit.DEGREES); product.addTiePointGrid(incidentAngleGrid); } final float[] fineSlantRange = new float[gridWidth * gridHeight]; ReaderUtils.createFineTiePointGrid(2, 2, gridWidth, gridHeight, flippedSlantRangeCorners, fineSlantRange); final TiePointGrid slantRangeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, fineSlantRange); slantRangeGrid.setUnit(Unit.NANOSECONDS); product.addTiePointGrid(slantRangeGrid); addShiftFiles(product); }
private static void addIncidenceAnglesSlantRangeTime(final Product product, final MetadataElement bandElem) { if (bandElem == null) return; final int gridWidth = 11; final int gridHeight = 11; final float subSamplingX = product.getSceneRasterWidth() / (float) (gridWidth - 1); final float subSamplingY = product.getSceneRasterHeight() / (float) (gridHeight - 1); final double nearRangeAngle = bandElem.getAttributeDouble("Near_Incidence_Angle", 0); final double farRangeAngle = bandElem.getAttributeDouble("Far_Incidence_Angle", 0); final double firstRangeTime = bandElem.getAttributeDouble("Zero_Doppler_Range_First_Time", 0) * Constants.oneBillion; final double lastRangeTime = bandElem.getAttributeDouble("Zero_Doppler_Range_Last_Time", 0) * Constants.oneBillion; final float[] incidenceCorners = new float[]{(float) nearRangeAngle, (float) farRangeAngle, (float) nearRangeAngle, (float) farRangeAngle}; final float[] slantRange = new float[]{(float) firstRangeTime, (float) lastRangeTime, (float) firstRangeTime, (float) lastRangeTime}; final float[] fineAngles = new float[gridWidth * gridHeight]; final float[] fineTimes = new float[gridWidth * gridHeight]; ReaderUtils.createFineTiePointGrid(2, 2, gridWidth, gridHeight, incidenceCorners, fineAngles); ReaderUtils.createFineTiePointGrid(2, 2, gridWidth, gridHeight, slantRange, fineTimes); final TiePointGrid incidentAngleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, fineAngles); incidentAngleGrid.setUnit(Unit.DEGREES); product.addTiePointGrid(incidentAngleGrid); final TiePointGrid slantRangeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, fineTimes); slantRangeGrid.setUnit(Unit.NANOSECONDS); product.addTiePointGrid(slantRangeGrid); }
private static void addIncidenceAnglesSlantRangeTime(final Product product, final MetadataElement bandElem) { if (bandElem == null) return; final int gridWidth = 11; final int gridHeight = 11; final float subSamplingX = product.getSceneRasterWidth() / (float) (gridWidth - 1); final float subSamplingY = product.getSceneRasterHeight() / (float) (gridHeight - 1); final double nearRangeAngle = bandElem.getAttributeDouble("Near_Incidence_Angle", 0); final double farRangeAngle = bandElem.getAttributeDouble("Far_Incidence_Angle", 0); final double firstRangeTime = bandElem.getAttributeDouble("Zero_Doppler_Range_First_Time", 0) * Constants.oneBillion; final double lastRangeTime = bandElem.getAttributeDouble("Zero_Doppler_Range_Last_Time", 0) * Constants.oneBillion; final float[] incidenceCorners = new float[]{(float)nearRangeAngle, (float)farRangeAngle, (float)nearRangeAngle, (float)farRangeAngle}; final float[] slantRange = new float[]{(float)firstRangeTime, (float)lastRangeTime, (float)firstRangeTime, (float)lastRangeTime}; final float[] fineAngles = new float[gridWidth * gridHeight]; final float[] fineTimes = new float[gridWidth * gridHeight]; ReaderUtils.createFineTiePointGrid(2, 2, gridWidth, gridHeight, incidenceCorners, fineAngles); ReaderUtils.createFineTiePointGrid(2, 2, gridWidth, gridHeight, slantRange, fineTimes); final TiePointGrid incidentAngleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, fineAngles); incidentAngleGrid.setUnit(Unit.DEGREES); product.addTiePointGrid(incidentAngleGrid); final TiePointGrid slantRangeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, fineTimes); slantRangeGrid.setUnit(Unit.NANOSECONDS); product.addTiePointGrid(slantRangeGrid); }
final TiePointGrid slantRangeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, rangeTime); final TiePointGrid incidentAngleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, angles);
final TiePointGrid slantRangeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, rangeTime); final TiePointGrid incidentAngleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, angles);
final TiePointGrid slantRangeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, rangeTime); final TiePointGrid incidentAngleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, angles);
final TiePointGrid incidentAngleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, fineAngles); incidentAngleGrid.setUnit(Unit.DEGREES); final TiePointGrid slantRangeTimeGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, fineTimes); slantRangeTimeGrid.setUnit(Unit.NANOSECONDS);
final TiePointGrid angleGrid = new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, targetTPGWidth, targetTPGHeight, 0.0f, 0.0f, subSamplingX, subSamplingY, targetIncidenceAngleTiePoints); angleGrid.setUnit(Unit.DEGREES); final TiePointGrid slrgtGrid = new TiePointGrid(OperatorUtils.TPG_SLANT_RANGE_TIME, targetTPGWidth, targetTPGHeight, 0.0f, 0.0f, subSamplingX, subSamplingY, targetSlantRangeTimeTiePoints); slrgtGrid.setUnit(Unit.NANOSECONDS); final TiePointGrid latGrid = new TiePointGrid(OperatorUtils.TPG_LATITUDE, targetTPGWidth, targetTPGHeight, 0.0f, 0.0f, subSamplingX, subSamplingY, targetLatTiePoints); latGrid.setUnit(Unit.DEGREES); final TiePointGrid lonGrid = new TiePointGrid(OperatorUtils.TPG_LONGITUDE, targetTPGWidth, targetTPGHeight, 0.0f, 0.0f, subSamplingX, subSamplingY, targetLonTiePoints, TiePointGrid.DISCONT_AT_180); lonGrid.setUnit(Unit.DEGREES);
/** * @param w width * @param h height * @return the created product */ private static Product createTestProduct(int w, int h) { final Product testProduct = TestUtils.createProduct("ASA_APG_1P", w, h); // create a Band: band1 final Band band1 = testProduct.addBand("Amplitude", ProductData.TYPE_INT32); band1.setUnit(Unit.AMPLITUDE); final int[] intValues = new int[w * h]; for (int i = 0; i < w * h; i++) { intValues[i] = i + 1; } band1.setData(ProductData.createInstance(intValues)); final float[] incidence_angle = new float[64]; Arrays.fill(incidence_angle, 30.0f); testProduct.addTiePointGrid(new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, 16, 4, 0, 0, 1, 1, incidence_angle)); return testProduct; } }
/** * @param w width * @param h height * @return the created product */ private static Product createTestProduct(String name, String unit, int w, int h) { final Product testProduct = TestUtils.createProduct("ASA_APG_1P", w, h); // create a Band: band1 final Band band1 = testProduct.addBand(name, ProductData.TYPE_INT32); band1.setUnit(unit); final int[] intValues = new int[w * h]; for (int i = 0; i < w * h; i++) { intValues[i] = i + 1; } band1.setData(ProductData.createInstance(intValues)); final float[] incidence_angle = new float[64]; Arrays.fill(incidence_angle, 30.0f); testProduct.addTiePointGrid(new TiePointGrid(OperatorUtils.TPG_INCIDENT_ANGLE, 16, 4, 0, 0, 1, 1, incidence_angle)); return testProduct; } }
public static TiePointGrid createTiePointGrid(final Variable variable, final int gridWidth, final int gridHeight, final int sceneWidth, final int sceneHeight) throws IOException { final NcAttributeMap attMap = NcAttributeMap.create(variable); final double subSamplingX = (double) sceneWidth / (double) (gridWidth - 1); final double subSamplingY = (double) sceneHeight / (double) (gridHeight - 1); final Array data = variable.read(); final float[] dataArray = new float[(int) data.getSize()]; //(float[])data.copyTo1DJavaArray(); for (int i = 0; i < data.getSize(); ++i) { dataArray[i] = data.getFloat(i); } final TiePointGrid tpg = new TiePointGrid(variable.getShortName(), gridWidth, gridHeight, 0, 0, subSamplingX, subSamplingY, dataArray); tpg.setDescription(getDescription(variable, attMap)); tpg.setUnit(getUnit(variable, attMap)); tpg.setScalingFactor(getScalingFactor(attMap)); tpg.setScalingOffset(getAddOffset(attMap)); final Number noDataValue = getNoDataValue(attMap); if (noDataValue != null) { tpg.setNoDataValue(noDataValue.doubleValue()); tpg.setNoDataValueUsed(true); } return tpg; }
public static Product createProduct2() { Product product = new Product("Test_Product_2", "Test_Type_2", 1024, 2048); product.addTiePointGrid(new TiePointGrid("Grid_1", 16, 32, 0, 0, 1024f / 16, 2048f / 32, createRandomPoints(32 * 16))); product.addTiePointGrid(new TiePointGrid("Grid_2", 16, 32, 0, 0, 1024f / 16, 2048f / 32, createRandomPoints(32 * 16))); product.addBand("Band_1", "cos(X/100)-sin(Y/100)"); product.addBand("Band_2", "sin(X/100)+cos(Y/100)"); product.addBand("Band_3", "cos(X/100)*cos(Y/100)"); product.addBand("Band_1_Unc", "cos(3*X/100)-sin(3*Y/100)"); product.addBand("Band_2_Unc", "sin(3*X/100)+cos(3*Y/100)"); product.addBand("Band_3_Unc", "cos(3*X/100)*cos(3*Y/100)"); product.getBand("Band_1").addAncillaryVariable(product.getBand("Band_1_Unc"), "uncertainty"); product.getBand("Band_2").addAncillaryVariable(product.getBand("Band_2_Unc"), "uncertainty"); product.getBand("Band_3").addAncillaryVariable(product.getBand("Band_3_Unc"), "uncertainty"); product.addMask("Mask_1", "Band_1 > 0.5", "I am Mask 1", Color.GREEN, 0.5); product.addMask("Mask_2", "Band_2 < 0.0", "I am Mask 2", Color.CYAN, 0.5); product.addMask("Mask_3", "Band_3 > -0.1 && Band_3 < 0.1", "I am Mask 3", Color.BLUE, 0.5); product.getMetadataRoot().addElement(new MetadataElement("Global_Attributes")); product.getMetadataRoot().addElement(new MetadataElement("Local_Attributes")); product.setModified(false); double sx = 20.0 / product.getSceneRasterWidth(); AffineTransform at = new AffineTransform(); at.scale(sx, sx); at.rotate(-0.2, 10.0, 10.0); product.setSceneGeoCoding(new ATGeoCoding(at)); product.addBand("A", "Band_1"); product.addBand("B", "Band_1 + Band_2 + Band_3"); product.addBand("C", "Band_1 / (2.3 + Band_2 + Band_3)"); product.addBand("D", "pow(Band_1, 3) / (pow(Band_1, 3) + pow(Band_3, 3))"); return product; }
this.tiePointGrids.put(sourceBand.getName(), new TiePointGrid("angles_" + sourceBand.getName(), 2, 2, 0, 0, sourceBandWidth, sourceBandHeight, tiePoints)); } else { int sunZenithBandWidth = sunZenithBand.getRasterWidth(); this.tiePointGrids.put(sourceBand.getName(), new TiePointGrid("angles_" + sourceBand.getName(), sunZenithBandWidth, sunZenithBandHeight, 0, 0, sourceBandWidth, sourceBandHeight, tiePoints));
contextProduct.addTiePointGrid(new TiePointGrid(grid.getName(), 10, 10, 0, 0, 1, 1, new float[100]));