![]() |
| Houay Lamphan Gnai on Landsat 8 image taken on the 23rd Oct, 2015 |
As with Landsat 7 I used the near infrared (NIR) channel of Landsat 8 with a wavelength of 0.85 - 0.88 micrometers. Whereas the infrared channel was band 4 in Landsat 7, it is now band 5 in Landsat 8.
The following script extracts pixels representing waterbodies (low values) and creates a new raster layer with 1.0 and null values. It takes as arguments the name of the input map, name of the output map and a threshold value.
#!/usr/bin/env python
from grass.script import array as garray
import numpy as np
import sys
def main(argv=None):
if argv is None:
argv = sys.argv
inputname = argv[1]
outputname = argv[2]
threshold = np.float_(argv[3])
in_arr = garray.array()
in_arr.read(inputname)
out_arr = garray.array()
out_arr[...] = in_arr
out_arr[out_arr > threshold] = np.nan
out_arr[out_arr <= threshold] = np.float_(1.0)
out_arr.write(outputname, overwrite=True)
return 0
if __name__ == '__main__':
sys.exit(main())
After extracting the reservoir as raster layer, I continued with the previously described workflow.
![]() |
| Final result after extracting pixels representing water bodies, growing by one pixel, vectorizing and smoothing |
I was wondering about the performance of this script against GRASS GIS' own map calculator. So I compared above script with this one:
#!/usr/bin/env python
from grass.script.raster import mapcalc
import sys
def main(argv=None):
if argv is None:
argv = sys.argv
inputname = argv[1]
outputname = argv[2]
threshold = float(argv[3])
expr = '"%s" = if("%s" <= %f, 1, null())' % (outputname,inputname,threshold)
mapcalc(expr, overwrite=True)
return 0
if __name__ == '__main__':
sys.exit(main())
For a region with 320223 cells I got the following results:
script with numpy: 0.357898100217 script with r.mapcalc: 0.270698928833As actually expected r.mapcalc performs better in this simple case. But still the interface to numpy unlocks the great potential and functionality of numpy which excels GRASS GIS' map calculator.
![]() |
| Editing the newly created reservoir in JOSM |
Is there any other map or dataset than OpenStreetMap that contains this reservoir right now? I don't think so!



No comments:
Post a Comment