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

This commit is contained in:
Daniel Wiesmann 2016-05-16 17:43:04 +01:00 committed by Claude Paroz
parent aa69f36984
commit 078eb87626
2 changed files with 7 additions and 9 deletions

View File

@ -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

View File

@ -1,4 +1,3 @@
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
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)):
# Computation of statistics fails for empty bands.
try:
func(*stats_args)
result = smin.value, smax.value, smean.value, sstd.value
except GDALException:
result = (None, None, None, None)
self._stats_refresh = False