[gdal-dev] HFA (.img) driver prints Warning 1: NaN converted to INT_MAX when float raster has nan as the NoData value
Jason Roberts
jason.roberts at duke.edu
Fri May 9 05:43:28 PDT 2025
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 at lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/gdal-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20250509/114612d9/attachment-0001.htm>
More information about the gdal-dev
mailing list