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; }
/** * 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 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; }
@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; } }
/** * {@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; }
destProduct.addTiePointGrid(clonedLonGrid); BowtieTiePointGeoCoding destGeo = new BowtieTiePointGeoCoding(clonedLatGrid, clonedLonGrid, _scanlineHeight); destScene.setGeoCoding(destGeo); return true; destScene.setGeoCoding(new TiePointGeoCoding(latGrid, lonGrid, getDatum())); return true; destScene.setGeoCoding(destGeo);
/** * 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; }
@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; }
wrappers[i] = new CodingWrapper(gc, gcwPosX, gcwPosY, gcwWidth, gcwHeight); destScene.setGeoCoding(new CombinedFXYGeoCoding(wrappers)); return true;
destScene.setGeoCoding(new TiePointGeoCoding(latGrid, lonGrid, getDatum())); return true; } else {
destMapInfo.setSceneWidth(destScene.getRasterWidth()); destMapInfo.setSceneHeight(destScene.getRasterHeight()); destScene.setGeoCoding(new MapGeoCoding(destMapInfo)); return true;
validMaskExpression = null; destScene.setGeoCoding(new PixelGeoCoding(latBand, lonBand, validMaskExpression, getSearchRadius()));