private static int getGeoBoundaryStep(final GeoCoding geoCoding) { int step = 16; if (geoCoding instanceof TiePointGeoCoding) { final TiePointGeoCoding tiePointGeoCoding = (TiePointGeoCoding) geoCoding; step = Math.round(Math.min(tiePointGeoCoding.getLonGrid().getSubSamplingX(), tiePointGeoCoding.getLonGrid().getSubSamplingY())); } return step; }
ExpectedTiePointGrid(TiePointGrid tiePointGrid, Random random) { this(); this.name = tiePointGrid.getName(); this.description = tiePointGrid.getDescription(); this.offsetX = String.valueOf(tiePointGrid.getOffsetX()); this.offsetY = String.valueOf(tiePointGrid.getOffsetY()); this.subSamplingX = String.valueOf(tiePointGrid.getSubSamplingX()); this.subSamplingY = String.valueOf(tiePointGrid.getSubSamplingY()); expectedPixels = createExpectedPixels(tiePointGrid, random); }
/** * Returns the width in pixels of the scene represented by this tie-point grid. The value returned is * <code>(getRasterWidth() - 1) * getSubSamplingX() + 1</code> * * @return the scene width in pixels */ @Override public int getSceneRasterWidth() { if (getProduct() != null) { return getProduct().getSceneRasterWidth(); } else { return Math.round((getRasterWidth() - 1) * getSubSamplingX() + 1); } }
final float osX = lonGrid.getOffsetX(); final float osY = lonGrid.getOffsetY(); final float ssX = lonGrid.getSubSamplingX(); final float ssY = lonGrid.getSubSamplingY();
/** * Constructs geo-coding based on two given tie-point grids. * * @param latGrid the latitude grid * @param lonGrid the longitude grid * @param datum the geodetic datum */ public TiePointGeoCoding(TiePointGrid latGrid, TiePointGrid lonGrid, Datum datum) { Guardian.assertNotNull("latGrid", latGrid); Guardian.assertNotNull("lonGrid", lonGrid); Guardian.assertNotNull("datum", datum); if (latGrid.getRasterWidth() != lonGrid.getRasterWidth() || latGrid.getRasterHeight() != lonGrid.getRasterHeight() || latGrid.getOffsetX() != lonGrid.getOffsetX() || latGrid.getOffsetY() != lonGrid.getOffsetY() || latGrid.getSubSamplingX() != lonGrid.getSubSamplingX() || latGrid.getSubSamplingY() != lonGrid.getSubSamplingY()) { throw new IllegalArgumentException("latGrid is not compatible with lonGrid"); } this.latGrid = latGrid; this.lonGrid = lonGrid; this.datum = datum; approximationsComputed = false; }
private void initDiscont() { TiePointGrid base = this; final float[] tiePoints = base.getTiePoints(); final float[] sinTiePoints = new float[tiePoints.length]; final float[] cosTiePoints = new float[tiePoints.length]; for (int i = 0; i < tiePoints.length; i++) { float tiePoint = tiePoints[i]; sinTiePoints[i] = (float) Math.sin(MathUtils.DTOR * tiePoint); cosTiePoints[i] = (float) Math.cos(MathUtils.DTOR * tiePoint); } sinGrid = new TiePointGrid(base.getName(), base.getRasterWidth(), base.getRasterHeight(), base.getOffsetX(), base.getOffsetY(), base.getSubSamplingX(), base.getSubSamplingY(), sinTiePoints); cosGrid = new TiePointGrid(base.getName(), base.getRasterWidth(), base.getRasterHeight(), base.getOffsetX(), base.getOffsetY(), base.getSubSamplingX(), base.getSubSamplingY(), cosTiePoints); }
/** * Constructs geo-coding based on two given tie-point grids. * * @param latGrid the latitude grid, must not be <code>null</code> * @param lonGrid the longitude grid, must not be <code>null</code> * @param scanlineHeight the number of detectors in a scan */ public BowtieTiePointGeoCoding(TiePointGrid latGrid, TiePointGrid lonGrid, int scanlineHeight) { super(); Guardian.assertNotNull("latGrid", latGrid); Guardian.assertNotNull("lonGrid", lonGrid); if (latGrid.getRasterWidth() != lonGrid.getRasterWidth() || latGrid.getRasterHeight() != lonGrid.getRasterHeight() || latGrid.getOffsetX() != lonGrid.getOffsetX() || latGrid.getOffsetY() != lonGrid.getOffsetY() || latGrid.getSubSamplingX() != lonGrid.getSubSamplingX() || latGrid.getSubSamplingY() != lonGrid.getSubSamplingY()) { throw new IllegalArgumentException("latGrid is not compatible with lonGrid"); } _latGrid = latGrid; _lonGrid = lonGrid; setGridOwner(_lonGrid.getOwner()); _scanlineHeight = scanlineHeight; _scanlineOffset = 0; try { init(); } catch (IOException e) { throw new IllegalArgumentException("can not init geocode", e); } }
/** * Constructs geo-coding based on two given tie-point grids. * * @param latGrid the latitude grid, must not be <code>null</code> * @param lonGrid the longitude grid, must not be <code>null</code> * @param datum the datum (f.e. WGS84) */ public ModisTiePointGeoCoding(TiePointGrid latGrid, TiePointGrid lonGrid, final Datum datum) { Guardian.assertNotNull("latGrid", latGrid); Guardian.assertNotNull("lonGrid", lonGrid); Guardian.assertNotNull("datum", datum); if (latGrid.getRasterWidth() != lonGrid.getRasterWidth() || latGrid.getRasterHeight() != lonGrid.getRasterHeight() || latGrid.getOffsetX() != lonGrid.getOffsetX() || latGrid.getOffsetY() != lonGrid.getOffsetY() || latGrid.getSubSamplingX() != lonGrid.getSubSamplingX() || latGrid.getSubSamplingY() != lonGrid.getSubSamplingY()) { throw new IllegalArgumentException("latGrid is not compatible with lonGrid"); } latgrid = latGrid; this.lonGrid = lonGrid; this.datum = datum; lastCenterLineIndex = 0; init(); }
@Override public void preEncode(ProfileWriteContext ctx, Product p) throws IOException { final HashMap<String, String> dimMap = new HashMap<String, String>(); final NFileWriteable ncFile = ctx.getNetcdfFileWriteable(); for (TiePointGrid tiePointGrid : p.getTiePointGrids()) { final String key = "" + tiePointGrid.getRasterHeight() + " " + tiePointGrid.getRasterWidth(); String dimString = dimMap.get(key); if (dimString == null) { final int size = dimMap.size(); final String suffix = size > 0 ? "" + (size + 1) : ""; ncFile.addDimension("tp_y" + suffix, tiePointGrid.getRasterHeight()); ncFile.addDimension("tp_x" + suffix, tiePointGrid.getRasterWidth()); dimString = "tp_y" + suffix + " " + "tp_x" + suffix; dimMap.put(key, dimString); } String variableName = ReaderUtils.getVariableName(tiePointGrid); final NVariable variable = ncFile.addVariable(variableName, DataType.FLOAT, null, dimString); variable.addAttribute(OFFSET_X, tiePointGrid.getOffsetX()); variable.addAttribute(OFFSET_Y, tiePointGrid.getOffsetY()); variable.addAttribute(SUBSAMPLING_X, tiePointGrid.getSubSamplingX()); variable.addAttribute(SUBSAMPLING_Y, tiePointGrid.getSubSamplingY()); } }
public static TiePointGrid createZenithFromElevationAngleTiePointGrid(TiePointGrid elevationAngleGrid) { final float[] elevationAngles = elevationAngleGrid.getTiePoints(); final float[] zenithAngles = new float[elevationAngles.length]; for (int i = 0; i < zenithAngles.length; i++) { zenithAngles[i] = 90.0f - elevationAngles[i]; } return new TiePointGrid(elevationAngleGrid.getName(), elevationAngleGrid.getRasterWidth(), elevationAngleGrid.getRasterHeight(), elevationAngleGrid.getOffsetX(), elevationAngleGrid.getOffsetY(), elevationAngleGrid.getSubSamplingX(), elevationAngleGrid.getSubSamplingY(), zenithAngles); }
public TiePointGrid cloneTiePointGrid() { final float[] srcTiePoints = this.getTiePoints(); final float[] destTiePoints = new float[srcTiePoints.length]; System.arraycopy(srcTiePoints, 0, destTiePoints, 0, srcTiePoints.length); TiePointGrid clone = new TiePointGrid(this.getName(), this.getRasterWidth(), this.getRasterHeight(), this.getOffsetX(), this.getOffsetY(), this.getSubSamplingX(), this.getSubSamplingY(), destTiePoints, this.getDiscontinuity()); clone.setUnit(getUnit()); clone.setDescription(getDescription()); return clone; }
@Test public void testTiePointFlipping_Vertical() throws IOException { final Product flipped = ProductFlipper.createFlippedProduct(product, ProductFlipper.FLIP_VERTICAL, "v", "v"); final TiePointGrid flippedT1 = flipped.getTiePointGrid("t1"); final float[] expectedT1 = { 0.3f, 0.2f, 0.4f, 0.8f, 0.9f, 0.4f, 0.6f, 0.3f, 0.4f }; assertTrue(Arrays.equals(expectedT1, (float[]) flippedT1.getDataElems())); assertEquals(0, flippedT1.getOffsetX(), 1.0e-6); assertEquals(6, flippedT1.getOffsetY(), 1.0e-6); assertEquals(5, flippedT1.getSubSamplingX(), 1.0e-6); assertEquals(5, flippedT1.getSubSamplingY(), 1.0e-6); final TiePointGrid flippedT2 = flipped.getTiePointGrid("t3"); assertEquals(1, flippedT2.getOffsetX(), 1.0e-6); assertEquals(9, flippedT2.getOffsetY(), 1.0e-6); assertEquals(3, flippedT2.getSubSamplingX(), 1.0e-6); assertEquals(3, flippedT2.getSubSamplingY(), 1.0e-6); GeneralPath[] flippedPath = ProductUtils.createGeoBoundaryPaths(flipped); assertEquals(1, flippedPath.length); final Rectangle2D expBounds = geoBoundaryPath[0].getBounds2D(); final Rectangle2D actualBounds = flippedPath[0].getBounds2D(); assertEquals(expBounds.getMinX(), actualBounds.getMinX(), 1.0e-6); assertEquals(expBounds.getMinY(), actualBounds.getMinY(), 1.0e-6); assertEquals(expBounds.getMaxX(), actualBounds.getMaxX(), 1.0e-6); assertEquals(expBounds.getMaxY(), actualBounds.getMaxY(), 1.0e-6); }
@Test public void testTiePointFlipping_Horizontal() throws IOException { final Product flipped = ProductFlipper.createFlippedProduct(product, ProductFlipper.FLIP_HORIZONTAL, "h", "h"); final TiePointGrid flippedT1 = flipped.getTiePointGrid("t1"); final float[] expectedT1 = { 0.4f, 0.3f, 0.6f, 0.4f, 0.9f, 0.8f, 0.4f, 0.2f, 0.3f }; assertTrue(Arrays.equals(expectedT1, (float[]) flippedT1.getDataElems())); assertEquals(4, flippedT1.getOffsetX(), 1.0e-6); assertEquals(0, flippedT1.getOffsetY(), 1.0e-6); assertEquals(5, flippedT1.getSubSamplingX(), 1.0e-6); assertEquals(5, flippedT1.getSubSamplingY(), 1.0e-6); final TiePointGrid flippedT2 = flipped.getTiePointGrid("t3"); assertEquals(7, flippedT2.getOffsetX(), 1.0e-6); assertEquals(1, flippedT2.getOffsetY(), 1.0e-6); assertEquals(3, flippedT2.getSubSamplingX(), 1.0e-6); assertEquals(3, flippedT2.getSubSamplingY(), 1.0e-6); GeneralPath[] flippedPath = ProductUtils.createGeoBoundaryPaths(flipped); assertEquals(1, flippedPath.length); final Rectangle2D expBounds = geoBoundaryPath[0].getBounds2D(); final Rectangle2D actualBounds = flippedPath[0].getBounds2D(); assertEquals(expBounds.getMinX(), actualBounds.getMinX(), 1.0e-6); assertEquals(expBounds.getMinY(), actualBounds.getMinY(), 1.0e-6); assertEquals(expBounds.getMaxX(), actualBounds.getMaxX(), 1.0e-6); assertEquals(expBounds.getMaxY(), actualBounds.getMaxY(), 1.0e-6); }
"OffsetY of TiePointGrid " + i + " expected <" + expTPGrid.getOffsetY() + "> but was <" + currentTPGrid.getOffsetY() + ">\r\n"); if (expTPGrid.getSubSamplingX() != currentTPGrid.getSubSamplingX()) { diff.append( "SubSamplingX of TiePointGrid " + i + " expected <" + expTPGrid.getSubSamplingX() + "> but was <" + currentTPGrid.getSubSamplingX() + ">\r\n");
JDomHelper.addElement(DimapProductConstants.TAG_TIE_POINT_OFFSET_Y, tiePointGrid.getOffsetY(), tiePointGridInfo); JDomHelper.addElement(DimapProductConstants.TAG_TIE_POINT_STEP_X, tiePointGrid.getSubSamplingX(), tiePointGridInfo); JDomHelper.addElement(DimapProductConstants.TAG_TIE_POINT_STEP_Y, tiePointGrid.getSubSamplingY(),
createScalarAttribute(datasetID, "offset_x", grid.getOffsetX()); createScalarAttribute(datasetID, "offset_y", grid.getOffsetY()); createScalarAttribute(datasetID, "sub_sampling_x", grid.getSubSamplingX()); createScalarAttribute(datasetID, "sub_sampling_y", grid.getSubSamplingY());
final float rightOffsetX = falseTiePointGrid.getOffsetX(); final float falseOffsetY = falseTiePointGrid.getOffsetY(); final float rightSubsamplingX = falseTiePointGrid.getSubSamplingX(); final float rightSubsamplingY = falseTiePointGrid.getSubSamplingY();
printLine(indent + 2, DimapProductConstants.TAG_TIE_POINT_OFFSET_X, tiePointGrid.getOffsetX()); printLine(indent + 2, DimapProductConstants.TAG_TIE_POINT_OFFSET_Y, tiePointGrid.getOffsetY()); printLine(indent + 2, DimapProductConstants.TAG_TIE_POINT_STEP_X, tiePointGrid.getSubSamplingX()); printLine(indent + 2, DimapProductConstants.TAG_TIE_POINT_STEP_Y, tiePointGrid.getSubSamplingY()); final boolean cyclic = tiePointGrid.getDiscontinuity() != TiePointGrid.DISCONT_NONE;
public void testAttributeQueries() { TiePointGrid grid = new TiePointGrid("x", 3, 5, 0, 0, 4, 2, _tiePoints); assertEquals("x", grid.getName()); assertEquals(3, grid.getRasterWidth()); assertEquals(5, grid.getRasterHeight()); assertEquals(9, grid.getSceneRasterHeight()); assertEquals(9, grid.getSceneRasterWidth()); assertEquals(9, grid.getSceneRasterHeight()); assertEquals(0, grid.getOffsetX(), 1e-6F); assertEquals(0, grid.getOffsetY(), 1e-6F); assertEquals(4, grid.getSubSamplingX(), 1e-6F); assertEquals(2, grid.getSubSamplingY(), 1e-6F); assertNotNull(grid.getTiePoints()); assertSame(grid.getTiePoints(), _tiePoints); assertEquals(15, grid.getTiePoints().length); for (int i = 0; i < 15; i++) { assertEquals(_tiePoints[i], grid.getTiePoints()[i], 1e-10F); } }
public void testClone() { TiePointGrid grid = new TiePointGrid("abc", 2, 2, 0.1f, 0.2f, 0.3f, 0.4f, new float[]{1.2f, 2.3f, 3.4f, 4.5f}); grid.setDescription("Aha!"); grid.setDiscontinuity(TiePointGrid.DISCONT_AT_180); TiePointGrid gridClone = grid.cloneTiePointGrid(); assertEquals("abc", gridClone.getName()); assertEquals("Aha!", gridClone.getDescription()); assertEquals(TiePointGrid.DISCONT_AT_180, gridClone.getDiscontinuity()); assertEquals(2, gridClone.getRasterWidth()); assertEquals(2, gridClone.getRasterHeight()); assertEquals(0.1f, gridClone.getOffsetX()); assertEquals(0.2f, gridClone.getOffsetY()); assertEquals(0.3f, gridClone.getSubSamplingX()); assertEquals(0.4f, gridClone.getSubSamplingY()); assertNotNull(gridClone.getData()); assertEquals(true, gridClone.getData().getElems() instanceof float[]); float[] dataClone = (float[]) gridClone.getData().getElems(); assertEquals(4, dataClone.length); assertEquals(1.2f, dataClone[0]); assertEquals(2.3f, dataClone[1]); assertEquals(3.4f, dataClone[2]); assertEquals(4.5f, dataClone[3]); assertNotSame(grid.getData().getElems(), dataClone); } }