GRASS direct no data for type

This commit is contained in:
Radim Blazek 2013-04-10 16:31:46 +02:00
parent 9e82df814b
commit a7e1d40e8a
2 changed files with 24 additions and 15 deletions

View File

@ -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 );
@ -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 )
{

View File

@ -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 );