/** * Draw a coverage data image tile from the double array of unsigned * coverage data values formatted as Double[row][width] * * @param griddedTile * gridded tile * @param values * coverage data values as [row][width] * @return coverage data image tile */ public BufferedImage drawTile(GriddedTile griddedTile, Double[][] values) { int tileWidth = values[0].length; int tileHeight = values.length; BufferedImage image = createImage(tileWidth, tileHeight); WritableRaster raster = image.getRaster(); for (int x = 0; x < tileWidth; x++) { for (int y = 0; y < tileHeight; y++) { Double value = values[y][x]; short pixelValue = getPixelValue(griddedTile, value); setPixelValue(raster, x, y, pixelValue); } } return image; }
/** * {@inheritDoc} */ @Override public Double[] getValues(GriddedTile griddedTile, byte[] imageBytes) { int[] pixelValues = getPixelValues(imageBytes); Double[] values = getValues(griddedTile, pixelValues); return values; }
/** * {@inheritDoc} */ @Override public Double getValue(GriddedTile griddedTile, byte[] imageBytes, int x, int y) { int pixelValue = getPixelValue(imageBytes, x, y); Double value = getValue(griddedTile, pixelValue); return value; }
/** * Set the pixel value * * @param row image line row * @param x x coordinate * @param unsignedPixelValue unsigned pixel value */ public void setPixelValue(ImageLineInt row, int x, int unsignedPixelValue) { short pixelValue = getPixelValue(unsignedPixelValue); setPixelValue(row, x, pixelValue); }
int[] pixelValues = coverageData.getPixelValues(tileData); if (coverageDataValues != null) { for (int i = 0; i < pixelValues.length; i++) { TestCase.assertEquals(coverageDataValues.tilePixelsFlat[i], coverageData.getPixelValue(pixelValues[i])); int pixelValue2 = coverageData.getUnsignedPixelValue(pixelValues, width, x, y); TestCase.assertEquals(pixelValue, pixelValue2); Double value = coverageData.getValue( griddedTile, pixelValue); GriddedCoverage griddedCoverage = coverageData .getGriddedCoverage(); if (coverageDataValues != null) { TestCase.assertEquals(coverageDataValues.tilePixels[y][x], coverageData.getPixelValue(pixelValue)); TestCase.assertEquals( coverageDataValues.tilePixelsFlat[(y * width) + x], coverageData.getPixelValue(pixelValue)); TestCase.assertEquals( coverageDataValues.tileUnsignedPixels[y][x], TileMatrix tileMatrix = coverageData.getTileDao().getTileMatrix( tileRow.getZoomLevel()); double xDistance = tileMatrixSet.getMaxX() - tileMatrixSet.getMinX(); tileRow.getTileColumn(), tileRow.getTileRow()); CoverageDataResults coverageDataResults = coverageData
/** * Draw a coverage data tile from the double array of "unsigned short" pixel * values formatted as short[row][width] * * @param pixelValues * "unsigned short" pixel values as [row][width] * @return coverage data image tile */ public BufferedImage drawTile(short[][] pixelValues) { int tileWidth = pixelValues[0].length; int tileHeight = pixelValues.length; BufferedImage image = createImage(tileWidth, tileHeight); WritableRaster raster = image.getRaster(); for (int x = 0; x < tileWidth; x++) { for (int y = 0; y < tileHeight; y++) { short pixelValue = pixelValues[y][x]; setPixelValue(raster, x, y, pixelValue); } } return image; }
List<String> coverageDataTables = CoverageDataPng.getTables(geoPackage); TestCase.assertFalse(coverageDataTables.isEmpty()); for (String tilesTable : tilesTables) { CoverageDataPng coverageData = new CoverageDataPng(geoPackage, tileDao); TestCase.assertTrue(coverageData.has()); coverageData.setAlgorithm(algorithm); GriddedCoverageEncodingType encoding = coverageData .getGriddedCoverage().getGridCellEncodingType(); coverageData.setEncoding(encoding); .getGriddedCoverage(); TestCase.assertNotNull(griddedCoverage); TestCase.assertTrue(griddedCoverage.getId() >= 0); List<GriddedTile> griddedTiles = coverageData.getGriddedTile(); TestCase.assertNotNull(griddedTiles); TestCase.assertFalse(griddedTiles.isEmpty()); while (tileCursor.moveToNext()) { TileRow tileRow = tileCursor.getRow(); GriddedTile griddedTile = coverageData.getGriddedTile(tileRow .getId()); testTileRow(geoPackage, coverageDataValues, coverageData,
.createTileTableWithMetadata(geoPackage, TestConstants.CREATE_COVERAGE_DATA_DB_TABLE_NAME, bbox, contentsSrs.getId(), bbox, tileMatrixSetSrs.getId()); TileDao tileDao = coverageData.getTileDao(); TileMatrixSet tileMatrixSet = coverageData.getTileMatrixSet(); .getGriddedCoverageDao(); GriddedTileDao griddedTileDao = coverageData.getGriddedTileDao(); coverageData = new CoverageDataPng(geoPackage, tileDao); byte[] imageBytes = drawTile(coverageData, tileWidth, tileHeight, griddedCoverage, commonGriddedTile);
/** * {@inheritDoc} */ @Override public byte[] drawTileData(GriddedTile griddedTile, Double[] values, int tileWidth, int tileHeight) { BufferedImage image = drawTile(griddedTile, values, tileWidth, tileHeight); byte[] bytes = getImageBytes(image); return bytes; }
/** * Get the pixel value as a 16 bit unsigned integer value * * @param image * tile image * @param x * x coordinate * @param y * y coordinate * @return unsigned integer pixel value */ public int getUnsignedPixelValue(BufferedImage image, int x, int y) { short pixelValue = getPixelValue(image, x, y); int unsignedPixelValue = getUnsignedPixelValue(pixelValue); return unsignedPixelValue; }
/** * Get the pixel values of the buffered image as "unsigned shorts" * * @param image * tile image * @return "unsigned short" pixel values */ public short[] getPixelValues(BufferedImage image) { validateImageType(image); WritableRaster raster = image.getRaster(); short[] pixelValues = getPixelValues(raster); return pixelValues; }
/** * Get the pixel value as an "unsigned short" * * @param image * tile image * @param x * x coordinate * @param y * y coordinate * @return "unsigned short" pixel value */ public short getPixelValue(BufferedImage image, int x, int y) { validateImageType(image); WritableRaster raster = image.getRaster(); short pixelValue = getPixelValue(raster, x, y); return pixelValue; }
/** * {@inheritDoc} */ @Override public double getValue(GriddedTile griddedTile, TileRow tileRow, int x, int y) { byte[] imageBytes = tileRow.getTileData(); double value = getValue(griddedTile, imageBytes, x, y); return value; }
switch (dataType) { case INTEGER: coverageData = new CoverageDataPng(geoPackage, tileDao); break; case FLOAT:
/** * Get the pixel values of the raster as 16 bit unsigned integer values * * @param raster * image raster * @return unsigned integer pixel values */ public int[] getUnsignedPixelValues(WritableRaster raster) { short[] pixelValues = getPixelValues(raster); int[] unsignedPixelValues = getUnsignedPixelValues(pixelValues); return unsignedPixelValues; }
/** * Draw a coverage data tile and format as PNG bytes from the double array of * "unsigned short" pixel values formatted as short[row][width] * * @param pixelValues "unsigned short" pixel values as [row][width] * @return coverage data image tile bytes */ public byte[] drawTileData(short[][] pixelValues) { CoverageDataPngImage image = drawTile(pixelValues); byte[] bytes = image.getImageBytes(); return bytes; }
coverageDataValues.tileUnsignedPixels[y][x] = unsignedValue; coverageDataValues.coverageData[y][x] = coverageData .getValue(griddedTile, value); .drawTileData(coverageDataValues.tilePixels); .drawTileData(coverageDataValues.tileUnsignedPixels)); GeoPackageGeometryDataUtils.compareByteArrays(imageData, coverageData .drawTileData(griddedTile, coverageDataValues.coverageData)); GeoPackageGeometryDataUtils.compareByteArrays(imageData, coverageData .drawTileData(coverageDataValues.tilePixelsFlat, tileWidth, tileHeight)); GeoPackageGeometryDataUtils.compareByteArrays(imageData, coverageData .drawTileData(coverageDataValues.tileUnsignedPixelsFlat, tileWidth, tileHeight)); GeoPackageGeometryDataUtils.compareByteArrays(imageData, coverageData .drawTileData(griddedTile, coverageDataValues.coverageDataFlat, tileWidth, tileHeight));
/** * {@inheritDoc} */ @Override public Double[] getValues(GriddedTile griddedTile, byte[] imageBytes) { BufferedImage image; try { image = ImageUtils.getImage(imageBytes); } catch (IOException e) { throw new GeoPackageException( "Failed to create an image from image bytes", e); } Double[] values = getValues(griddedTile, image); return values; }
/** * Constructor, used for reading a PNG * * @param tileRow tile row */ public CoverageDataPngImage(TileRow tileRow) { imageBytes = tileRow.getTileData(); reader = new PngReaderInt(new ByteArrayInputStream(imageBytes)); CoverageDataPng.validateImageType(reader); width = reader.imgInfo.cols; height = reader.imgInfo.rows; }
/** * Set the pixel value * * @param row image line row * @param x x coordinate * @param pixelValue pixel value */ public void setPixelValue(ImageLineInt row, int x, short pixelValue) { setPixelValue(row.getScanline(), x, pixelValue); }