Thank you!
Jason
On 5/9/25 06:04, Even Rouault wrote:
Will be fixed per
https://github.com/OSGeo/gdal/pull/12323
Le 09/05/2025 à 07:56, Rahkonen Jukka a écrit :
Hi,
Another method to reproduce without Python by using gdal_create:
gdal_create -outsize 100 100 -ot float32 -a_nodata nan -of hfa nan.img
C:\data\000\gdaltest>gdalinfo nan.img
Warning 1: NaN converted to INT_MAX.
Driver: HFA/Erdas Imagine Images (.img)
Files: nan.img
Size is 100, 100
...
Band 1 Block=64x64 Type=Float32, ColorInterp=Undefined
Description = Layer_1
NoData Value=nan
Metadata:
LAYER_TYPE=athematic
If I convert nan.img into GeoTIFF with "gdal_translate nan.img
nan.tif", I do see the warning, but the new GeoTIFF still has NoData
Value=nsn. I wonder what is the real meaning of the warning.
-Jukka Rahkonen-
________________________________________
Lähettäjä: gdal-dev käyttäjän Jason Roberts via gdal-dev puolesta
Lähetetty: Perjantai 9. toukokuuta 2025 2.04
Vastaanottaja: Even Rouault; gdal dev
Aihe: Re: [gdal-dev] HFA (.img) driver prints Warning 1: NaN
converted to INT_MAX when float raster has nan as the NoData value
Thank you. I can help you repro it if you want to take a look.I'm
having trouble attaching a .img file to email. My email system
doesn't want to allow it, even if I put it in a zip. But here is a
simple way to repro it by creating the file with GDAL itself. (In
this example, I used float64 and the same warning occurs.) You could
use this to produce a test file. If you'd prefer I send a file I can
post it to a file exchange service.>>> import numpy as np>>>>>> from
osgeo import gdal>>> print(gdal.__version__)3.9.2e>>>
gdal.UseExceptions()>>>>>> # Create the dataset as float64 with 1
band>>> f = 'has_nans.img'>>> drv = gdal.GetDriverByName('HFA')>>> ds
= drv.Create(f, 100, 100, 1, gdal.GDT_Float64)>>>>>> # Make some fake
data; set some cells to nan, although this is not necessary to repro
the warning>>> data = np.arange(100*100,
dtype=float).reshape(100,100)>>> data[0:20,0:30] = float('nan')>>>>>>
# Write the data to the band>>> band = ds.GetRasterBand(1)>>>
band.SetNoDataValue(float('nan'))0>>> band.WriteArray(data, 0,
0)0>>>>>> # Close the dataset>>> del band, ds>>>>>> # Open it again -
warning happens here>>> ds = gdal.Open(f, gdal.GA_ReadOnly)Warning 1:
NaN converted to INT_MAX.JasonOn 5/8/25 18:39, Even Rouault
wrote:There are metadata fields that the HFA driver opens. That must
come from that. Always shutting down the warning could be
inappropriate, but perhaps in the context where the warning is
emitted the driver could avoid emitting it. But we need to have
access to the file to better understand the call path.Le 09/05/2025 à
00:35, Jason Roberts a écrit :Hi Even,Thanks. I can silence this with
a custom error handler (I tested it, and it works). But the part that
is confusing to me, as a user of the Python API, is that I did not
ask the API to do anything with int32s. All I did was open the
dataset using the default parameters of gdal.Open(). I would not
expect a warning to be reported in that circumstance, unless opening
.img files that use nan as the NoData value was problematic for GDAL
in some way. That is why I was suggesting that the warning be
removed.JasonOn 5/8/25 17:51, Even Rouault wrote:Jason,It looks like
something in the code asks a float64 field to be returned as a int32,
and thus NaN has to be turned into something else. That's perhaps
fine in the context where that happens with your file and could
potentially be silenced, but access to the file would be needed to
investigateEvenLe 08/05/2025 à 23:01, Jason Roberts via gdal-dev a
écrit :Hi GDAL team,I'm working with the GDAL Python API. I have some
HFA (.img) files that are float32 and that use nan as their NoData
value. As far as I can tell, using nan is allowed but I could be
wrong. When I open them, I get "Warning 1: NaN converted to INT_MAX."
Everything seems to work fine after that. Is this message something I
need to worry about? If not, may I suggest you remove it from the HFA
driver if possible?Here's some code demonstrating the message. If
need be, I can provide an example file, or write some code to
generate one.>>> import numpy as np>>> from osgeo import gdal>>>
gdal.__version__ # this version is packaged with ArcGIS Pro
3.4, but I don't think the version matters'3.9.2e'>>> ds =
gdal.Open(r'\\conch\denmod\Covariates\NARW25\CMEMS_GLORYS\SST\1999\SST_199901.img',
gdal.GA_ReadOnly)Warning 1: NaN converted to INT_MAX.>>> band =
ds.GetRasterBand(1)>>>
gdal.GetDataTypeName(band.DataType)'Float32'>>>
band.GetNoDataValue()nan>>> arr = band.ReadAsArray() # the data look
ok:>>> np.isnan(arr).sum()86788>>> (~np.isnan(arr)).sum()142985>>>
np.max(arr)nan>>> np.nanmax(arr)27.078554As far as I can tell, the
warning comes from this code in
gdal/frmts/hfa/hfafield.cpp: else if
(std::isnan(dfDoubleRet)) { CPLError(CE_Warning,
CPLE_AppDefined, "NaN converted to
INT_MAX."); nIntRet = nMax; }But I don't know if
there are any negative ramifications that will result.Thank you for
your help. And, as always, thank you very much for developing and
maintaining GDAL.Jason _______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev