public static Double getZonalStats()

in common/src/main/java/org/apache/sedona/common/raster/RasterBandAccessors.java [215:267]


  public static Double getZonalStats(
      GridCoverage2D raster,
      Geometry roi,
      int band,
      String statType,
      boolean allTouched,
      boolean excludeNoData,
      boolean lenient)
      throws FactoryException {
    List<Object> objects = getStatObjects(raster, roi, band, allTouched, excludeNoData, lenient);
    if (objects == null) {
      return null;
    }
    DescriptiveStatistics stats = (DescriptiveStatistics) objects.get(0);
    double[] pixelData = (double[]) objects.get(1);

    switch (statType.toLowerCase()) {
      case "sum":
        if (pixelData.length == 0) {
          return null;
        } else {
          return stats.getSum();
        }
      case "average":
      case "avg":
      case "mean":
        double mean = stats.getMean();
        return Double.isNaN(mean) ? null : mean;
      case "count":
        return (double) stats.getN();
      case "max":
        double max = stats.getMax();
        return Double.isNaN(max) ? null : max;
      case "min":
        double min = stats.getMin();
        return Double.isNaN(min) ? null : min;
      case "stddev":
      case "sd":
        double stdDev = stats.getStandardDeviation();
        return Double.isNaN(stdDev) ? null : stdDev;
      case "median":
        double median = stats.getPercentile(50);
        return Double.isNaN(median) ? null : median;
      case "mode":
        return zonalMode(pixelData);
      case "variance":
        double variance = stats.getVariance();
        return Double.isNaN(variance) ? null : variance;
      default:
        throw new IllegalArgumentException(
            "Please select from the accepted options. Some of the valid options are sum, mean, stddev, etc.");
    }
  }