Skip to content

Commit

Permalink
GRASS direct no data for type
Browse files Browse the repository at this point in the history
  • Loading branch information
blazek committed Apr 10, 2013
1 parent 9e82df8 commit a7e1d40
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 15 deletions.
36 changes: 21 additions & 15 deletions src/providers/grass/qgsgrassgislib.cpp
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
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

0 comments on commit a7e1d40

Please sign in to comment.