private void removeTiePointGrid(Scene destScene, String gridName) { final TiePointGrid tiePointGrid = destScene.getProduct().getTiePointGrid(gridName); if (tiePointGrid != null) { destScene.getProduct().removeTiePointGrid(tiePointGrid); } }
private void removeTiePointGrid(Scene destScene, String gridName) { final TiePointGrid tiePointGrid = destScene.getProduct().getTiePointGrid(gridName); if (tiePointGrid != null) { destScene.getProduct().removeTiePointGrid(tiePointGrid); } }
private static void ensureBand(Scene destScene, Band sourceBand, ProductSubsetDef subsetDef) { Band band = destScene.getProduct().getBand(sourceBand.getName()); if (band == null) { Band newBand = createSubset(sourceBand, destScene, subsetDef); destScene.getProduct().addBand(newBand); } }
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; }
private static boolean transferGeoCodingBandwise(final Scene sourceScene, final Scene targetScene, final ProductSubsetDef subsetDef) { final String[] rasterNames = StringUtils.addArrays(sourceScene.getProduct().getBandNames(), sourceScene.getProduct().getTiePointGridNames()); int numTransferred = 0; for (String rasterName : rasterNames) { final RasterDataNode sourceRaster = sourceScene.getProduct().getRasterDataNode(rasterName); if (sourceRaster != null) { final Scene sourceRasterScene = SceneFactory.createScene(sourceRaster); final RasterDataNode targetRaster = targetScene.getProduct().getRasterDataNode(rasterName); if (targetRaster != null) { final Scene targetRasterScene = SceneFactory.createScene(targetRaster); if (transferGeoCoding(sourceRasterScene, targetRasterScene, subsetDef)) { numTransferred++; } else { BeamLogManager.getSystemLogger().warning( "failed to transfer geo-coding of band '" + sourceRaster.getName() + "'"); } } } } if (numTransferred == 0) { return transferGeoCoding(sourceScene, targetScene, subsetDef); } else { return numTransferred > 0; } }
static void copyReferencedRasters(String validMaskExpression, Scene sourceScene, Scene targetScene, ProductSubsetDef subsetDef) throws ParseException { final Product targetProduct = targetScene.getProduct(); final RasterDataNode[] nodes = BandArithmetic.getRefRasters(validMaskExpression, sourceScene.getProduct()); for (RasterDataNode node : nodes) { if (!targetProduct.containsRasterDataNode(node.getName())) { if (node instanceof TiePointGrid) { TiePointGrid tpg = TiePointGrid.createSubset((TiePointGrid) node, subsetDef); targetProduct.addTiePointGrid(tpg); } if (node instanceof Band) { final Band sourceBand = (Band) node; final Band band = createSubset(sourceBand, targetScene, subsetDef); targetProduct.addBand(band); setFlagCoding(band, sourceBand.getFlagCoding()); } } } }
/** * 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; }
private boolean recalculateTiePointGrids(Scene srcScene, Scene destScene, ProductSubsetDef subsetDef, String latGridName, String lonGridName) throws IOException { final TiePointGrid falseTiePointGrid = destScene.getProduct().getTiePointGrid(latGridName); final float rightOffsetX = falseTiePointGrid.getOffsetX(); final float falseOffsetY = falseTiePointGrid.getOffsetY(); removeTiePointGrid(destScene, lonGridName); final Product srcProduct = srcScene.getProduct(); final int sceneRasterHeight = srcProduct.getSceneRasterHeight(); final int tpRasterHeight = srcProduct.getTiePointGrid(lonGridName).getRasterHeight(); recalculatedLonFloats ); destScene.getProduct().addTiePointGrid(correctedLatTiePointGrid); destScene.getProduct().addTiePointGrid(correctedLonTiePointGrid);
/** * 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); } }
final String latGridName = _latGrid.getName(); final String lonGridName = _lonGrid.getName(); final Product destProduct = destScene.getProduct();
@Override public boolean transferGeoCoding(final Scene srcScene, final Scene destScene, final ProductSubsetDef subsetDef) { final Band srcLatBand = getLatBand(); final Product destProduct = destScene.getProduct(); Band latBand = destProduct.getBand(srcLatBand.getName()); if (latBand == null) { latBand = GeoCodingFactory.createSubset(srcLatBand, destScene, subsetDef); destProduct.addBand(latBand); } final Band srcLonBand = getLonBand(); Band lonBand = destProduct.getBand(srcLonBand.getName()); if (lonBand == null) { lonBand = GeoCodingFactory.createSubset(srcLonBand, destScene, subsetDef); destProduct.addBand(lonBand); } String validMaskExpression = getValidMask(); try { if (validMaskExpression != null) { GeoCodingFactory.copyReferencedRasters(validMaskExpression, srcScene, destScene, subsetDef); } } catch (ParseException ignored) { validMaskExpression = null; } destScene.setGeoCoding(new PixelGeoCoding2(latBand, lonBand, validMaskExpression)); return true; }
final String latGridName = getLatGrid().getName(); final String lonGridName = getLonGrid().getName(); final Product destProduct = destScene.getProduct(); TiePointGrid latGrid = destProduct.getTiePointGrid(latGridName); if (latGrid == 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; } }
public boolean transferGeoCoding(final Scene srcScene, final Scene destScene, final ProductSubsetDef subsetDef) { final Band srcLatBand = getLatBand(); final Product destProduct = destScene.getProduct(); Band latBand = destProduct.getBand(srcLatBand.getName()); if (latBand == null) {