16 from opals
import StatFilter, AddInfo, Import
18 from opals.tools
import tileManager
19 from opals.tools.doxygen
import brief
20 from opals.tools.opalsargparse
import PkgArgumentParser, Boolean, PathArgument
22 def run_tile(tile, searchRad, tempdir):
23 smoothfile = os.path.join(tempdir, tile[
'tile_name'],
'dtm_smooth.tif')
25 sf = StatFilter.StatFilter(inFile=tile[
'dtm'],
28 kernelShape=opals.Types.KernelShape.circle,
29 kernelSize=int(searchRad / 1.0))
32 add = AddInfo.AddInfo(inFile=tile[
'pointcloud'],
34 attribute=
'NormalizedZ = Z - r[0]',
35 resampling=opals.Types.ResamplingMethod.bilinear)
40 def main(options, logger):
43 inp.extend(glob.glob(str(i)))
45 raise Exception(
"No input files found")
48 rasters.extend(glob.glob(str(r)))
50 raise Exception(
"No raster files found")
52 inp_files = [{
'files': inp,
61 tiling_concept =
'stripsPolygons.shp'
62 naming_concept =
'shp.id'
69 tm = tileManager.tileManager(logger, inp_files, tiling_concept, naming_concept, tempdir, buffer=searchRad)
75 for idx, tile
in enumerate(tm):
76 print(
"Now processing tile %s/%s:" % (idx, lix))
78 run_tile(tile, searchRad=searchRad, tempdir=tempdir)
79 _, vectorfiles = tm.cutToNetSize(tile, vectorfiles=tile[
'pointcloud'], overwrite=
False)
80 outfiles.append(vectorfiles[0])
82 imp = Import.Import(inFile=outfiles,
86 if __name__ ==
'__main__':
87 parser = PkgArgumentParser(usage=
"%(prog)s [options]\n" + brief(__doc__))
88 parser.add_argument(
"-i", type=PathArgument, remarks=
'mandatory', nargs=
'*', help=
"input point cloud files")
89 parser.add_argument(
"-r", type=PathArgument, remarks=
'mandatory', nargs=
'*', help=
"input raster files")
90 parser.add_argument(
"-d", type=float, default=5.0, help=
"smoothing radius")
91 options = parser.parse_args(sys.argv[1:])