Opened 10 years ago
Closed 10 years ago
#25734 closed Bug (fixed)
Nodata value not excluded when computing GDALBand min/max values
| Reported by: | Daniel Wiesmann | Owned by: | nobody |
|---|---|---|---|
| Component: | GIS | Version: | 1.8 |
| Severity: | Normal | Keywords: | raster gdal gis |
| Cc: | Baptiste Mispelon | Triage Stage: | Ready for checkin |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
The min and max properties of GDALBand objects only return the "true" min or max value when the underlying band has statistics calculated, otherwise they return the min/max of the datatype will be returned.
This is expected behavior of the gdal C function but should be different for the GDALBand properties. The property should return the true min/max.
http://www.gdal.org/classGDALRasterBand.html#aaabf419931d0f505428f91cff54085cc
The propsed solution for this is to add the "GDALComputeRasterStatistics" function to the prototypes and use that instead of the "GDALGetRasterMinimum/Maximum" functions.
http://www.gdal.org/gdal_8h.html#aa93b6b6ea6e71017ce25524e1a9ef1e3
Change History (16)
comment:1 by , 10 years ago
comment:2 by , 10 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:3 by , 10 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
I'm not sure it's a critical fix that needs to be backported (however, I'm not a GIS user). See our Supported Versions policy.
comment:4 by , 10 years ago
That's right, I agree that its probably not critical. An alternative simple way of "backporting" this would be to change the 1.8 documentation on the min/max attributes. The documentation could state that the methods might not return the true value if they are not already stored internally in the raster or in a metatdata file. However I am not sure if that would be good practice either.
comment:6 by , 10 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → new |
I'm getting a test failure on my local machine (Python 3.5.0, not sure what other versions would be relevant):
======================================================================
FAIL: test_band_data (gis_tests.gdal_tests.test_raster.GDALBandTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./django/tests/gis_tests/gdal_tests/test_raster.py", line 323, in test_band_data
(0.0, 9.0, 2.842331288343558, 2.3965567248965356)
AssertionError: Tuples differ: (0.0, 9.0, 2.8423312883435643, 2.396556724896537) != (0.0, 9.0, 2.842331288343558, 2.3965567248965356)
First differing element 2:
2.8423312883435643
2.842331288343558
- (0.0, 9.0, 2.8423312883435643, 2.396556724896537)
? ^^^ ^
+ (0.0, 9.0, 2.842331288343558, 2.3965567248965356)
? ^^ ^^
----------------------------------------------------------------------
Ran 5 tests in 0.039s
comment:7 by , 10 years ago
That could also be related to differences in GDAL, could you please also post the GDAL version you are using for me to reproduce the failure? Thanks.
comment:8 by , 10 years ago
| Cc: | added |
|---|---|
| Has patch: | unset |
| Triage Stage: | Ready for checkin → Accepted |
Baptiste, please provide:
>>> from django.contrib.gis.gdal import gdal_version >>> gdal_version()
comment:9 by , 10 years ago
We might have to resort to variants of assertAlmostEqual here (AFAIK, the default assertAlmostEqual doesn't work on tuples).
comment:10 by , 10 years ago
Made a pull request with a patch that hopefully solve the test failure due to small numerical differences like the one reported.
https://github.com/django/django/pull/5763
I remain curious about the reason for the difference though, so if possible I would still be interested to get the GDAL version on the system with the failed test.
comment:11 by , 10 years ago
| Has patch: | set |
|---|
comment:12 by , 10 years ago
My version of GDAL is 2.0.1.
The linked pull request fixes the broken test on my machine.
Thanks.
comment:13 by , 10 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
I guess this is good to go unless you want to do any further investigate, Daniel?
comment:16 by , 10 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
I made a pull request that fixes the problem, but I am not sure how this can be integrated in earlier versions because it adds one or two properties, maybe it has to be done differently.