/** * 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); }
public void testTransferGeoCodingWithoutSubset() { final Band srcNode = new Band("srcDummy",ProductData.TYPE_INT8, 10,20); srcNode.setGeoCoding(_geoCoding); final Scene srcScene = SceneFactory.createScene(srcNode); final Band destNode = new Band("destDummy",ProductData.TYPE_INT8, 10,20); final Scene destScene = SceneFactory.createScene(destNode); srcScene.transferGeoCodingTo(destScene, null); assertFXYGeoCodingIsCopied((FXYGeoCoding)destNode.getGeoCoding(), null); }
public void testTransferGeoCodingWithSubset() { final Band srcNode = new Band("srcDummy",ProductData.TYPE_INT8, 10,20); srcNode.setGeoCoding(_geoCoding); final Scene srcScene = SceneFactory.createScene(srcNode); final ProductSubsetDef subset = new ProductSubsetDef("subset"); subset.setRegion(10,10,50,50); subset.setSubSampling(2, 3); final Band destNode = new Band("destDummy",ProductData.TYPE_INT8, 10,20); final Scene destScene = SceneFactory.createScene(destNode); srcScene.transferGeoCodingTo(destScene, subset); assertFXYGeoCodingIsCopied((FXYGeoCoding)destNode.getGeoCoding(), subset); }
@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()); }
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); }
@Test public void testTransferGeoCodingWithSubset_Region() { final ProductSubsetDef subsetDef = new ProductSubsetDef("subset"); subsetDef.setRegion(2, 2, 4, 4); final boolean transfered = srcScene.transferGeoCodingTo(destScene, subsetDef); assertTrue(transfered); final GeoCoding destGeoCoding = destScene.getGeoCoding(); assertNotNull(destGeoCoding); assertNotSame(srcGeoCoding, destGeoCoding); assertEquals(srcGeoCoding.getDatum(), destGeoCoding.getDatum()); assertEquals(srcGeoCoding.getMapCRS(), destGeoCoding.getMapCRS()); // position (3,3) in source equals (1,1) in dest comparePixelPos(destGeoCoding, new PixelPos(3, 3), new PixelPos(1, 1)); }
public void testTransferGCFromProductToProduct() { final AbstractGeoCoding geoCoding = createFXYSumGeoCoding(); _srcProduct.setGeoCoding(geoCoding); final Scene srcScene = SceneFactory.createScene(_srcProduct); final Scene destScene = SceneFactory.createScene(_destProduct); srcScene.transferGeoCodingTo(destScene, _subsetDef); assertNotNull(_destProduct.getGeoCoding()); assertTrue(_destProduct.getGeoCoding() instanceof FXYGeoCoding); assertNotSame(_destProduct.getGeoCoding(), geoCoding); assertTrue(_destProduct.isUsingSingleGeoCoding()); assertSame(_destBand1.getGeoCoding(), _destProduct.getGeoCoding()); assertSame(_destBand2.getGeoCoding(), _destProduct.getGeoCoding()); }
public void testTransferGCFromBandToProduct() { final AbstractGeoCoding geoCoding = createFXYSumGeoCoding(); _srcBand1.setGeoCoding(geoCoding); final Scene srcScene = SceneFactory.createScene(_srcBand1); final Scene destScene = SceneFactory.createScene(_destProduct); srcScene.transferGeoCodingTo(destScene, _subsetDef); assertNotNull(_destProduct.getGeoCoding()); assertTrue(_destProduct.getGeoCoding() instanceof FXYGeoCoding); assertNotSame(_destProduct.getGeoCoding(), geoCoding); assertTrue(_destProduct.isUsingSingleGeoCoding()); assertSame(_destBand1.getGeoCoding(), _destProduct.getGeoCoding()); assertSame(_destBand2.getGeoCoding(), _destProduct.getGeoCoding()); }
@Test public void testTransferGeoCodingWithoutSubset() { final boolean returnValue = srcScene.transferGeoCodingTo(destScene, null); assertTrue(returnValue); final GeoCoding destGeoCoding = destScene.getGeoCoding(); assertNotNull(destGeoCoding); assertNotSame(srcGeoCoding, destGeoCoding); assertEquals(srcGeoCoding.getDatum(), destGeoCoding.getDatum()); assertEquals(srcGeoCoding.getMapCRS(), destGeoCoding.getMapCRS()); assertEquals(srcGeoCoding.getGeoCRS(), destGeoCoding.getGeoCRS()); assertEquals(srcGeoCoding.getGeoPos(new PixelPos(3.5f, 0.5f), null), destGeoCoding.getGeoPos(new PixelPos(3.5f, 0.5f), null)); }
public void testTransferGeoCoding_WithSpatialSubset() throws IOException { final Scene srcScene = SceneFactory.createScene(createProduct()); final ProductSubsetDef subsetDef = new ProductSubsetDef(); subsetDef.setRegion(2, 2, PW - 4, PH - 4); subsetDef.setSubSampling(1,2); final Product destProduct = ProductSubsetBuilder.createProductSubset(new Product("test2", "test2", PW, PH), subsetDef, "test2", ""); final Scene destScene = SceneFactory.createScene(destProduct); final boolean transferred = srcScene.transferGeoCodingTo(destScene, subsetDef); assertTrue(transferred); final GeoCoding destGeoCoding = destScene.getGeoCoding(); assertTrue(destGeoCoding instanceof TiePointGeoCoding); final GeoPos srcGeoPos = srcScene.getGeoCoding().getGeoPos(new PixelPos(4.5f, 6.5f), null); final PixelPos destPixelPos = destScene.getGeoCoding().getPixelPos(srcGeoPos, null); assertEquals(2.5, destPixelPos.getX(), 1.0e-1); assertEquals(1.5, destPixelPos.getY(), 1.0e-1); }
public void testTransferGCFromProductToBand() { final AbstractGeoCoding geoCoding = createFXYSumGeoCoding(); _srcProduct.setGeoCoding(geoCoding); _destBand2.setGeoCoding(createFXYSumGeoCoding()); final Scene srcScene = SceneFactory.createScene(_srcProduct); final Scene destScene = SceneFactory.createScene(_destBand1); srcScene.transferGeoCodingTo(destScene, _subsetDef); assertNotNull(_destBand1.getGeoCoding()); assertNotNull(_destBand2.getGeoCoding()); assertFalse(_destProduct.isUsingSingleGeoCoding()); assertTrue(_destBand1.getGeoCoding() instanceof FXYGeoCoding); assertTrue(_destBand2.getGeoCoding() instanceof FXYGeoCoding); assertNotSame(_destBand1.getGeoCoding(), geoCoding); assertNotSame(_destBand2.getGeoCoding(), geoCoding); assertNotSame(_destBand1.getGeoCoding(), _destBand2.getGeoCoding()); }
public void testTransferBandedGCFromProductToProduct() { final AbstractGeoCoding geoCoding1 = createFXYSumGeoCoding(); _srcBand1.setGeoCoding(geoCoding1); final AbstractGeoCoding geoCoding2 = createFXYSumGeoCoding(); _srcBand2.setGeoCoding(geoCoding2); final Scene srcScene = SceneFactory.createScene(_srcProduct); final Scene destScene = SceneFactory.createScene(_destProduct); srcScene.transferGeoCodingTo(destScene, _subsetDef); assertNotNull(_destProduct.getGeoCoding()); assertFalse(_destProduct.isUsingSingleGeoCoding()); assertNotNull(_destBand1.getGeoCoding()); assertNotNull(_destBand2.getGeoCoding()); assertTrue(_destBand1.getGeoCoding() instanceof FXYGeoCoding); assertTrue(_destBand2.getGeoCoding() instanceof FXYGeoCoding); assertNotSame(_destBand1.getGeoCoding(), geoCoding1); assertNotSame(_destBand2.getGeoCoding(), geoCoding2); }
public void testTransferBandedGCFromProductToBand() { final AbstractGeoCoding geoCoding1 = createFXYSumGeoCoding(); _srcBand1.setGeoCoding(geoCoding1); final AbstractGeoCoding geoCoding2 = createFXYSumGeoCoding(); _srcBand2.setGeoCoding(geoCoding2); _destBand2.setGeoCoding(createFXYSumGeoCoding()); final Scene srcScene = SceneFactory.createScene(_srcProduct); final Scene destScene = SceneFactory.createScene(_destBand1); srcScene.transferGeoCodingTo(destScene, _subsetDef); assertNotNull(_destProduct.getGeoCoding()); assertFalse(_destProduct.isUsingSingleGeoCoding()); assertNotNull(_destBand1.getGeoCoding()); assertNotNull(_destBand2.getGeoCoding()); assertTrue(_destBand1.getGeoCoding() instanceof FXYGeoCoding); assertNotSame(_destBand1.getGeoCoding(), geoCoding1); assertNotSame(_destBand1.getGeoCoding(), _destBand2.getGeoCoding()); }
@Test public void testTransferGeoCodingWithSubset_Subsampling() { final ProductSubsetDef subsetDef = new ProductSubsetDef("subset"); subsetDef.setSubSampling(2, 4); final boolean transfered = srcScene.transferGeoCodingTo(destScene, subsetDef); assertTrue(transfered); final GeoCoding destGeoCoding = destScene.getGeoCoding(); assertNotNull(destGeoCoding); assertNotSame(srcGeoCoding, destGeoCoding); assertEquals(srcGeoCoding.getDatum(), destGeoCoding.getDatum()); assertEquals(srcGeoCoding.getMapCRS(), destGeoCoding.getMapCRS()); assertEquals(srcGeoCoding.getGeoCRS(), destGeoCoding.getGeoCRS()); comparePixelPos(destGeoCoding, new PixelPos(0, 0), new PixelPos(0, 0)); comparePixelPos(destGeoCoding, new PixelPos(8, 0), new PixelPos(4, 0)); comparePixelPos(destGeoCoding, new PixelPos(8, 16), new PixelPos(4, 4)); comparePixelPos(destGeoCoding, new PixelPos(0, 16), new PixelPos(0, 4)); }
@Test public void testTransferGeoCodingWithSubset_SubsamplingAndRegion() { final ProductSubsetDef subsetDef = new ProductSubsetDef("subset"); subsetDef.setRegion(2, 2, 8, 8); subsetDef.setSubSampling(2, 2); final boolean transfered = srcScene.transferGeoCodingTo(destScene, subsetDef); assertTrue(transfered); final GeoCoding destGeoCoding = destScene.getGeoCoding(); assertNotNull(destGeoCoding); assertNotSame(srcGeoCoding, destGeoCoding); assertEquals(srcGeoCoding.getDatum(), destGeoCoding.getDatum()); assertEquals(srcGeoCoding.getMapCRS(), destGeoCoding.getMapCRS()); assertEquals(srcGeoCoding.getGeoCRS(), destGeoCoding.getGeoCRS()); comparePixelPos(destGeoCoding, new PixelPos(2, 2), new PixelPos(0, 0)); comparePixelPos(destGeoCoding, new PixelPos(10, 2), new PixelPos(4, 0)); comparePixelPos(destGeoCoding, new PixelPos(10, 10), new PixelPos(4, 4)); comparePixelPos(destGeoCoding, new PixelPos(2, 10), new PixelPos(0, 4)); }
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); }
subsetDef.setSubSampling(2, 3); subsetDef.setRegion(10, 10, 50, 50); srcScene.transferGeoCodingTo(destScene, subsetDef);