-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfilter_dz.py
57 lines (45 loc) · 1.55 KB
/
filter_dz.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/python
"""
Filter an input dz raster using a range
"""
import sys
import os
import argparse
import numpy as np
from osgeo import gdal
from pygeotools.lib import iolib
from pygeotools.lib import malib
from pygeotools.lib import filtlib
def getparser():
parser = argparse.ArgumentParser(description="Apply a range filter to raster values")
parser.add_argument('ras_fn', type=str, help='Raster filename')
parser.add_argument('min', type=int, help='min value of range')
parser.add_argument('max', type=int, help='max value of range')
parser.add_argument('-stats', action='store_true', help='Compute and print stats before/after')
return parser
def main():
parser = getparser()
args = parser.parse_args()
ras_fn = args.ras_fn
min = args.min
max = args.max
print("Loading dz raster into masked array")
ras_ds = iolib.fn_getds(ras_fn)
ras = iolib.ds_getma(ras_ds, 1)
#Cast input ma as float32 so np.nan filling works
ras = ras.astype(np.float32)
ras_fltr = ras
#Absolute range filter
ras_fltr = filtlib.range_fltr(ras_fltr, (min, max))
if args.stats:
print("Input dz raster stats:")
malib.print_stats(ras)
print("Filtered dz raster stats:")
malib.print_stats(ras_fltr)
#Output filename will have 'filt' appended
dst_fn = os.path.splitext(ras_fn)[0]+'_filt.tif'
print("Writing out filtered dz raster: %s" % dst_fn)
#Note: writeGTiff writes ras_fltr.filled()
iolib.writeGTiff(ras_fltr, dst_fn, ras_ds)
if __name__ == '__main__':
main()