Showing with 27 additions and 15 deletions.
  1. +3 −0 src/providers/gdal/qgsgdalprovider.cpp
  2. +21 −15 src/providers/grass/qgsgrassgislib.cpp
  3. +3 −0 src/providers/grass/qgsgrassgislib.h
3 changes: 3 additions & 0 deletions src/providers/gdal/qgsgdalprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2529,6 +2529,9 @@ bool QgsGdalProvider::setNoDataValue( int bandNo, double noDataValue )
QgsDebugMsg( "Cannot set no data value" );
return false;
}
mSrcNoDataValue[bandNo-1] = noDataValue;
mSrcHasNoDataValue[bandNo-1] = true;
mUseSrcNoDataValue[bandNo-1] = true;
return true;
}

Expand Down
36 changes: 21 additions & 15 deletions src/providers/grass/qgsgrassgislib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -605,21 +605,7 @@ int QgsGrassGisLib::G_open_raster_new( const char *name, RASTER_MAP_TYPE wr_type
}

raster.band = 1;
double noDataValue = std::numeric_limits<double>::quiet_NaN();
switch ( wr_type )
{
case CELL_TYPE:
noDataValue = -1 * std::numeric_limits<int>::max();
break;
case FCELL_TYPE:
noDataValue = std::numeric_limits<float>::quiet_NaN();
break;
case DCELL_TYPE:
noDataValue = std::numeric_limits<double>::quiet_NaN();
break;
default:
break;
}
double noDataValue = noDataValueForGrassType( wr_type );
QgsDebugMsg( QString( "noDataValue = %1" ).arg(( int )noDataValue ) );
raster.provider->setNoDataValue( raster.band, noDataValue );

Expand Down Expand Up @@ -1286,6 +1272,26 @@ RASTER_MAP_TYPE QgsGrassGisLib::grassRasterType( QGis::DataType qgisType )
}
}

double QgsGrassGisLib::noDataValueForGrassType( RASTER_MAP_TYPE grassType )
{
double noDataValue = std::numeric_limits<double>::quiet_NaN();
switch ( grassType )
{
case CELL_TYPE:
noDataValue = -1 * std::numeric_limits<int>::max();
break;
case FCELL_TYPE:
noDataValue = std::numeric_limits<float>::quiet_NaN();
break;
case DCELL_TYPE:
noDataValue = std::numeric_limits<double>::quiet_NaN();
break;
default:
break;
}
return noDataValue;
}

typedef int G_vasprintf_type( char **, const char *, va_list );
int G_vasprintf( char **out, const char *fmt, va_list ap )
{
Expand Down
3 changes: 3 additions & 0 deletions src/providers/grass/qgsgrassgislib.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,9 @@ class GRASS_LIB_EXPORT QgsGrassGisLib
/** Get GRASS raster type for QGIS raster type */
RASTER_MAP_TYPE grassRasterType( QGis::DataType qgisType );

/** Get no data value for GRASS data type */
double noDataValueForGrassType( RASTER_MAP_TYPE grassType );

/** Grass does not seem to have any function to init Cell_head,
* initialisation is done in G__read_Cell_head_array */
void initCellHead( struct Cell_head *cellhd );
Expand Down