iGN5117 commented on code in PR #1080:
URL: https://github.com/apache/sedona/pull/1080#discussion_r1396066614
##########
common/src/main/java/org/apache/sedona/common/utils/RasterUtils.java:
##########
@@ -81,12 +79,100 @@ public static GridCoverage2D create(WritableRaster raster,
GridGeometry2D gridGe
}
/**
- * Create a new empty raster from the given WritableRaster object.
+ * Create a new raster, cloning all metadata from the passed reference
raster.
* @param raster The raster object to be wrapped as an image.
- * @param gridGeometry The grid geometry of the raster.
- * @param bands The bands of the raster.
- * @return A new GridCoverage2D object.
+ * @param referenceRaster The reference raster to clone, all metadata is
cloned
+ * @param noDataValue new noDataValue
+ * @return cloned raster
*/
+ public static GridCoverage2D clone(WritableRaster raster, GridGeometry2D
gridGeometry2D, GridSampleDimension[] bands, GridCoverage2D referenceRaster,
Double noDataValue, boolean keepMetadata) {
+ Map propertyMap = null;
+ if (keepMetadata) {
+ propertyMap = referenceRaster.getProperties();
+ }
+ ColorModel originalColorModel =
referenceRaster.getRenderedImage().getColorModel();
+ if (Objects.isNull(gridGeometry2D)) {
+ gridGeometry2D = referenceRaster.getGridGeometry();
+ }
+ int numBand = raster.getNumBands();
+ int rasterDataType = raster.getDataBuffer().getDataType();
+ ColorModel colorModel;
+ if (originalColorModel.isCompatibleRaster(raster)) {
+ colorModel = originalColorModel;
+ }else {
+ final ColorSpace cs = new BogusColorSpace(numBand);
+ final int[] nBits = new int[numBand];
+ Arrays.fill(nBits, DataBuffer.getDataTypeSize(rasterDataType));
+ colorModel = new ComponentColorModel(cs, nBits, false, true,
Transparency.OPAQUE, rasterDataType);
+ }
+ if (noDataValue != null) {
+ GridSampleDimension[] newBands = new GridSampleDimension[numBand];
+ for (int k = 0; k < numBand; k++) {
+ if (bands != null) {
+ newBands[k] =
createSampleDimensionWithNoDataValue(bands[k], noDataValue);
+ } else {
+ newBands[k] = createSampleDimensionWithNoDataValue("band_"
+ k, noDataValue);
+ }
+ }
+ bands = newBands;
+ }
+
+ GridCoverage2D[] referenceRasterSources = keepMetadata ?
referenceRaster.getSources().toArray(new GridCoverage2D[0]) : null;
+ CharSequence rasterName = keepMetadata ? referenceRaster.getName() :
"genericCoverage";
+
+ final RenderedImage image = new BufferedImage(colorModel, raster,
false, null);
+ return gridCoverageFactory.create(rasterName, image, gridGeometry2D,
bands, referenceRasterSources, propertyMap);
+
+ }
+
+ public static GridCoverage2D clone(WritableRaster raster,
GridSampleDimension[] bands, GridCoverage2D referenceRaster, Double
noDataValue, boolean keepMetadata) {
+ return RasterUtils.clone(raster, null, bands, referenceRaster,
noDataValue, keepMetadata);
+ }
+
+ /**
+ * Create a new raster, cloning all metadata from the passed reference
raster.
+ * @param image The RenderedImage to be used as data for the created
GridCoverage2D
+ * @param referenceRaster The reference raster to clone, all metadata is
cloned
+ * @param noDataValue new noDataValue
+ * @return cloned raster
+ */
+
+
+ public static GridCoverage2D clone(RenderedImage image,
GridSampleDimension[] bands, GridCoverage2D referenceRaster, Double
noDataValue, boolean keepMetadata) {
+ return RasterUtils.clone(image, null, bands, referenceRaster,
noDataValue, keepMetadata);
+ }
+
+ public static GridCoverage2D clone(RenderedImage image, GridGeometry2D
gridGeometry2D, GridSampleDimension[] bands, GridCoverage2D referenceRaster,
Double noDataValue, boolean keepMetadata) {
+ int numBand = image.getSampleModel().getNumBands();
+ if (Objects.isNull(gridGeometry2D)) {
+ gridGeometry2D = referenceRaster.getGridGeometry();
+ }
+ if (noDataValue != null) {
+ GridSampleDimension[] newBands = new GridSampleDimension[numBand];
+ for (int k = 0; k < numBand; k++) {
+ if (bands != null) {
+ newBands[k] =
createSampleDimensionWithNoDataValue(bands[k], noDataValue);
+ } else {
+ newBands[k] = createSampleDimensionWithNoDataValue("band_"
+ k, noDataValue);
+ }
+ }
+ bands = newBands;
+ }
+ GridCoverage2D[] referenceRasterSources = keepMetadata ?
referenceRaster.getSources().toArray(new GridCoverage2D[0]) : null;
+ Map propertyMap = null;
+ if (keepMetadata) {
+ propertyMap = referenceRaster.getProperties();
+ } CharSequence rasterName = keepMetadata ?
referenceRaster.getName() : "genericCoverage";
Review Comment:
Some incorrect formattings creeped up after I renamed, fixed. Thanks!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]