Hi Paulo and Helmut,

Did you consider using cStringIO, if you need a file-object?
That would avoid the temporary file and thus should be more efficient too. See 
attached diff (it is probably not necessary to remove the last line break 
though).

Just a suggestion.
Yet, there might be even more efficient solutions. For example raster2numpy 
from pygrass...
https://grass.osgeo.org/grass74/manuals/libpython/pygrass.raster.html#pygrass.raster.raster2numpy
Here however, you would have to mask NULL and I am not sure how to 
(platform-independent) determine values that represent NULL in a raster map. 
This gives pointers but there are again issues with Windows it seems: 
https://grasswiki.osgeo.org/wiki/GRASS_Python_Scripting_Library#Interfacing_with_NumPy
And it leaves the question how to find out if a raster is Integer or not...

With pygrass you could do:
from grass.pygrass import raster as r
p = np.ma.masked_equal(r.raster2numpy(raster), np.nan)) # For floating point 
rasters on Linux
or
p = np.ma.masked_equal(r.raster2numpy(raster), -2147483648)) # For integer 
rasters

Hints from experienced Python/Numpy developers would be appreciated...

That makes me wonder if it would be worth to add/collect recommendations for 
how to solve such common operations (like e.g. parsing table output from grass 
commands) either e.g. here: https://trac.osgeo.org/grass/wiki/Submitting/Python 
or here: https://grasswiki.osgeo.org/wiki/GRASS_and_Python ?

Cheers
Stefan


From: grass-user [mailto:grass-user-boun...@lists.osgeo.org] On Behalf Of Paulo 
van Breugel
Sent: lørdag 3. februar 2018 09.14
To: Helmut Kudrnovsky <hel...@web.de>; grass-user@lists.osgeo.org
Subject: Re: [GRASS-user] Issue with addon r.vif in MS Windows GUI 
installations (stand-alone v. 7.2.2 and 7.0.5)


On February 2, 2018 8:52:03 PM Helmut Kudrnovsky 
<hel...@web.de<mailto:hel...@web.de>> wrote:

>>Any idea how I can do that in such a way that it works on both Linux and
> Windows?
>
> in r.vif script I've changed the relevant lines:
>
> <----------------------------------------
>     # Get the raster values at sample points
>     fd, tmpcov = tempfile.mkstemp()
>     with open(tmpcov, "w") as text_file:
>         text_file.write(
>                 gs.read_command("r.stats", flags="1n", input=raster,
>                                 quiet=True, separator="comma"))
>     p = np.loadtxt(tmpcov, skiprows=0, delimiter=",")
>
>     # Clean up
>     text_file.close()
>     os.close(fd)
>     os.remove(tmpcov)
>     if not n == "100%":
>         gs.run_command("r.mask", flags="r", quiet=True)
>         if exist_mask['fullname']:
>             gs.run_command("g.rename", raster=[mask_backup, "MASK"],
>                            quiet=True)
>     return(p)
> ---------------------------------------->
>
> and tested the script in winGRASS; it seems to work in windows; not tested
> on linux and mac.
>
>
Ok, thanks Helmut, I'll see if that works in Linux too
>
> -----
> best regards
> Helmut
> --
> Sent from: http://osgeo-org.1560.x6.nabble.com/Grass-Users-f3884509.html
> _______________________________________________
> grass-user mailing list
> grass-user@lists.osgeo.org<mailto:grass-user@lists.osgeo.org>
> https://lists.osgeo.org/mailman/listinfo/grass-user

Attachment: r.vif.diff
Description: r.vif.diff

_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

Reply via email to