[GRASS-SVN] r71666 - grass/branches/releasebranch_7_2/raster/r.out.gdal
svn_grass at osgeo.org
svn_grass at osgeo.org
Sat Nov 11 03:48:17 PST 2017
Author: mmetz
Date: 2017-11-11 03:48:17 -0800 (Sat, 11 Nov 2017)
New Revision: 71666
Modified:
grass/branches/releasebranch_7_2/raster/r.out.gdal/export_band.c
grass/branches/releasebranch_7_2/raster/r.out.gdal/local_proto.h
grass/branches/releasebranch_7_2/raster/r.out.gdal/main.c
Log:
r.out.gdal: export inf values (backport trunk r71665)
Modified: grass/branches/releasebranch_7_2/raster/r.out.gdal/export_band.c
===================================================================
--- grass/branches/releasebranch_7_2/raster/r.out.gdal/export_band.c 2017-11-11 11:47:46 UTC (rev 71665)
+++ grass/branches/releasebranch_7_2/raster/r.out.gdal/export_band.c 2017-11-11 11:48:17 UTC (rev 71666)
@@ -18,8 +18,9 @@
#include <grass/raster.h>
#include <grass/glocale.h>
-#include "cpl_string.h"
-#include "gdal.h"
+#include <gdal.h>
+#include <cpl_string.h>
+#include <cpl_port.h>
#include "local_proto.h"
int exact_range_check(double, double, GDALDataType, const char *);
@@ -75,17 +76,23 @@
Rast_get_row(fd, bufer, row, maptype);
for (col = 0; col < cols; col++) {
- if (Rast_is_f_null_value(&((FCELL *) bufer)[col])) {
+ FCELL fval = ((FCELL *) bufer)[col];
+
+ if (Rast_is_f_null_value(&fval)) {
+ ((FCELL *) bufer)[col] = fnullval;
n_nulls++;
}
else {
- if (((FCELL *) bufer)[col] == fnullval) {
+ if (fval == fnullval) {
nodatavalmatch = 1;
}
- if (dfCellMin > ((FCELL *) bufer)[col])
- dfCellMin = ((FCELL *) bufer)[col];
- if (dfCellMax < ((FCELL *) bufer)[col])
- dfCellMax = ((FCELL *) bufer)[col];
+ if (!CPLIsInf(fval)) {
+ /* ignore inf */
+ if (dfCellMin > fval)
+ dfCellMin = fval;
+ if (dfCellMax < fval)
+ dfCellMax = fval;
+ }
}
}
G_percent(row + 1, rows, 2);
@@ -101,18 +108,23 @@
Rast_get_row(fd, bufer, row, maptype);
for (col = 0; col < cols; col++) {
- if (Rast_is_d_null_value(&((DCELL *) bufer)[col])) {
+ DCELL dval = ((DCELL *) bufer)[col];
+
+ if (Rast_is_d_null_value(&dval)) {
((DCELL *) bufer)[col] = dnullval;
n_nulls++;
}
else {
- if (((DCELL *) bufer)[col] == dnullval) {
+ if (dval == dnullval) {
nodatavalmatch = 1;
}
- if (dfCellMin > ((DCELL *) bufer)[col])
- dfCellMin = ((DCELL *) bufer)[col];
- if (dfCellMax < ((DCELL *) bufer)[col])
- dfCellMax = ((DCELL *) bufer)[col];
+ if (!CPLIsInf(dval)) {
+ /* ignore inf */
+ if (dfCellMin > dval)
+ dfCellMin = dval;
+ if (dfCellMax < dval)
+ dfCellMax = dval;
+ }
}
}
G_percent(row + 1, rows, 2);
@@ -229,6 +241,9 @@
return -1;
}
+ if (!no_metadata)
+ GDALSetDescription(hBand, name);
+
/* Get min/max values. */
if (Rast_read_fp_range(name, mapset, &sRange) == -1) {
bHaveMinMax = FALSE;
Modified: grass/branches/releasebranch_7_2/raster/r.out.gdal/local_proto.h
===================================================================
--- grass/branches/releasebranch_7_2/raster/r.out.gdal/local_proto.h 2017-11-11 11:47:46 UTC (rev 71665)
+++ grass/branches/releasebranch_7_2/raster/r.out.gdal/local_proto.h 2017-11-11 11:48:17 UTC (rev 71666)
@@ -1,7 +1,7 @@
#ifndef __LOCAL_PROTO_H__
#define __LOCAL_PROTO_H__
-#include "gdal.h"
+#include <gdal.h>
/* range limits */
/*
Modified: grass/branches/releasebranch_7_2/raster/r.out.gdal/main.c
===================================================================
--- grass/branches/releasebranch_7_2/raster/r.out.gdal/main.c 2017-11-11 11:47:46 UTC (rev 71665)
+++ grass/branches/releasebranch_7_2/raster/r.out.gdal/main.c 2017-11-11 11:48:17 UTC (rev 71666)
@@ -30,7 +30,9 @@
#include <grass/glocale.h>
#include <grass/dbmi.h>
-#include "cpl_string.h"
+#include <cpl_string.h>
+#include <cpl_port.h>
+
#include "local_proto.h"
int range_check(double, double, GDALDataType);
@@ -732,7 +734,8 @@
case GDT_Float32:
case GDT_CFloat32:
- if (max < TYPE_FLOAT32_MIN || min > TYPE_FLOAT32_MAX) {
+ if ((!CPLIsInf(max) && max < TYPE_FLOAT32_MIN) ||
+ (!CPLIsInf(min) && min > TYPE_FLOAT32_MAX)) {
G_warning(_("Selected GDAL datatype does not cover data range."));
G_warning(_("GDAL datatype: %s, range: %g - %g"),
GDALGetDataTypeName(datatype), TYPE_FLOAT32_MIN,
@@ -829,7 +832,7 @@
case GDT_Float32:
case GDT_CFloat32:
- if (nodataval != (double)(float) nodataval) {
+ if (!CPLIsNan(nodataval) && nodataval != (double)(float) nodataval) {
G_warning(_("Mismatch between metadata nodata value and actual nodata value in exported raster: "
"specified nodata value %g gets converted to %g by selected GDAL datatype."),
nodataval, (float) nodataval);
More information about the grass-commit
mailing list