private boolean createGeocoding(Scene destScene) { final String latGridName = latgrid.getName(); final String lonGridName = lonGrid.getName(); final TiePointGrid latGrid = destScene.getProduct().getTiePointGrid(latGridName); final TiePointGrid lonGrid = destScene.getProduct().getTiePointGrid(lonGridName); if (latGrid != null && lonGrid != null) { destScene.setGeoCoding(new ModisTiePointGeoCoding(latGrid, lonGrid, getDatum())); return true; } return false; }
/** * Creates a model for an image pyramid. The method makes us of the * {@link org.esa.beam.framework.datamodel.Product#getNumResolutionsMax()} method in order to determine the * number of resolution levels for the pyramid. * * @param productNode The product node requesting the model. * @return A new image pyramid model. */ public static MultiLevelModel createMultiLevelModel(ProductNode productNode) { final Scene scene = SceneFactory.createScene(productNode); if (scene == null) { return null; } final int w = scene.getRasterWidth(); final int h = scene.getRasterHeight(); final AffineTransform i2mTransform = getImageToModelTransform(scene.getGeoCoding()); final Product product = scene.getProduct(); if (product != null && product.getNumResolutionsMax() > 0) { return new DefaultMultiLevelModel(product.getNumResolutionsMax(), i2mTransform, w, h); } else { return new DefaultMultiLevelModel(i2mTransform, w, h); } }
/** * Transfers the geo-coding of this product instance to the {@link Product destProduct} with respect to * the given {@link ProductSubsetDef subsetDef}. * * @param destProduct the destination product * @param subsetDef the definition of the subset, may be <code>null</code> * * @return true, if the geo-coding could be transferred. */ public boolean transferGeoCodingTo(final Product destProduct, final ProductSubsetDef subsetDef) { final Scene srcScene = SceneFactory.createScene(this); if (srcScene == null) { return false; } final Scene destScene = SceneFactory.createScene(destProduct); return destScene != null && srcScene.transferGeoCodingTo(destScene, subsetDef); }
private static boolean transferGeoCoding(final Scene sourceScene, final Scene targetScene, final ProductSubsetDef subsetDef) { final GeoCoding sourceGeoCoding = sourceScene.getGeoCoding(); if (sourceGeoCoding == null) { targetScene.setGeoCoding(null); return true; } if (sourceGeoCoding instanceof AbstractGeoCoding) { AbstractGeoCoding abstractGeoCoding = (AbstractGeoCoding) sourceGeoCoding; return abstractGeoCoding.transferGeoCoding(sourceScene, targetScene, subsetDef); } return false; }
@Override public boolean transferGeoCoding(Scene srcScene, Scene destScene, ProductSubsetDef subsetDef) { final AffineTransform destTransform = new AffineTransform(imageToMap); Rectangle destBounds = new Rectangle(destScene.getRasterWidth(), destScene.getRasterHeight()); if (subsetDef != null) { final Rectangle region = subsetDef.getRegion(); double scaleX = subsetDef.getSubSamplingX(); double scaleY = subsetDef.getSubSamplingY(); if (region != null) { destTransform.translate(region.getX(), region.getY()); destBounds.setRect(0, 0, region.getWidth() / scaleX, region.getHeight() / scaleY); } destTransform.scale(scaleX, scaleY); } try { destScene.setGeoCoding(new CrsGeoCoding(getMapCRS(), destBounds, destTransform)); } catch (Exception e) { Debug.trace(e); return false; } return true; }
final MapGeoCoding srcMapGeoCoding = ((MapGeoCoding) srcScene.getGeoCoding()); final MapInfo srcMapInfo = srcMapGeoCoding.getMapInfo(); float pixelX = srcMapInfo.getPixelX(); destMapInfo.setPixelSizeX(pixelSizeX); destMapInfo.setPixelSizeY(pixelSizeY); destMapInfo.setSceneWidth(destScene.getRasterWidth()); destMapInfo.setSceneHeight(destScene.getRasterHeight()); destScene.setGeoCoding(new MapGeoCoding(destMapInfo)); return true;
public void testTransferGeoCoding() { final Scene srcScene = SceneFactory.createScene(createProduct()); final Scene destScene = SceneFactory.createScene(new Product("test2", "test2", PW, PH)); final boolean transferred = srcScene.transferGeoCodingTo(destScene, null); assertTrue(transferred); final GeoCoding destGeoCoding = destScene.getGeoCoding(); assertNotNull(destGeoCoding); assertTrue(destGeoCoding instanceof TiePointGeoCoding); final PixelPos pixelPos = new PixelPos(PW/2.0f, PH/2.0f); final GeoPos srcGeoPos = srcScene.getGeoCoding().getGeoPos(pixelPos, null); final GeoPos destGeoPos = destScene.getGeoCoding().getGeoPos(pixelPos, null); assertEquals(srcGeoPos, destGeoPos); }
/** * Transfers the geo-coding of the {@link org.esa.beam.framework.datamodel.Scene srcScene} to the {@link org.esa.beam.framework.datamodel.Scene destScene} with respect to the given * {@link org.esa.beam.framework.dataio.ProductSubsetDef subsetDef}. * * @param srcScene the source scene * @param destScene the destination scene * @param subsetDef the definition of the subset, may be <code>null</code> * @return true, if the geo-coding could be transferred. */ @Override public boolean transferGeoCoding(final Scene srcScene, final Scene destScene, final ProductSubsetDef subsetDef) { BowtiePixelGeoCoding srcGeocoding = (BowtiePixelGeoCoding) srcScene.getGeoCoding(); final String latBandName = srcGeocoding._latBand.getName(); final String lonBandName = srcGeocoding._lonBand.getName(); ensureLatLonBands(destScene, subsetDef); final Band targetLatBand = destScene.getProduct().getBand(latBandName); final Band targetLonBand = destScene.getProduct().getBand(lonBandName); if (subsetDef != null) { if (subsetDef.getSubSamplingY() != 1) { destScene.setGeoCoding(GeoCodingFactory.createPixelGeoCoding(targetLatBand, targetLonBand, null, 5)); return true; } } if (targetLatBand != null && targetLonBand != null) { destScene.setGeoCoding(new BowtiePixelGeoCoding(targetLatBand, targetLonBand, srcGeocoding._scanlineHeight)); return true; } return false; }
public void testTransferGeoCodingWithoutSubset() { MapGeoCoding mapGeoCoding = createIdentityMapGeoCoding(); final Band destNode = new Band("destDummy", ProductData.TYPE_INT8, 10, 20); final Band srcNode = new Band("srcDummy", ProductData.TYPE_INT8, 10, 20); srcNode.setGeoCoding(mapGeoCoding); final Scene destScene = SceneFactory.createScene(destNode); final Scene srcScene = SceneFactory.createScene(srcNode); srcScene.transferGeoCodingTo(destScene, null); assertNotSame(mapGeoCoding, destScene.getGeoCoding()); final MapInfo origMapInfo = mapGeoCoding.getMapInfo(); final MapInfo copyMapInfo = ((MapGeoCoding) destScene.getGeoCoding()).getMapInfo(); assertNotSame(origMapInfo, copyMapInfo); assertEquals(origMapInfo.getEasting(), copyMapInfo.getEasting(), 1e-6); assertEquals(origMapInfo.getNorthing(), copyMapInfo.getNorthing(), 1e-6); assertSame(origMapInfo.getDatum(), copyMapInfo.getDatum()); assertEquals(origMapInfo.getElevationModelName(), copyMapInfo.getElevationModelName()); assertEquals(origMapInfo.getMapProjection().getName(), copyMapInfo.getMapProjection().getName()); assertEquals(origMapInfo.getOrientation(), copyMapInfo.getOrientation(), 1e-6); assertEquals(origMapInfo.getPixelSizeX(), copyMapInfo.getPixelSizeX(), 1e-6); assertEquals(origMapInfo.getPixelSizeY(), copyMapInfo.getPixelSizeY(), 1e-6); assertEquals(origMapInfo.getPixelX(), copyMapInfo.getPixelY(), 1e-6); assertEquals(destScene.getRasterHeight(), copyMapInfo.getSceneHeight(), 1e-6); assertEquals(destScene.getRasterWidth(), copyMapInfo.getSceneWidth(), 1e-6); }
static Band createSubset(Band sourceBand, Scene targetScene, ProductSubsetDef subsetDef) { final Band targetBand = new Band(sourceBand.getName(), sourceBand.getDataType(), targetScene.getRasterWidth(), targetScene.getRasterHeight()); ProductUtils.copyRasterDataNodeProperties(sourceBand, targetBand); targetBand.setSourceImage(getSourceImage(subsetDef, sourceBand)); return targetBand; }
private void removeTiePointGrid(Scene destScene, String gridName) { final TiePointGrid tiePointGrid = destScene.getProduct().getTiePointGrid(gridName); if (tiePointGrid != null) { destScene.getProduct().removeTiePointGrid(tiePointGrid); } }
subsetDef.setSubSampling(2, 3); subsetDef.setRegion(10, 10, 50, 50); srcScene.transferGeoCodingTo(destScene, subsetDef); assertEquals(origMapInfo.getPixelY(), copyMapInfo.getPixelY(), 1e-6); assertEquals(destScene.getRasterHeight(), copyMapInfo.getSceneHeight(), 1e-6); assertEquals(destScene.getRasterWidth(), copyMapInfo.getSceneWidth(), 1e-6);
public void testTransferGeoCodingWithRegion() { final Scene srcScene = SceneFactory.createScene(new Band("srcTest", ProductData.TYPE_UINT8, 10, 10)); final Scene destScene = SceneFactory.createScene(new Band("destTest", ProductData.TYPE_UINT8, 4, 3)); final ProductSubsetDef subsetDef = new ProductSubsetDef("testSubset"); subsetDef.setRegion(3, 1, 4, 3); _srcGeoCoding.transferGeoCoding(srcScene, destScene, subsetDef); final GeoCoding actGeoCoding = destScene.getGeoCoding(); assertNotNull(actGeoCoding); final PixelPos srcPixelPos = new PixelPos(); final PixelPos destPixelPos = new PixelPos(); srcPixelPos.setLocation(3, 1); destPixelPos.setLocation(0, 0); assertEquals(_srcGeoCoding.getGeoPos(srcPixelPos, null), actGeoCoding.getGeoPos(destPixelPos, null)); srcPixelPos.setLocation(5, 1); destPixelPos.setLocation(2, 0); assertEquals(_srcGeoCoding.getGeoPos(srcPixelPos, null), actGeoCoding.getGeoPos(destPixelPos, null)); srcPixelPos.setLocation(6, 2); destPixelPos.setLocation(3, 1); assertEquals(_srcGeoCoding.getGeoPos(srcPixelPos, null), actGeoCoding.getGeoPos(destPixelPos, null)); srcPixelPos.setLocation(4, 3); destPixelPos.setLocation(1, 2); assertEquals(_srcGeoCoding.getGeoPos(srcPixelPos, null), actGeoCoding.getGeoPos(destPixelPos, null)); }
/** * Transfers the geo-coding of the {@link Scene srcScene} to the {@link Scene destScene} with respect to the given * {@link org.esa.beam.framework.dataio.ProductSubsetDef subsetDef}. * * @param srcScene the source scene * @param destScene the destination scene * @param subsetDef the definition of the subset, may be <code>null</code> * * @return true, if the geo-coding could be transferred. */ @Override public boolean transferGeoCoding(final Scene srcScene, final Scene destScene, final ProductSubsetDef subsetDef) { float pixelOffsetX = getPixelOffsetX(); float pixelOffsetY = getPixelOffsetY(); float pixelSizeX = getPixelSizeX(); float pixelSizeY = getPixelSizeY(); if (subsetDef != null) { if (subsetDef.getRegion() != null) { pixelOffsetX += subsetDef.getRegion().getX() * pixelSizeX; pixelOffsetY += subsetDef.getRegion().getY() * pixelSizeY; } pixelSizeX *= subsetDef.getSubSamplingX(); pixelSizeY *= subsetDef.getSubSamplingY(); } destScene.setGeoCoding(createCloneWithNewOffsetAndSize(pixelOffsetX, pixelOffsetY, pixelSizeX, pixelSizeY)); return true; }
/** * {@inheritDoc} */ @Override public boolean transferGeoCoding(Scene sourceScene, Scene targetScene, ProductSubsetDef subsetDef) { final double[] x2 = new double[x.length]; final double[] y2 = new double[y.length]; int offsetX = 0; int offsetY = 0; if (subsetDef.getRegion() != null) { offsetX = subsetDef.getRegion().x; offsetY = subsetDef.getRegion().y; } final int subSamplingX = subsetDef.getSubSamplingX(); final int subSamplingY = subsetDef.getSubSamplingY(); final int sceneWidth = targetScene.getRasterWidth(); final int sceneHeight = targetScene.getRasterHeight(); for (int i = 0; i < x2.length; i++) { x2[i] = (x[i] - offsetX) / subSamplingX; y2[i] = (y[i] - offsetY) / subSamplingY; } targetScene.setGeoCoding(new GcpGeoCoding(getMethod(), x2, y2, lons, lats, sceneWidth, sceneHeight, datum)); return true; }
@Test public void testCrossing180() throws Exception { final Rectangle imageBounds = new Rectangle(10, 20); srcGeoCoding = createCrsGeoCodingCross180(imageBounds); assertTrue(srcGeoCoding.isCrossingMeridianAt180()); final Band srcNode = new Band("srcDummy", ProductData.TYPE_INT8, 10, 20); srcNode.setGeoCoding(srcGeoCoding); srcScene = SceneFactory.createScene(srcNode); final ProductSubsetDef subsetDef = new ProductSubsetDef("subset"); subsetDef.setRegion(2, 2, 8, 8); subsetDef.setSubSampling(2, 2); boolean transfered = srcScene.transferGeoCodingTo(destScene, subsetDef); assertTrue(transfered); assertTrue(destScene.getGeoCoding().isCrossingMeridianAt180()); subsetDef.setRegion(2, 2, 2, 2); transfered = srcScene.transferGeoCodingTo(destScene, subsetDef); assertTrue(transfered); assertFalse(destScene.getGeoCoding().isCrossingMeridianAt180()); }
static Band createSubset(Band sourceBand, Scene targetScene, ProductSubsetDef subsetDef) { final Band targetBand = new Band(sourceBand.getName(), sourceBand.getDataType(), targetScene.getRasterWidth(), targetScene.getRasterHeight()); ProductUtils.copyRasterDataNodeProperties(sourceBand, targetBand); targetBand.setSourceImage(getSourceImage(subsetDef, sourceBand)); return targetBand; }
private void removeTiePointGrid(Scene destScene, String gridName) { final TiePointGrid tiePointGrid = destScene.getProduct().getTiePointGrid(gridName); if (tiePointGrid != null) { destScene.getProduct().removeTiePointGrid(tiePointGrid); } }
public void testTransferGeoCodingWithSubSampling() { final Scene srcScene = SceneFactory.createScene(new Band("srcTest", ProductData.TYPE_UINT8, 10, 10)); final Scene destScene = SceneFactory.createScene(new Band("destTest", ProductData.TYPE_UINT8, 4, 4)); final ProductSubsetDef subsetDef = new ProductSubsetDef("testSubset"); subsetDef.setSubSampling(3, 3); _srcGeoCoding.transferGeoCoding(srcScene, destScene, subsetDef); final GeoCoding actGeoCoding = destScene.getGeoCoding(); assertNotNull(actGeoCoding); final PixelPos srcPixelPos = new PixelPos(); final PixelPos destPixelPos = new PixelPos(); srcPixelPos.setLocation(0, 0); destPixelPos.setLocation(0, 0); assertEquals(_srcGeoCoding.getGeoPos(srcPixelPos, null), actGeoCoding.getGeoPos(destPixelPos, null)); srcPixelPos.setLocation(3, 0); destPixelPos.setLocation(1, 0); assertEquals(_srcGeoCoding.getGeoPos(srcPixelPos, null), actGeoCoding.getGeoPos(destPixelPos, null)); srcPixelPos.setLocation(6, 0); destPixelPos.setLocation(2, 0); assertEquals(_srcGeoCoding.getGeoPos(srcPixelPos, null), actGeoCoding.getGeoPos(destPixelPos, null)); srcPixelPos.setLocation(9, 0); destPixelPos.setLocation(3, 0); assertEquals(_srcGeoCoding.getGeoPos(srcPixelPos, null), actGeoCoding.getGeoPos(destPixelPos, null)); }
@Override public boolean transferGeoCoding(Scene srcScene, Scene destScene, ProductSubsetDef subsetDef) { final String latGridName = getLatGrid().getName(); final String lonGridName = getLonGrid().getName(); final Product destProduct = destScene.getProduct(); TiePointGrid latGrid = destProduct.getTiePointGrid(latGridName); if (latGrid == null) { latGrid = TiePointGrid.createSubset(getLatGrid(), subsetDef); destProduct.addTiePointGrid(latGrid); } TiePointGrid lonGrid = destProduct.getTiePointGrid(lonGridName); if (lonGrid == null) { lonGrid = TiePointGrid.createSubset(getLonGrid(), subsetDef); destProduct.addTiePointGrid(lonGrid); } if (latGrid != null && lonGrid != null) { if (subsetDef == null || subsetDef.getRegion() == null) { // re-use approximations destScene.setGeoCoding(new PodGeoCoding(latGrid, lonGrid, approximations)); } else { destScene.setGeoCoding(new PodGeoCoding(latGrid, lonGrid)); } return true; } else { return false; } }