![]() |
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