[GRASS-dev] Re: [GRASS GIS] #788: r.out.gdal and nodata

GRASS GIS trac at osgeo.org
Tue Dec 22 07:10:07 EST 2009


#788: r.out.gdal and nodata
----------------------+-----------------------------------------------------
  Reporter:  frankie  |       Owner:  grass-dev at lists.osgeo.org
      Type:  defect   |      Status:  new                      
  Priority:  normal   |   Milestone:  6.4.0                    
 Component:  Raster   |     Version:  6.4.0 RCs                
Resolution:           |    Keywords:  r.out.gdal, nodata       
  Platform:  Linux    |         Cpu:  Unspecified              
----------------------+-----------------------------------------------------
Comment (by mmetz):

 Replying to [comment:4 hamish]:
 > Replying to [comment:3 mmetz]:
 > > the r.out.gdal version in 6.5 is not the proper fix,
 >
 > ok. for my needs yesterday it did the trick though, but I had to run it
 twice to learn + get there.

 Not good, it shouldn't be that complicated. The module should export a
 correct raster map with default settings only, also if GDAL format is
 given but nothing else. It gets a bit more complicated with nodata value
 and/or data type set.
 >
 > > r.out.gdal in 7.0 is currently the safest version for raster
 > > GDAL export, waiting for backport to 6.5, then to 6.4 if it
 > > passed all testing.
 >
 > could you quickly highlight the differences between them now? I've sort
 of lost track.

 This is what g7 r.out.gdal does:

 Before actual export:

 1. Range check: abort with error if the selected GDAL data type can not
 hold any of the values in the raster, e.g. using GDAL data type Byte with
 a CELL raster with all values > 255 and/or < 0: Raster export would result
 in complete data loss, aborting.

 2. Precision test: precision loss occurs if DCELL is exported as some
 integer or FLOAT32 or if Float32 is exported as some integer or if CELL is
 exported as Float32 and the min max values are outside the range of what
 can be represented in Float32 (see [!1]). Override with force flag.

 3. Check if any given nodata value is within the range of the selected
 GDAL data type. Report what would happen and abort raster export if
 outside range (mismatch between metadata nodata value and the value
 replacing NULLs). Effects can be drastic, try g7 r.out.gdal with type=Byte
 and nodata=-1 and nodata=-9999. Can't override.

 4. Get default nodata value if none specified: for any floating point this
 is NaN, for integer types, it figures out a default type. Based on
 discussion in [!1].

 During actual export:

 5. Real nodata value check: abort if the selected nodata value is present
 in the part of the raster map to be exported. Override with force flag.

 6. Real range check: abort if any values in the part of the raster map to
 be exported are outside the selected GDAL data type -> data loss, near
 unpredictable results, can't override.

 The checks during the actual export could be moved to a separate pass over
 all raster bands to be exported, I think this is the safest solution, then
 r.out.gdal does not have to bother with cleaning up and can leave all
 format-specific error handling to GDAL. Looking at the ever increasing
 number of GDAL-supported formats, the introduction of format specific code
 to r.out.gdal would open a box of Pandora, and IMHO the purpose of
 r.out.gdal is that all that format-specific stuff can be left to the GDAL
 lib.

 What is missing is a region check. At the very least, r.out.gdal should
 make sure that at least some parts of the raster maps to be exported fall
 within the current region, if not, abort with error: raster map outside
 current region, nothing to export. I wouldn't make it too complicated, so
 no resolution checks and also export if parts of the current region are
 not covered by the raster map to be exported.

 [!1] http://lists.osgeo.org/pipermail/grass-dev/2009-April/043464.html and
 following

 Markus M

-- 
Ticket URL: <https://trac.osgeo.org/grass/ticket/788#comment:5>
GRASS GIS <http://grass.osgeo.org>


More information about the grass-dev mailing list