Commit 078eb876 authored by Daniel Wiesmann's avatar Daniel Wiesmann Committed by Claude Paroz
Browse files

Refs #26592 -- Fixed band statistics for empty bands and GDAL 2.1

parent aa69f369
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -74,12 +74,10 @@ get_band_statistics = void_output(
        c_void_p, c_int, c_int, POINTER(c_double), POINTER(c_double),
        POINTER(c_double), POINTER(c_double), c_void_p, c_void_p,
    ],
    errcheck=False
)
compute_band_statistics = void_output(
    std_call('GDALComputeRasterStatistics'),
    [c_void_p, c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double), POINTER(c_double), c_void_p, c_void_p],
    errcheck=False
)

# Reprojection routine
+7 −7
Original line number Diff line number Diff line
import math
from ctypes import byref, c_double, c_int, c_void_p

from django.contrib.gis.gdal.base import GDALBase
@@ -85,18 +84,19 @@ class GDALBand(GDALBase):
        ]

        if refresh or self._stats_refresh:
            capi.compute_band_statistics(*stats_args)
            func = capi.compute_band_statistics
        else:
            # Add additional argument to force computation if there is no
            # existing PAM file to take the values from.
            force = True
            stats_args.insert(2, c_int(force))
            capi.get_band_statistics(*stats_args)
            func = capi.get_band_statistics

        # Computation of statistics fails for empty bands.
        try:
            func(*stats_args)
            result = smin.value, smax.value, smean.value, sstd.value

        # Check if band is empty (in that case, set all statistics to None)
        if any((math.isnan(val) for val in result)):
        except GDALException:
            result = (None, None, None, None)

        self._stats_refresh = False