private static WritableRaster createRasterWithSampleModel()

in common/src/main/java/org/apache/sedona/common/raster/RasterConstructorsForTesting.java [127:241]


  private static WritableRaster createRasterWithSampleModel(
      String sampleModelType,
      String bandDataType,
      int widthInPixel,
      int heightInPixel,
      int numBand) {
    int dataType = RasterUtils.getDataTypeCode(bandDataType);

    // Create raster according to sample model type
    WritableRaster raster;
    switch (sampleModelType) {
      case "BandedSampleModel":
        raster =
            RasterFactory.createBandedRaster(dataType, widthInPixel, heightInPixel, numBand, null);
        break;
      case "PixelInterleavedSampleModel":
        {
          int scanlineStride = widthInPixel * numBand;
          int[] bandOffsets = new int[numBand];
          for (int i = 0; i < numBand; i++) {
            bandOffsets[i] = i;
          }
          SampleModel sm =
              new PixelInterleavedSampleModel(
                  dataType, widthInPixel, heightInPixel, numBand, scanlineStride, bandOffsets);
          raster = RasterFactory.createWritableRaster(sm, null);
          break;
        }
      case "PixelInterleavedSampleModelComplex":
        {
          int pixelStride = numBand + 2;
          int scanlineStride = widthInPixel * pixelStride + 5;
          int[] bandOffsets = new int[numBand];
          for (int i = 0; i < numBand; i++) {
            bandOffsets[i] = i;
          }
          ArrayUtils.shuffle(bandOffsets);
          SampleModel sm =
              new PixelInterleavedSampleModel(
                  dataType, widthInPixel, heightInPixel, pixelStride, scanlineStride, bandOffsets);
          raster = RasterFactory.createWritableRaster(sm, null);
          break;
        }
      case "ComponentSampleModel":
        {
          int pixelStride = numBand + 1;
          int scanlineStride = widthInPixel * pixelStride + 5;
          int[] bankIndices = new int[numBand];
          for (int i = 0; i < numBand; i++) {
            bankIndices[i] = i;
          }
          ArrayUtils.shuffle(bankIndices);
          int[] bandOffsets = new int[numBand];
          for (int i = 0; i < numBand; i++) {
            bandOffsets[i] = (int) (Math.random() * widthInPixel);
          }
          SampleModel sm =
              new ComponentSampleModel(
                  dataType,
                  widthInPixel,
                  heightInPixel,
                  pixelStride,
                  scanlineStride,
                  bankIndices,
                  bandOffsets);
          raster = RasterFactory.createWritableRaster(sm, null);
          break;
        }
      case "SinglePixelPackedSampleModel":
        {
          if (dataType != DataBuffer.TYPE_INT) {
            throw new IllegalArgumentException(
                "only supports creating SinglePixelPackedSampleModel with int data type");
          }
          if (numBand != 4) {
            throw new IllegalArgumentException(
                "only supports creating SinglePixelPackedSampleModel with 4 bands");
          }
          int bitsPerBand = 4;
          int scanlineStride = widthInPixel + 5;
          int[] bitMasks = new int[numBand];
          int baseMask = (1 << bitsPerBand) - 1;
          for (int i = 0; i < numBand; i++) {
            bitMasks[i] = baseMask << (i * bitsPerBand);
          }
          SampleModel sm =
              new SinglePixelPackedSampleModel(
                  dataType, widthInPixel, heightInPixel, scanlineStride, bitMasks);
          raster = RasterFactory.createWritableRaster(sm, null);
          break;
        }
      case "MultiPixelPackedSampleModel":
        {
          if (dataType != DataBuffer.TYPE_BYTE) {
            throw new IllegalArgumentException(
                "only supports creating MultiPixelPackedSampleModel with byte data type");
          }
          if (numBand != 1) {
            throw new IllegalArgumentException(
                "only supports creating MultiPixelPackedSampleModel with 1 band");
          }
          int numberOfBits = 4;
          int scanlineStride = widthInPixel * numberOfBits / 8 + 2;
          SampleModel sm =
              new MultiPixelPackedSampleModel(
                  dataType, widthInPixel, heightInPixel, numberOfBits, scanlineStride, 80);
          raster = RasterFactory.createWritableRaster(sm, null);
          break;
        }
      default:
        throw new IllegalArgumentException("Unknown sample model type: " + sampleModelType);
    }

    return raster;
  }