private boolean isSampleValueAvailableInRaster() { return levelZeroRasterX >= 0 && levelZeroRasterY >= 0 && levelZeroRasterX < currentRaster.getRasterWidth() && levelZeroRasterY < currentRaster.getRasterHeight(); }
private boolean coordinatesAreInRasterBounds(RasterDataNode raster, int x, int y, int level) { final RenderedImage levelImage = raster.getSourceImage().getImage(level); return x >= 0 && y >= 0 && x < levelImage.getWidth() && y < levelImage.getHeight(); }
private static long getImageFileSize(RasterDataNode band) { return (long) ProductData.getElemSize(band.getDataType()) * (long) band.getRasterWidth() * (long) band.getRasterHeight(); }
private String getKey(RasterDataNode rasterDataNode) { return rasterDataNode.getGeoCoding().toString() + " " + rasterDataNode.getRasterWidth() + " " + rasterDataNode.getRasterHeight(); }
final int targetDataType; MultiLevelImage sourceImage; if (sourceRaster.isScalingApplied()) { targetDataType = sourceRaster.getGeophysicalDataType(); sourceImage = sourceRaster.getGeophysicalImage(); } else { targetDataType = sourceRaster.getDataType(); sourceImage = sourceRaster.getSourceImage(); final Band targetBand = new Band(sourceRaster.getName(), targetDataType, (int) imageRect.getWidth(), (int) imageRect.getHeight()); targetProduct.addBand(targetBand); targetBand.setLog10Scaled(sourceRaster.isLog10Scaled()); targetBand.setNoDataValue(targetNoDataValue.doubleValue()); targetBand.setNoDataValueUsed(targetBand.getRasterWidth() == targetProduct.getSceneRasterWidth() && targetBand.getRasterHeight() == targetProduct.getSceneRasterHeight()); targetBand.setDescription(sourceRaster.getDescription()); targetBand.setUnit(sourceRaster.getUnit()); GeoCoding bandGeoCoding = reprojectionSettings.getGeoCoding(); if (bandGeoCoding != null) { if (orthorectify && sourceRaster.canBeOrthorectified()) { sourceGeoCoding = createOrthorectifier(sourceRaster); } else { sourceGeoCoding = sourceRaster.getGeoCoding(); final String exp = sourceRaster.getValidMaskExpression(); if (exp != null) { sourceImage = createNoDataReplacedImage(sourceRaster, targetNoDataValue);
@Override public void setValue(String newValue) { try { final Product product = raster.getProduct(); final RasterDataNode[] refRasters = BandArithmetic.getRefRasters(newValue, product); if (refRasters.length > 0 && (!BandArithmetic.areRastersEqualInSize(product, newValue) || refRasters[0].getRasterHeight() != raster.getRasterHeight() || refRasters[0].getRasterWidth() != raster.getRasterWidth())) { Dialogs.showInformation("Referenced rasters must all be the same size", null); } else { String oldValue = raster.getValidPixelExpression(); performUndoableProductNodeEdit("Edit Valid-Pixel Expression", raster, node -> { node.setValidPixelExpression(newValue); updateImages(node, true); }, node -> { node.setValidPixelExpression(oldValue); updateImages(node, true); } ); } } catch (ParseException e) { Dialogs.showError("Expression is invalid: " + e.getMessage()); } } }
private void updateTargetResolutionTargetWidthAndHeight() { if (hasSourceProducts()) { final Product selectedProduct = sourceProducts[0]; final RasterDataNode node = getAnyRasterDataNode(selectedProduct); int targetWidth = 0; int targetHeight = 0; if (node != null) { final int resolution = Integer.parseInt(resolutionSpinner.getValue().toString()); final double nodeResolution = node.getImageToModelTransform().getScaleX(); targetWidth = (int) (node.getRasterWidth() * (nodeResolution / resolution)); targetHeight = (int) (node.getRasterHeight() * (nodeResolution / resolution)); } targetResolutionTargetWidthLabel.setText("" + targetWidth); targetResolutionTargetHeightLabel.setText("" + targetHeight); } }
private MaskAreaStatistics computeMaskAreaStatistics(ProgressMonitor pm) { final MultiLevelImage maskImage = mask.getSourceImage(); final int numYTiles = maskImage.getNumYTiles(); final int w = mask.getRasterWidth(); final int h = mask.getRasterHeight(); final Rectangle imageRect = new Rectangle(0, 0, w, h); GeoCoding geoCoding = mask.getGeoCoding(); AreaCalculator areaCalculator = new AreaCalculator(geoCoding); MaskAreaStatistics areaStatistics = new MaskAreaStatistics(areaCalculator.getEarthRadius() / 1000.0);
private Orthorectifier createOrthorectifier(final RasterDataNode sourceBand) { return new Orthorectifier2(sourceBand.getRasterWidth(), sourceBand.getRasterHeight(), sourceBand.getPointing(), elevationModel, 25); }
if (!reprojectionSettingsMap.containsKey(key)) { GeoPos centerGeoPos = getCenterGeoPos(rasterDataNode.getGeoCoding(), rasterDataNode.getRasterWidth(), rasterDataNode.getRasterHeight()); CoordinateReferenceSystem targetCrs = createTargetCRS(centerGeoPos); ImageGeometry targetImageGeometry; targetRect, targetImageGeometry.getImage2MapTransform()); MultiLevelModel sourceModel = rasterDataNode.getMultiLevelModel(); reprojectionSettingsMap.put(key, new ReprojectionSettings(geoCoding, sourceModel, targetImageGeometry)); } catch (FactoryException | TransformException e) {
private ProductNodeGroup<Mask> getMaskGroup() { if (product == null) { return null; } else if (visibleBand == null) { return product.getMaskGroup(); } else { final ProductNodeGroup<Mask> visibleMasks = new ProductNodeGroup<Mask>("Masks for " + visibleBand.getName()); final ProductNodeGroup<Mask> maskGroup = product.getMaskGroup(); for (int i = 0; i < maskGroup.getNodeCount(); i++) { final Mask mask = maskGroup.get(i); // todo - [multisize_products] fix: ask ImageGeometry whether mask and band have the same scenerastertransform if (mask.getRasterWidth() == visibleBand.getRasterWidth() && mask.getRasterHeight() == visibleBand.getRasterHeight()) { visibleMasks.add(mask); } } return visibleMasks; } }
private void setLogarithmicDisplay(final RasterDataNode raster, final boolean logarithmicDisplay) { final ImageInfoEditorModel model = imageInfoEditor.getModel(); if (logarithmicDisplay) { final StxFactory stxFactory = new StxFactory(); final Stx stx = stxFactory .withHistogramBinCount(raster.getStx().getHistogramBinCount()) .withLogHistogram(logarithmicDisplay) .withResolutionLevel(raster.getSourceImage().getModel().getLevelCount() - 1) .create(raster, ProgressMonitor.NULL); model.setDisplayProperties(raster.getName(), raster.getUnit(), stx, POW10_SCALING); } else { model.setDisplayProperties(raster.getName(), raster.getUnit(), raster.getStx(), Scaling.IDENTITY); } model.getImageInfo().setLogScaled(logarithmicDisplay); }
public ResamplingRaster(final Tile tile, final double[][] data) { this.tile = tile; this.data = data; final RasterDataNode rasterDataNode = tile.getRasterDataNode(); this.usesNoData = rasterDataNode.isNoDataValueUsed(); this.noDataValue = rasterDataNode.getNoDataValue(); this.geophysicalNoDataValue = rasterDataNode.getGeophysicalNoDataValue(); this.scalingApplied = rasterDataNode.isScalingApplied(); }
static void setDisplayProperties(ImageInfoEditorModel model, RasterDataNode raster) { model.setDisplayProperties(raster.getName(), raster.getUnit(), raster.getStx(), raster.isLog10Scaled() ? POW10_SCALING : Scaling.IDENTITY); }
private HashMap<String, RasterDataNode> getValidNodeNames() { HashMap<String, RasterDataNode> validNames = new HashMap<>(); for (RasterDataNode node : validNodes) { validNames.put(node.getName(), node); } return validNames; }
private static String formatKML(ProductSceneView view, String imageName) { final RasterDataNode raster = view.getRaster(); final Product product = raster.getProduct(); final GeoCoding geoCoding = raster.getGeoCoding(); final PixelPos upperLeftPP = new PixelPos(0, 0); final PixelPos lowerRightPP = new PixelPos(product.getSceneRasterWidth(), description = view.getSceneName() + "\n" + product.getName(); } else { name = raster.getName(); description = raster.getDescription() + "\n" + product.getName(); legendKml = " <ScreenOverlay>\n" + " <name>Legend</name>\n"
public void removeStxFromProduct(Product product) { List<HistogramConfig> toRemove = new ArrayList<>(7); for (HistogramConfig histogramConfig : stxMap.keySet()) { if (histogramConfig.raster.getProduct() == product) { toRemove.add(histogramConfig); } } for (HistogramConfig histogramConfig : toRemove) { stxMap.remove(histogramConfig); } }
private void deriveRasterPropertiesFromExpression(String expression, Product product) { if (product != null) { try { final RasterDataNode[] refRasters = BandArithmetic.getRefRasters(expression, product); if (refRasters.length > 0) { setGeoCoding(refRasters[0].getGeoCoding()); setImageToModelTransform(refRasters[0].getImageToModelTransform()); setSceneToModelTransform(refRasters[0].getSceneToModelTransform()); setModelToSceneTransform(refRasters[0].getModelToSceneTransform()); } } catch (ParseException e) { // do not set geocoding then } } }
public boolean synchronizeViewportIfPossible(ProductSceneView thatView) { final RasterDataNode thisRaster = getRaster(); final RasterDataNode thatRaster = thatView.getRaster(); final Product thisProduct = thisRaster.getProduct(); if (thisProduct.isSceneCrsEqualToModelCrsOf(thatRaster)) { final Viewport thisViewport = layerCanvas.getViewport(); thatViewport.setTransform(thisViewport); return true; } else if (thisProduct == thatRaster.getProduct()) { final Viewport thisViewport = layerCanvas.getViewport(); final Viewport thatViewport = thatView.layerCanvas.getViewport(); final Rectangle thisModelBounds = thisViewport.getViewToModelTransform().createTransformedShape(thisViewBounds).getBounds(); try { final Rectangle sceneBounds = thisRaster.getModelToSceneTransform().createTransformedShape(thisModelBounds).getBounds(); final Rectangle thatModelBounds = thatRaster.getSceneToModelTransform().createTransformedShape(sceneBounds).getBounds(); thatViewport.zoom(thatModelBounds); return true; final GeoCoding thisGeoCoding = thisRaster.getGeoCoding(); final GeoCoding thatGeoCoding = thatRaster.getGeoCoding(); if (thisGeoCoding != null && thatGeoCoding != null && thisGeoCoding.canGetGeoPos() && thatGeoCoding.canGetPixelPos()) { final Viewport thisViewport = layerCanvas.getViewport();