[GRASS-dev] GRASS7-Python: processing with external raster maps

Hi,

I have written attached Python script which registers a raster map
(r.external), does some calculation (r.mapcalc), and writes immediately
the result to a GeoTIFF file (r.external.out).

So far so nice but the resulting map appears to be incomplete.
I suppose that some file closing does not happen, any idea how
to fix this script?

thanks
Markus

(attachments)

r.geotiff_processing.py (1.63 KB)

Markus Neteler wrote:

I have written attached Python script which registers a raster map
(r.external), does some calculation (r.mapcalc), and writes immediately
the result to a GeoTIFF file (r.external.out).

So far so nice but the resulting map appears to be incomplete.
I suppose that some file closing does not happen, any idea how
to fix this script?

It mostly works for me, except that 64-bit output isn't quite right
(it appears to contain random noise). Changing 0.2 to 0.2f fixes that;
I don't know whether this is a bug in the lib/raster GDAL code or in
GDAL's handling of 64-bit floating-point TIFFs or in libtiff's
handling of 64-bit floating-point TIFFs.

Also: note that a relative directory (for r.external.out directory=)
is interpreted relative to the mapset directory, not the current
directory. An unspecified or empty directory (which will occur if you
pass a simple filename for output=) results in output files being
placed in the "gdal" subdirectory of the mapset directory.

I've attached a slightly modified version which does a better job (I
think) of handling the extension, and switches back to native output
upon completion (although that should probably be in an exit handler,
and should switch back to the prior state).

--
Glynn Clements <glynn@gclements.plus.com>

(attachments)

r.geotiff_processing.py (1.71 KB)

On Sun, Nov 20, 2011 at 12:27 AM, Glynn Clements
<glynn@gclements.plus.com> wrote:

Markus Neteler wrote:

I have written attached Python script which registers a raster map
(r.external), does some calculation (r.mapcalc), and writes immediately
the result to a GeoTIFF file (r.external.out).

So far so nice but the resulting map appears to be incomplete.
I suppose that some file closing does not happen, any idea how
to fix this script?

It mostly works for me, except that 64-bit output isn't quite right
(it appears to contain random noise). Changing 0.2 to 0.2f fixes that;
I don't know whether this is a bug in the lib/raster GDAL code or in
GDAL's handling of 64-bit floating-point TIFFs or in libtiff's
handling of 64-bit floating-point TIFFs.

Good question - I have just updated to GDAL 1.8.1.
It looks fine.

Also: note that a relative directory (for r.external.out directory=)
is interpreted relative to the mapset directory, not the current
directory. An unspecified or empty directory (which will occur if you
pass a simple filename for output=) results in output files being
placed in the "gdal" subdirectory of the mapset directory.

Ah good point, added to manual.

I've attached a slightly modified version which does a better job (I
think) of handling the extension, and switches back to native output
upon completion (although that should probably be in an exit handler,
and should switch back to the prior state).

Thanks, appreciated. Now the script works fine.

Markus