[gdal-dev] gdal_translate shifted values

Laurențiu Nicola lnicola at dend.ro
Thu Feb 1 05:28:42 PST 2024


Indeed, good catch, I exported both of them to a new file and it's obvious now:


Laurentiu

On Thu, Feb 1, 2024, at 15:22, Even Rouault wrote:
> Hi,
> 
> I don't think there's any problem regarding GDAL vs xarray. It is just a difference of convention on how GDAL and xarray choose the origin of rasters. GDAL selects the northern-west corner as the (0,0) image coordinate.
> 
> The line in GDAL that contains values 13.75 14.25 14.75 which are at line 80 for XArray is line 124   . And 80 + 124 + 1 = 205 , the dataset height
> 
> Displaying the GRIB dataset with QGIS (/GDAL) on top of OSM shows a plausible georeferencing.
> 
> Even
> 
> Le 01/02/2024 à 13:57, Laurențiu Nicola via gdal-dev a écrit :
>> It's actually pretty easy to test:
>> 
>> import numpy as np
>> import xarray as xr
>> from osgeo import gdal
>> 
>> xarray_ds = xr.load_dataset("st4_pr.2017092016.01h", engine="cfgrib")
>> # GDAL uses 9999 as NODATA
>> xarray_data = np.nan_to_num(xarray_ds.tp.data, nan=9999.0)
>> gdal_ds = gdal.Open("st4_pr.2017092016.01h")
>> gdal_data = gdal_ds.GetRasterBand(1).ReadAsArray()
>> 
>> >>> gdal_data[80]
>> array([9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   ,   40.5  ,   41.125,   41.75 ,   42.5  ,
>>          43.   ,   26.5  ,   26.875,   27.   ,   29.875,   49.875,
>>          50.375,   41.5  ,   41.375,    0.   ,    0.   ,    0.   ,
>>           0.   ,    0.   ,    0.   ,    0.   ,    0.   ,    0.   ,
>>           0.   ,    0.   ,    0.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>           0.   ,    0.   ,    0.   ,    0.   ,    0.   ,    0.   ,
>>           0.   ,    0.   ,    0.   ,    0.   ,    0.   ,    0.   ,
>>           0.   ,    0.   ,    0.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   ])
>> >>> xarray_data[80]
>> array([9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   ,   13.75 ,   14.25 ,   14.75 ,
>>          19.125,   32.5  ,   30.125,   27.125,   25.5  ,   22.25 ,
>>          22.375,   20.25 ,   18.375,   16.625,   15.25 , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   , 9999.   , 9999.   , 9999.   , 9999.   , 9999.   ,
>>        9999.   ], dtype=float32)
>> 
>> The values are obviously different.
>> 
>> I also tried to convert to NetCDF and open them in QGIS, but they look almost the same (not identical) to me after fixing up the coordinates, so there's probably more at play.
>> 
>> Again, comparing the gdal_translate output with the GRIB data as read by GDAL can't show any issues.
>> 
>> Laurentiu
>> 
>> On Thu, Feb 1, 2024, at 13:24, Laurențiu Nicola via gdal-dev wrote:
>>> Hi Jukka,
>>> 
>>> If GDAL shuffled around the pixels in that file, you wouldn't be able to notice it by comparing the GRIB and the TIFF, because both would be shuffled.
>>> 
>>> My suggestion was to convert the GRIB to a NC or even CSV using xarray, then comparing the GDAL output against that.
>>> 
>>> Laurentiu
>>> 
>> 
>> 
>> _______________________________________________
>> gdal-dev mailing list
>> gdal-dev at lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/gdal-dev
>> 
> -- 
> http://www.spatialys.com
> My software is free, but my time generally not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20240201/0943b469/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 7279 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20240201/0943b469/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 7458 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20240201/0943b469/attachment-0003.png>


More information about the gdal-dev mailing list