public void computeLatLonBandData( int height, int width, Band latBand, Band lonBand, final float[] latRawData, final float[] lonRawData, final int[] colPoints) { float[] latFloats = new float[height * width]; float[] lonFloats = new float[height * width]; final int rawWidth = colPoints.length; int colPointIdx = 0; int p1 = colPoints[colPointIdx] - 1; int p2 = colPoints[++colPointIdx] - 1; for (int x = 0; x < width; x++) { if (x == p2 && colPointIdx < rawWidth - 1) { p1 = p2; p2 = colPoints[++colPointIdx] - 1; } final int steps = p2 - p1; final double step = 1.0 / steps; final double weight = step * (x - p1); for (int y = 0; y < height; y++) { final int rawPos2 = y * rawWidth + colPointIdx; final int rawPos1 = rawPos2 - 1; final int pos = y * width + x; latFloats[pos] = computeGeoPixel(latRawData[rawPos1], latRawData[rawPos2], weight); lonFloats[pos] = computeGeoPixel(lonRawData[rawPos1], lonRawData[rawPos2], weight); } } latBand.setDataElems(latFloats); lonBand.setDataElems(lonFloats); }
public static Product createDummySourceProduct(int width, int height) { Product product = new Product("dummy", "dummy", width, height); Band b = product.addBand("b1", ProductData.TYPE_FLOAT32); float[] bData = new float[width * height]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { bData[i * width + j] = 1.0f; } } b.setDataElems(bData); product.setPreferredTileSize(product.getSceneRasterWidth(), 45); return product; }
// Don't do this...it hurts. Too much of a memory hog... private void addBandsBinMap(Product product) throws IOException, InvalidRangeException { String[] bandList = product.getBandNames(); if (rowInfo == null) { rowInfo = createRowInfos(); } final int height = sceneHeight; final int width = sceneWidth; final ISINGrid grid = this.grid; // loop over lines try { int[] lineOffsets = new int[1]; int[] lineLengths = new int[1]; int[] stride = new int[1]; stride[0] = 1; // for (int y = sourceOffsetY; y < sourceOffsetY + sourceHeight; y++) { for (String name : bandList) { if (name.endsWith("mean") || name.endsWith("stdev")) continue; Band band = product.getBand(name); ProductData buffer; final Variable variable = variableMap.get(band); DataType prodtype = variable.getDataType(); float[] fbuffer = new float[width * height]; short[] sbuffer = new short[width * height]; int[] ibuffer = new int[width * height]; byte[] bbuffer = new byte[width * height]; if (prodtype == DataType.FLOAT) { Arrays.fill(fbuffer, Float.NaN); buffer = ProductData.createInstance(fbuffer); } else if (prodtype == DataType.SHORT) { Arrays.fill(sbuffer, (short) -999); buffer = ProductData.createInstance(sbuffer); } else if (prodtype == DataType.BYTE) { Arrays.fill(bbuffer, (byte) 255); buffer = ProductData.createInstance(bbuffer); } else { Arrays.fill(ibuffer, -999); buffer = ProductData.createInstance(ibuffer); } for (int y = 0; y < height; y++) { final int rowIndex = (height - 1) - y; final RowInfo rowInfo = this.rowInfo[rowIndex]; if (rowInfo != null) { final Array bindata; final int lineOffset = rowInfo.offset; final int lineLength = rowInfo.length; lineOffsets[0] = lineOffset; lineLengths[0] = lineLength; synchronized (ncFile) { bindata = variable .read() .section(lineOffsets, lineLengths, stride); // .copyTo1DJavaArray(); } int lineIndex0 = 0; for (int x = 0; x < width; x++) { final double lon = x * 360.0 / width; final int binIndex = grid.getBinIndex(rowIndex, lon); int lineIndex = -1; for (int i = lineIndex0; i < lineLength; i++) { int binidx = bins[lineOffset + i]; if (binidx >= binIndex) { if (binidx == binIndex) { lineIndex = i; } lineIndex0 = i; break; } } if (lineIndex >= 0) { final int rasterIndex = width * y + x; final Array elem; elem = Array.factory(bindata.copyTo1DJavaArray()); for (int i = 0; i < elem.getSize(); i++) { if (prodtype == DataType.FLOAT) { buffer.setElemFloatAt(rasterIndex, elem.getFloat(i)); } else { buffer.setElemIntAt(rasterIndex, elem.getInt(i)); } // System.arraycopy(bindata, lineIndex, buffer, // rasterIndex, 1); } } } } } band.setDataElems(buffer); } } catch (IOException e) { throw new IOException("Could not map product " + product.getName(), e); } }