@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; }
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; }
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; }
static Mask createSubset(Mask sourceMask, Scene targetScene, ProductSubsetDef subsetDef) { final Mask targetMask = Mask.BandMathsType.create(sourceMask.getName(), sourceMask.getDescription(), targetScene.getRasterWidth(), targetScene.getRasterHeight(), Mask.BandMathsType.getExpression(sourceMask), sourceMask.getImageColor(), sourceMask.getImageTransparency()); targetMask.setSourceImage(getSourceImage(subsetDef, sourceMask)); return targetMask; }
/** * 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); } }
/** * {@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; }
subsetRegion = subsetDef.getRegion(); } else { subsetRegion = new Rectangle(0, 0, srcScene.getRasterWidth(), srcScene.getRasterHeight());
destMapInfo.setPixelSizeY(pixelSizeY); destMapInfo.setSceneWidth(destScene.getRasterWidth()); destMapInfo.setSceneHeight(destScene.getRasterHeight()); destScene.setGeoCoding(new MapGeoCoding(destMapInfo)); return true;
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); }
assertEquals(origMapInfo.getPixelY(), copyMapInfo.getPixelY(), 1e-6); assertEquals(destScene.getRasterHeight(), copyMapInfo.getSceneHeight(), 1e-6); assertEquals(destScene.getRasterWidth(), copyMapInfo.getSceneWidth(), 1e-6);