/** * Tests whether this ProductData is equal to another one. * Performs an element-wise comparision if the other object is a {@link ProductData} instance of the same data type. * Otherwise the method behaves like {@link Object#equals(Object)}. * * @param other the other one */ public boolean equalElems(ProductData other) { if (other == this || ObjectUtils.equalObjects(getElems(), other.getElems())) { return true; } return false; }
public void copyDataFrom(Rectangle dataRect, ProductData data) { Rectangle part = chunkRect.intersection(dataRect); for (int cy = part.y; cy < part.y + part.height; cy++) { int srcPos = (cy - dataRect.y) * dataRect.width + (part.x - dataRect.x); int destPos = (cy - chunkRect.y) * chunkRect.width + (part.x - chunkRect.x); System.arraycopy(data.getElems(), srcPos, chunkData.getElems(), destPos, part.width); } subArea.subtract(new Area(part)); }
/** * Returns the internal data array. The actual type of the returned object is guaranteed to be one of <ol> * <li><code>byte[]</code> - for signed/unsigned 8-bit integer fields</li> <li><code>short[]</code> - for * signed/unsigned 16-bit integer fields</li> <li><code>int[]</code> - for signed/unsigned 32-bit integer * fields</li> <li><code>float[]</code> - for signed 32-bit floating point fields</li> <li><code>double[]</code> - * for signed 64-bit floating point fields</li> </ol> * * @return an array of one of the described types */ public Object getElems() { return getData().getElems(); }
/** * Gets the data array holding this band's pixel samples. * * @return the data array for this band, or <code>null</code> if no data has been loaded * * @see ProductData#getElems */ public float[] getTiePoints() { return (float[]) getRasterData().getElems(); }
@Override public void computeTile(Band band, Tile targetTile, ProgressMonitor pm) throws OperatorException { Rectangle rectangle = targetTile.getRectangle(); Band sourceBand = bandMap.get(band); Tile sourceTile = getSourceTile(sourceBand, rectangle); ProductData rgbData = dataMap.get(band); System.arraycopy(sourceTile.getRawSamples().getElems(), 0, rgbData.getElems(), rectangle.x + rectangle.y * rectangle.width, rectangle.width * rectangle.height); }
private static void read(Variable variable, int targetOffsetX, int targetOffsetY, int targetWidth, int targetHeight, ProductData targetBuffer) throws IOException, InvalidRangeException { Array array = variable.read(new int[]{targetOffsetY, targetOffsetX}, new int[]{targetHeight, targetWidth}); System.arraycopy(array.getStorage(), 0, targetBuffer.getElems(), 0, targetWidth * targetHeight); }
@Override public synchronized void setRawSamples(ProductData rawSamples) { Assert.notNull(rawSamples, "rawSamples"); if (target) { if (rawSamples != this.rawSamples || mustWriteSampleData) { writableRaster.setDataElements(minX, minY, width, height, rawSamples.getElems()); } } }
/** * Gets the data elements of this data node. * * @see ProductData#getElems() */ public Object getDataElems() { return getData() == null ? null : getData().getElems(); }
private static void quantizeRasterData(final ProductData sceneRasterData, final double rawMin, final double rawMax, byte[] samples, int offset, int stride, byte[] resampleLUT, ProgressMonitor pm) { Quantizer.quantizeGeneric(sceneRasterData.getElems(), sceneRasterData.isUnsigned(), rawMin, rawMax, samples, offset, stride, pm); if (resampleLUT != null && resampleLUT.length == 256) { for (int i = 0; i < samples.length; i++) { samples[i] = resampleLUT[samples[i] & 0xff]; } } }
private static RasterRegion[] createRasterRegions(final Term[] terms, final int width, final int height) { final Set<RasterDataSymbol> rasterSymbolSet = new HashSet<RasterDataSymbol>(); for (final Term term : terms) { final RasterDataSymbol[] refRasterDataSymbols = BandArithmetic.getRefRasterDataSymbols(term); rasterSymbolSet.addAll(Arrays.asList(refRasterDataSymbols)); } List<RasterRegion> rasterRegions = new ArrayList<RasterRegion>(rasterSymbolSet.size()); for (RasterDataSymbol symbol : rasterSymbolSet) { RasterRegion rasterRegion = RasterRegion.createRasterRegion(symbol.getRaster(), width, height); rasterRegions.add(rasterRegion); symbol.setData(rasterRegion.getData().getElems()); } return rasterRegions.toArray(new RasterRegion[rasterRegions.size()]); }
@Override protected void prepareForReading(final int sourceOffsetX, final int sourceOffsetY, final int sourceWidth, final int sourceHeight, final int sourceStepX, final int sourceStepY, final ProductData destBuffer) { fill = (byte) Math.floor(fillValue + 0.5); if (validRange == null) { min = Byte.MIN_VALUE; max = Byte.MAX_VALUE; } else { min = (byte) Math.floor(validRange.getMin() + 0.5); max = (byte) Math.floor(validRange.getMax() + 0.5); } targetData = (byte[]) destBuffer.getElems(); targetIdx = 0; ensureLineWidth(sourceWidth); }
@Override protected void prepareForReading(final int sourceOffsetX, final int sourceOffsetY, final int sourceWidth, final int sourceHeight, final int sourceStepX, final int sourceStepY, final ProductData destBuffer) { fill = (short) Math.floor(fillValue + 0.5); if (validRange == null) { min = 0; max = Short.MAX_VALUE * 2 + 1; } else { min = (int) Math.floor(validRange.getMin() + 0.5); max = (int) Math.floor(validRange.getMax() + 0.5); } targetData = (float[]) destBuffer.getElems(); targetIdx = 0; ensureLineWidth(sourceWidth); }
@Override protected void prepareForReading(final int sourceOffsetX, final int sourceOffsetY, final int sourceWidth, final int sourceHeight, final int sourceStepX, final int sourceStepY, final ProductData destBuffer) { fill = (short) Math.round(fillValue); if (validRange == null) { min = 0; max = Short.MAX_VALUE * 2 + 1; } else { min = (int) Math.round(validRange.getMin()); max = (int) Math.round(validRange.getMax()); } targetData = (short[]) destBuffer.getElems(); targetIdx = 0; ensureLineWidth(sourceWidth); }
@Override protected void prepareForReading(final int sourceOffsetX, final int sourceOffsetY, final int sourceWidth, final int sourceHeight, final int sourceStepX, final int sourceStepY, final ProductData destBuffer) { fill = (int) Math.round(fillValue); if (validRange == null) { min = 0; max = Integer.MAX_VALUE * 2L + 1; } else { min = (int) Math.round(validRange.getMin()); max = Math.round(validRange.getMax()); } targetData = (int[]) destBuffer.getElems(); targetIdx = 0; ensureLineWidth(sourceWidth); }
@Override protected void prepareForReading(final int sourceOffsetX, final int sourceOffsetY, final int sourceWidth, final int sourceHeight, final int sourceStepX, final int sourceStepY, final ProductData destBuffer) { fill = (short) Math.round(fillValue); if (validRange == null) { min = Short.MIN_VALUE; max = Short.MAX_VALUE; } else { min = (short) Math.round(validRange.getMin()); max = (short) Math.round(validRange.getMax()); } targetData = (short[]) destBuffer.getElems(); targetIdx = 0; ensureLineWidth(sourceWidth); }
@Override public void computeTile(Band band, Tile targetTile, ProgressMonitor pm) throws OperatorException { recordCall(getOpName(this), "Operator.computeBand"); Rectangle r = targetTile.getRectangle(); float offset = r.y * targetProduct.getSceneRasterWidth() + r.x; ProductData rawSampleData = targetTile.getRawSamples(); float[] targetElems = (float[]) rawSampleData.getElems(); for (int i = 0; i < targetElems.length; i++) { targetElems[i] = offset + i; } rawSampleData.setElems(targetElems); targetTile.setRawSamples(rawSampleData); }
@Override public synchronized void setRawSamples(ProductData rawSamples) { if (target) { if (rawSamples != this.dataBuffer) { Assert.notNull(rawSamples, "rawSamples"); Assert.argument(rawSamples.getType() == dataBuffer.getType(), "rawSamples.getType() == dataBuffer.getType()"); Assert.argument(rawSamples.getNumElems() == dataBuffer.getNumElems(), "rawSamples.getNumElems() == dataBuffer.getNumElems()"); dataBuffer.setElems(rawSamples.getElems()); } } }
@Test public void testWrite_OneChunk_YFlipped() throws Exception { DummyChunkWriter chunkWriter = new DummyChunkWriter(4, 4, 4, 4, true); assertNull(chunkWriter.writtenChunks[0][0]); chunkWriter.write(0, 0, 1, 1, ProductData.createInstance(new int[]{0})); chunkWriter.write(1, 0, 1, 1, ProductData.createInstance(new int[]{1})); chunkWriter.write(0, 1, 1, 1, ProductData.createInstance(new int[]{4})); chunkWriter.write(1, 1, 1, 1, ProductData.createInstance(new int[]{5})); chunkWriter.write(2, 0, 2, 2, ProductData.createInstance(new int[]{2, 3, 6, 7})); chunkWriter.write(0, 2, 4, 2, ProductData.createInstance(new int[]{8, 9, 10, 11, 12, 13, 14, 15})); assertNotNull(chunkWriter.writtenChunks[0][0]); int[] expected = {12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3}; assertArrayEquals(expected, (int[])chunkWriter.writtenChunks[0][0].getElems()); }
@Test public void testWrite_OneChunk() throws Exception { DummyChunkWriter chunkWriter = new DummyChunkWriter(4, 4, 4, 4, false); assertNull(chunkWriter.writtenChunks[0][0]); chunkWriter.write(0, 0, 1, 1, ProductData.createInstance(new int[]{0})); chunkWriter.write(1, 0, 1, 1, ProductData.createInstance(new int[]{1})); chunkWriter.write(0, 1, 1, 1, ProductData.createInstance(new int[]{4})); chunkWriter.write(1, 1, 1, 1, ProductData.createInstance(new int[]{5})); chunkWriter.write(2, 0, 2, 2, ProductData.createInstance(new int[]{2, 3, 6, 7})); chunkWriter.write(0, 2, 4, 2, ProductData.createInstance(new int[]{8, 9, 10, 11, 12, 13, 14, 15})); assertNotNull(chunkWriter.writtenChunks[0][0]); int[] expected = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; assertArrayEquals(expected, (int[])chunkWriter.writtenChunks[0][0].getElems()); }