static double performSpatialInterpolation(PixelPos pixelPos, double[] values) { double d_x = pixelPos.getX() + 0.5 - (int) (pixelPos.getX() + 0.5); double d_y = pixelPos.getY() + 0.5 - (int) (pixelPos.getY() + 0.5); double interpolated = values[0] * (1. - d_y) * (1. - d_x); interpolated += values[1] * (1. - d_y) * d_x; interpolated += values[2] * d_y * (1. - d_x); interpolated += values[3] * d_y * d_x; return interpolated; }
if (pixelsPos != null) { final int x = (int) Math.floor(pixelsPos.getX()); final int y = (int) Math.floor(pixelsPos.getY());
if (slavePixPo[j] != null) { final int x = (int) Math.floor(slavePixPo[j].getX()); final int y = (int) Math.floor(slavePixPo[j].getY());
private double readEnergy(Placemark pin, Band spectralBand) { //todo [Multisize_products] use scenerastertransform here final Object pinGeometry = pin.getFeature().getDefaultGeometry(); if (pinGeometry == null || !(pinGeometry instanceof Point)) { return spectralBand.getGeophysicalNoDataValue(); } final Point2D.Double modelPoint = new Point2D.Double(((Point) pinGeometry).getCoordinate().x, ((Point) pinGeometry).getCoordinate().y); final MultiLevelModel multiLevelModel = spectralBand.getMultiLevelModel(); int level = getLevel(multiLevelModel); final AffineTransform m2iTransform = multiLevelModel.getModelToImageTransform(level); final PixelPos pinLevelRasterPos = new PixelPos(); m2iTransform.transform(modelPoint, pinLevelRasterPos); int pinLevelRasterX = (int) Math.floor(pinLevelRasterPos.getX()); int pinLevelRasterY = (int) Math.floor(pinLevelRasterPos.getY()); if (coordinatesAreInRasterBounds(spectralBand, pinLevelRasterX, pinLevelRasterY, level) && isPixelValid(spectralBand, pinLevelRasterX, pinLevelRasterY, level)) { return ProductUtils.getGeophysicalSampleAsDouble(spectralBand, pinLevelRasterX, pinLevelRasterY, level); } return spectralBand.getGeophysicalNoDataValue(); }
private void writeGcpGeoCoding(GcpGeoCoding gcpGeoCoding, String nodeType) { addEmptyRow(); addRow("The " + nodeType + " uses a geo-coding which is based on ground control points (GCPs)."); addEmptyRow(); ProductNodeGroup<Placemark> gcpGroup = getProduct().getGcpGroup(); addRow("Number Of GCPs", String.valueOf(gcpGroup.getNodeCount())); addRow("Function", String.valueOf(gcpGeoCoding.getMethod())); addRow("Datum", String.valueOf(gcpGeoCoding.getDatum().getName())); addRow("Latitude RMSE", String.valueOf(gcpGeoCoding.getRmseLat())); addRow("Longitude RMSE", String.valueOf(gcpGeoCoding.getRmseLon())); addEmptyRow(); addRow("Table of used GCPs"); Placemark[] gcps = gcpGroup.toArray(new Placemark[0]); addRow("Number", "Label", "X", "Y", "Latitude", "Longitude"); for (int i = 0; i < gcps.length; i++) { Placemark gcp = gcps[i]; PixelPos pixelPos = gcp.getPixelPos(); GeoPos geoPos = gcp.getGeoPos(); addRow(String.valueOf(i), gcp.getLabel(), String.valueOf(pixelPos.getX()), String.valueOf(pixelPos.getY()), geoPos.getLatString(), geoPos.getLonString()); } // setFirstColumnWidth(40); }
@Override public void readValues(final ImageLayer imageLayer, final GeoPos geoPos, final int level) { resetData(); for (Band band : selectedBands) { final int index = getTimeIndex(band); if (index >= 0) { final PixelPos pix = band.getGeoCoding().getPixelPos(geoPos, null); dataPoints[index] = getPixelDouble(band, (int) pix.getX(), (int) pix.getY()); if (dataPoints[index] == band.getNoDataValue()) { dataPoints[index] = Double.NaN; } } } Range.computeRangeDouble(dataPoints, IndexValidator.TRUE, dataPointRange, ProgressMonitor.NULL); // no invalidate() call here, SpectrumDiagram does this }
private String getPixelString(RasterDataNode raster) { if (raster.getImageToModelTransform().equals(currentRaster.getImageToModelTransform()) && raster.getSceneToModelTransform().equals(currentRaster.getSceneToModelTransform())) { if (!pixelPosValidInRaster) { return RasterDataNode.INVALID_POS_TEXT; } return getPixelString(raster, pixelX, pixelY, rasterLevel); } final Point2D.Double scenePos = new Point2D.Double(sceneX, sceneY); Point2D.Double modelPos = new Point2D.Double(); try { raster.getSceneToModelTransform().transform(scenePos, modelPos); if (Double.isNaN(modelPos.getX()) || Double.isNaN(modelPos.getY())) { return PixelInfoViewModelUpdater.INVALID_POS_TEXT; } } catch (TransformException e) { return PixelInfoViewModelUpdater.INVALID_POS_TEXT; } final MultiLevelModel multiLevelModel = raster.getMultiLevelModel(); final int level = getLevel(multiLevelModel); final PixelPos rasterPos = (PixelPos) multiLevelModel.getModelToImageTransform(level).transform(modelPos, new PixelPos()); final int rasterX = floor(rasterPos.getX()); final int rasterY = floor(rasterPos.getY()); if (!coordinatesAreInRasterBounds(raster, rasterX, rasterY, level)) { return RasterDataNode.INVALID_POS_TEXT; } return getPixelString(raster, rasterX, rasterY, level); }
private void setInvalidTargetSamples(Map<Band, Tile> targetTiles, int x, int y) { float[] latLon = getLatLon(x, y, pixelWindow, sourceProduct); for (Tile t : targetTiles.values()) { if (t.getRasterDataNode() == latBand) { targetTiles.get(targetProduct.getBand("latitude")).setSample(x, y, latLon[0]); } else if (t.getRasterDataNode() == lonBand) { targetTiles.get(targetProduct.getBand("longitude")).setSample(x, y, latLon[1]); } else if (t.getRasterDataNode() == aotBand) { if (aodDefault != null && aodDefault.getGeoCoding() != null) { final PixelPos pixelPos = aodDefault.getGeoCoding().getPixelPos(new GeoPos(latLon[0], latLon[1]), new PixelPos()); t.setSample(x, y, aodDefault.getSampleFloat((int) pixelPos.getX(), (int) pixelPos.getY())); } else { t.setSample(x, y, t.getRasterDataNode().getNoDataValue()); } } else { t.setSample(x, y, t.getRasterDataNode().getNoDataValue()); } } }
@Override public void readValues(final ImageLayer imageLayer, final GeoPos geoPos, final int level) { resetData(); if (placemark != null) { for (Band band : selectedBands) { final int index = getTimeIndex(band); if (index >= 0) { final PixelPos pix = band.getGeoCoding().getPixelPos(placemark.getGeoPos(), null); /*final MultiLevelModel multiLevelModel = ImageManager.getMultiLevelModel(band); final AffineTransform i2mTransform = multiLevelModel.getImageToModelTransform(0); final AffineTransform m2iTransform = multiLevelModel.getModelToImageTransform(level); final Point2D modelPixel = i2mTransform.transform(placemark.getPixelPos(), null); final Point2D imagePixel = m2iTransform.transform(modelPixel, null); final int pixX = (int) Math.floor(imagePixel.getX()); final int pixY = (int) Math.floor(imagePixel.getY()); */ dataPoints[index] = ProductUtils.getGeophysicalSampleAsLong(band, (int) pix.getX(), (int) pix.getY(), level); if (dataPoints[index] == band.getNoDataValue()) { dataPoints[index] = Double.NaN; } } } } Range.computeRangeDouble(dataPoints, IndexValidator.TRUE, dataPointRange, ProgressMonitor.NULL); // no invalidate() call here, SpectrumDiagram does this }
multiLevelModel.getModelToImageTransform(level).transform(modelPos, rasterPos); final int rasterX = (int) Math.floor(rasterPos.getX()); final int rasterY = (int) Math.floor(rasterPos.getY()); available = coordinatesAreInRasterBounds(band, rasterX, rasterY, level); pixelValue = available ? ProductUtils.getGeophysicalSampleAsLong(band, rasterX, rasterY, level) : 0;
int startX = pixelPos.getX() - 0.5 < 0 ? 359 : (int) (pixelPos.getX() - 0.5); int endX = (startX + 1) % 359; int startY = (int) (pixelPos.getY() - 0.5); int endY = startY + 1;
multiLevelModel.getModelToImageTransform(level).transform(modelP, rasterPos); final int rasterX = (int) rasterPos.getX(); final int rasterY = (int) rasterPos.getY(); if (coordinatesAreInRasterBounds(spectralBand, rasterX, rasterY, level) && isPixelValid(spectralBand, rasterX, rasterY, level)) {
@Test public void initialState() { final double x = placemark.getPixelPos().getX(); final double y = placemark.getPixelPos().getY(); assertEquals(1.0, x, 0.0); assertEquals(1.0, y, 0.0); final Point point = (Point) placemark.getFeature().getDefaultGeometry(); assertEquals(2.0, point.getX(), 0.0); assertEquals(2.0, point.getY(), 0.0); final double lon = placemark.getGeoPos().getLon(); final double lat = placemark.getGeoPos().getLat(); assertEquals(2.0, lon, 0.0); assertEquals(2.0, lat, 0.0); }
@Test public void movePinByPixelPosition() { placemark.setPixelPos(new PixelPos(2.0f, 1.0f)); final double x = placemark.getPixelPos().getX(); final double y = placemark.getPixelPos().getY(); assertEquals(2.0, x, 0.0); assertEquals(1.0, y, 0.0); // todo: rq/?? - make asserts successful final Point point = (Point) placemark.getFeature().getDefaultGeometry(); assertEquals(4.0, point.getX(), 0.0); assertEquals(2.0, point.getY(), 0.0); // todo: rq/?? - make asserts successful final double lon = placemark.getGeoPos().getLon(); final double lat = placemark.getGeoPos().getLat(); assertEquals(4.0, lon, 0.0); assertEquals(2.0, lat, 0.0); }
@Test public void movePinByGeometry() { placemark.getFeature().setDefaultGeometry(newPoint(4.0, 2.0)); placemark.getProduct().getVectorDataGroup().get("pins").fireFeaturesChanged(placemark.getFeature()); final Point point = (Point) placemark.getFeature().getDefaultGeometry(); assertEquals(4.0, point.getX(), 0.0); assertEquals(2.0, point.getY(), 0.0); // todo: rq/?? - make asserts successful final double x = placemark.getPixelPos().getX(); final double y = placemark.getPixelPos().getY(); assertEquals(2.0, x, 0.0); assertEquals(1.0, y, 0.0); // todo: rq/?? - make asserts successful final double lon = placemark.getGeoPos().getLon(); final double lat = placemark.getGeoPos().getLat(); assertEquals(4.0, lon, 0.0); assertEquals(2.0, lat, 0.0); }