diff --git a/python/plugins/processing/algs/lidar/LidarToolsAlgorithmProvider.py b/python/plugins/processing/algs/lidar/LidarToolsAlgorithmProvider.py index a6909ef639b5..c05d429cd371 100644 --- a/python/plugins/processing/algs/lidar/LidarToolsAlgorithmProvider.py +++ b/python/plugins/processing/algs/lidar/LidarToolsAlgorithmProvider.py @@ -8,7 +8,7 @@ Copyright : (C) 2012 by Victor Olaya Email : volayaf at gmail dot com --------------------- - Date : April 2014 + Date : April, October 2014 Copyright : (C) 2014 by Martin Isenburg Email : martin near rapidlasso point com --------------------- @@ -81,6 +81,30 @@ from lastools.lastilePro import lastilePro from lastools.lasgroundPro import lasgroundPro from lastools.las2demPro import las2demPro +from lastools.lasheightPro import lasheightPro +from lastools.laszipPro import laszipPro +from lastools.lasgridPro import lasgridPro +from lastools.lasduplicatePro import lasduplicatePro +from lastools.lassortPro import lassortPro +from lastools.lasclassifyPro import lasclassifyPro +from lastools.lasthinPro import lasthinPro +from lastools.lasnoisePro import lasnoisePro +from lastools.lasindexPro import lasindexPro +from lastools.lascanopyPro import lascanopyPro +from lastools.blast2demPro import blast2demPro +from lastools.lasboundaryPro import lasboundaryPro +from lastools.lasinfoPro import lasinfoPro +from lastools.las2lasPro_filter import las2lasPro_filter +from lastools.las2lasPro_project import las2lasPro_project +from lastools.las2lasPro_transform import las2lasPro_transform +from lastools.lasoveragePro import lasoveragePro +from lastools.txt2lasPro import txt2lasPro +from lastools.las2txtPro import las2txtPro +from lastools.blast2isoPro import blast2isoPro +from lastools.lasvalidatePro import lasvalidatePro +from lastools.lasmergePro import lasmergePro +from lastools.lasviewPro import lasviewPro +from lastools.lasoverlapPro import lasoverlapPro from lastools.flightlinesToDTMandDSM import flightlinesToDTMandDSM from lastools.flightlinesToCHM import flightlinesToCHM @@ -105,7 +129,6 @@ from fusion.FilterData import FilterData from fusion.FusionUtils import FusionUtils - class LidarToolsAlgorithmProvider(AlgorithmProvider): def __init__(self): @@ -115,7 +138,7 @@ def __init__(self): # LAStools for processing single files - if isWindows(): + if (isWindows() or LAStoolsUtils.hasWine()): lastools = [ lasground(), lasheight(), lasclassify(), lasclip(), lastile(), lascolor(), lasgrid(), las2dem(), blast2dem(), las2iso(), blast2iso(), @@ -138,12 +161,19 @@ def __init__(self): # LAStools Production for processing folders of files - if isWindows(): + if (isWindows() or LAStoolsUtils.hasWine()): lastoolsPro = [ - lastilePro(), lasgroundPro(), las2demPro() + lastilePro(), lasgroundPro(), las2demPro(), lasheightPro(), laszipPro(), + lasduplicatePro(), lasgridPro(), lassortPro(), lasclassifyPro(), lasthinPro(), + lasnoisePro(), lasindexPro(), lascanopyPro(), blast2demPro(), lasboundaryPro(), + lasinfoPro(), las2lasPro_filter(), las2lasPro_project(), las2lasPro_transform(), + lasoveragePro(), txt2lasPro(), las2txtPro(), blast2isoPro(), lasvalidatePro(), + lasmergePro(), lasviewPro(), lasoverlapPro() ] else: lastoolsPro = [ + laszipPro(), lasindexPro(), lasinfoPro(), las2lasPro_filter(), las2lasPro_project(), + las2lasPro_transform(), txt2lasPro(), las2txtPro(), lasvalidatePro(), lasmergePro() ] for alg in lastoolsPro: alg.group = 'LAStools Production' @@ -151,7 +181,7 @@ def __init__(self): # some examples for LAStools Pipelines - if isWindows(): + if (isWindows() or LAStoolsUtils.hasWine()): lastoolsPipe = [ flightlinesToDTMandDSM(), flightlinesToCHM(), flightlinesToSingleCHMpitFree(), hugeFileClassify(), hugeFileGroundClassify(), hugeFileNormalize() diff --git a/python/plugins/processing/algs/lidar/lastools/LAStoolsAlgorithm.py b/python/plugins/processing/algs/lidar/lastools/LAStoolsAlgorithm.py index b5459542f4eb..7cd5bda30d5b 100644 --- a/python/plugins/processing/algs/lidar/lastools/LAStoolsAlgorithm.py +++ b/python/plugins/processing/algs/lidar/lastools/LAStoolsAlgorithm.py @@ -45,10 +45,12 @@ class LAStoolsAlgorithm(GeoAlgorithm): VERBOSE = "VERBOSE" + GUI = "GUI" CORES = "CORES" INPUT_LASLAZ = "INPUT_LASLAZ" INPUT_DIRECTORY = "INPUT_DIRECTORY" INPUT_WILDCARDS = "INPUT_WILDCARDS" + MERGED = "MERGED" OUTPUT_LASLAZ = "OUTPUT_LASLAZ" OUTPUT_DIRECTORY = "OUTPUT_DIRECTORY" OUTPUT_APPENDIX = "OUTPUT_APPENDIX" @@ -65,21 +67,22 @@ class LAStoolsAlgorithm(GeoAlgorithm): HORIZONTAL_FEET = "HORIZONTAL_FEET" VERTICAL_FEET = "VERTICAL_FEET" FILES_ARE_FLIGHTLINES = "FILES_ARE_FLIGHTLINES" + APPLY_FILE_SOURCE_ID = "APPLY_FILE_SOURCE_ID" STEP = "STEP" FILTER_RETURN_CLASS_FLAGS1 = "FILTER_RETURN_CLASS_FLAGS1" FILTER_RETURN_CLASS_FLAGS2 = "FILTER_RETURN_CLASS_FLAGS2" FILTER_RETURN_CLASS_FLAGS3 = "FILTER_RETURN_CLASS_FLAGS3" FILTERS_RETURN_CLASS_FLAGS = ["---", "keep_last", "keep_first", "keep_middle", "keep_single", "drop_single", "keep_double", "keep_class 2", "keep_class 2 8", "keep_class 8", "keep_class 6", - "keep_class 9", "keep_class 3 4 5", "keep_class 2 6", "drop_class 7", "drop_withheld"] + "keep_class 9", "keep_class 3 4 5", "keep_class 2 6", "drop_class 7", "drop_withheld", "drop_synthetic"] FILTER_COORDS_INTENSITY1 = "FILTER_COORDS_INTENSITY1" FILTER_COORDS_INTENSITY2 = "FILTER_COORDS_INTENSITY2" FILTER_COORDS_INTENSITY3 = "FILTER_COORDS_INTENSITY3" FILTER_COORDS_INTENSITY1_ARG = "FILTER_COORDS_INTENSITY1_ARG" FILTER_COORDS_INTENSITY2_ARG = "FILTER_COORDS_INTENSITY2_ARG" FILTER_COORDS_INTENSITY3_ARG = "FILTER_COORDS_INTENSITY3_ARG" - FILTERS_COORDS_INTENSITY = ["---", "clip_x_above", "clip_x_below", "clip_y_above", "clip_y_below", "clip_z_above", - "clip_z_below", "drop_intensity_above", "drop_intensity_below", "drop_gps_time_above", + FILTERS_COORDS_INTENSITY = ["---", "drop_x_above", "drop_x_below", "drop_y_above", "drop_y_below", "drop_z_above", + "drop_z_below", "drop_intensity_above", "drop_intensity_below", "drop_gps_time_above", "drop_gps_time_below", "drop_scan_angle_above", "drop_scan_angle_below", "keep_point_source", "drop_point_source", "drop_point_source_above", "drop_point_source_below", "keep_user_data", "drop_user_data", "drop_user_data_above", "drop_user_data_below", "keep_every_nth", @@ -110,10 +113,13 @@ def checkBeforeOpeningParametersDialog(self): def addParametersVerboseGUI(self): self.addParameter(ParameterBoolean(LAStoolsAlgorithm.VERBOSE, "verbose", False)) + self.addParameter(ParameterBoolean(LAStoolsAlgorithm.GUI, "open LAStools GUI", False)) def addParametersVerboseCommands(self, commands): if self.getParameterValue(LAStoolsAlgorithm.VERBOSE): commands.append("-v") + if self.getParameterValue(LAStoolsAlgorithm.GUI): + commands.append("-gui") def addParametersCoresGUI(self): self.addParameter(ParameterNumber(LAStoolsAlgorithm.CORES, "number of cores", 1, 32, 4)) @@ -125,7 +131,7 @@ def addParametersCoresCommands(self, commands): commands.append(str(cores)) def addParametersPointInputGUI(self): - self.addParameter(ParameterFile(LAStoolsAlgorithm.INPUT_LASLAZ, "input LAS/LAZ file")) + self.addParameter(ParameterFile(LAStoolsAlgorithm.INPUT_LASLAZ, "input LAS/LAZ file", False, False)) def addParametersPointInputCommands(self, commands): input = self.getParameterValue(LAStoolsAlgorithm.INPUT_LASLAZ) @@ -134,7 +140,7 @@ def addParametersPointInputCommands(self, commands): commands.append(input) def addParametersPointInputFolderGUI(self): - self.addParameter(ParameterFile(LAStoolsAlgorithm.INPUT_DIRECTORY, "input directory", True)) + self.addParameter(ParameterFile(LAStoolsAlgorithm.INPUT_DIRECTORY, "input directory", True, False)) self.addParameter(ParameterString(LAStoolsAlgorithm.INPUT_WILDCARDS, "input wildcard(s)", "*.laz")) def addParametersPointInputFolderCommands(self, commands): @@ -147,6 +153,27 @@ def addParametersPointInputFolderCommands(self, commands): else: commands.append('"' + wildcard + '"') + def addParametersPointInputMergedGUI(self): + self.addParameter(ParameterBoolean(LAStoolsAlgorithm.MERGED, "merge all input files on-the-fly into one", False)) + + def addParametersPointInputMergedCommands(self, commands): + if self.getParameterValue(LAStoolsAlgorithm.MERGED): + commands.append("-merged") + + def addParametersGenericInputFolderGUI(self, wildcard): + self.addParameter(ParameterFile(LAStoolsAlgorithm.INPUT_DIRECTORY, "input directory", True, False)) + self.addParameter(ParameterString(LAStoolsAlgorithm.INPUT_WILDCARDS, "input wildcard(s)", wildcard)) + + def addParametersGenericInputFolderCommands(self, commands): + input = self.getParameterValue(LAStoolsAlgorithm.INPUT_DIRECTORY) + wildcards = self.getParameterValue(LAStoolsAlgorithm.INPUT_WILDCARDS).split() + for wildcard in wildcards: + commands.append("-i") + if input != None: + commands.append('"' + input + "\\" + wildcard + '"') + else: + commands.append('"' + wildcard + '"') + def addParametersHorizontalFeetGUI(self): self.addParameter(ParameterBoolean(LAStoolsAlgorithm.HORIZONTAL_FEET, "horizontal feet", False)) @@ -170,12 +197,19 @@ def addParametersHorizontalAndVerticalFeetCommands(self, commands): self.addParametersVerticalFeetCommands(commands) def addParametersFilesAreFlightlinesGUI(self): - self.addParameter(ParameterBoolean(LAStoolsAlgorithm.FILES_ARE_FLIGHTLINES, "files are flightlines", True)) + self.addParameter(ParameterBoolean(LAStoolsAlgorithm.FILES_ARE_FLIGHTLINES, "files are flightlines", False)) def addParametersFilesAreFlightlinesCommands(self, commands): if self.getParameterValue(LAStoolsAlgorithm.FILES_ARE_FLIGHTLINES): commands.append("-files_are_flightlines") + def addParametersApplyFileSourceIdGUI(self): + self.addParameter(ParameterBoolean(LAStoolsAlgorithm.APPLY_FILE_SOURCE_ID, "apply file source ID", False)) + + def addParametersApplyFileSourceIdCommands(self, commands): + if self.getParameterValue(LAStoolsAlgorithm.APPLY_FILE_SOURCE_ID): + commands.append("-apply_file_source_ID") + def addParametersStepGUI(self): self.addParameter(ParameterNumber(LAStoolsAlgorithm.STEP, "step size / pixel size", 0, None, 1.0)) @@ -252,7 +286,7 @@ def addParametersOutputAppendixCommands(self, commands): commands.append(odix) def addParametersTemporaryDirectoryGUI(self): - self.addParameter(ParameterFile(LAStoolsAlgorithm.TEMPORARY_DIRECTORY, "empty temporary directory", True)) + self.addParameter(ParameterFile(LAStoolsAlgorithm.TEMPORARY_DIRECTORY, "empty temporary directory", True, False)) def addParametersTemporaryDirectoryAsOutputDirectoryCommands(self, commands): odir = self.getParameterValue(LAStoolsAlgorithm.TEMPORARY_DIRECTORY) diff --git a/python/plugins/processing/algs/lidar/lastools/LAStoolsUtils.py b/python/plugins/processing/algs/lidar/lastools/LAStoolsUtils.py index 2a06e8478081..6354f82adbc1 100644 --- a/python/plugins/processing/algs/lidar/lastools/LAStoolsUtils.py +++ b/python/plugins/processing/algs/lidar/lastools/LAStoolsUtils.py @@ -7,6 +7,10 @@ Date : August 2012 Copyright : (C) 2012 by Victor Olaya Email : volayaf at gmail dot com + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com *************************************************************************** * * * This program is free software; you can redistribute it and/or modify * @@ -33,19 +37,29 @@ class LAStoolsUtils: WINE_FOLDER = "WINE_FOLDER" @staticmethod - def LAStoolsPath(): - folder = ProcessingConfig.getSetting(LAStoolsUtils.LASTOOLS_FOLDER) - if folder == None: - folder ="" + def hasWine(): + wine_folder = ProcessingConfig.getSetting(LAStoolsUtils.WINE_FOLDER) + return ((wine_folder != None) and (wine_folder != "")) + @staticmethod + def LAStoolsPath(): + lastools_folder = ProcessingConfig.getSetting(LAStoolsUtils.LASTOOLS_FOLDER) + if lastools_folder == None: + lastools_folder = "" + wine_folder = ProcessingConfig.getSetting(LAStoolsUtils.WINE_FOLDER) + if (wine_folder == None) or (wine_folder == ""): + folder = lastools_folder + else: + folder = wine_folder + "/wine " + lastools_folder return folder - @staticmethod def runLAStools(commands, progress): loglines = [] - loglines.append("LAStools console output") commandline = " ".join(commands) + loglines.append("LAStools command line") + loglines.append(commandline) + loglines.append("LAStools console output") proc = subprocess.Popen(commandline, shell=True, stdout=subprocess.PIPE, stdin=open(os.devnull), stderr=subprocess.STDOUT, universal_newlines=False).stdout for line in iter(proc.readline, ""): diff --git a/python/plugins/processing/algs/lidar/lastools/blast2dem.py b/python/plugins/processing/algs/lidar/lastools/blast2dem.py index 1d340587d4b7..c9e8f06d81a8 100644 --- a/python/plugins/processing/algs/lidar/lastools/blast2dem.py +++ b/python/plugins/processing/algs/lidar/lastools/blast2dem.py @@ -28,6 +28,7 @@ from LAStoolsAlgorithm import LAStoolsAlgorithm from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean class blast2dem(LAStoolsAlgorithm): @@ -35,7 +36,7 @@ class blast2dem(LAStoolsAlgorithm): PRODUCT = "PRODUCT" ATTRIBUTES = ["elevation", "slope", "intensity", "rgb"] PRODUCTS = ["actual values", "hillshade", "gray", "false"] - + USE_TILE_BB = "USE_TILE_BB" def defineCharacteristics(self): self.name = "blast2dem" @@ -46,10 +47,12 @@ def defineCharacteristics(self): self.addParametersStepGUI() self.addParameter(ParameterSelection(blast2dem.ATTRIBUTE, "Attribute", blast2dem.ATTRIBUTES, 0)) self.addParameter(ParameterSelection(blast2dem.PRODUCT, "Product", blast2dem.PRODUCTS, 0)) + self.addParameter(ParameterBoolean(blast2dem.USE_TILE_BB, "use tile bounding box (after tiling with buffer)", False)) self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "blast2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "blast2dem")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) @@ -60,6 +63,9 @@ def processAlgorithm(self, progress): product = self.getParameterValue(blast2dem.PRODUCT) if product != 0: commands.append("-" + blast2dem.PRODUCTS[product]) + if (self.getParameterValue(blast2dem.USE_TILE_BB)): + commands.append("-use_tile_bb") self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/blast2demPro.py b/python/plugins/processing/algs/lidar/lastools/blast2demPro.py new file mode 100644 index 000000000000..7bb81012c88a --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/blast2demPro.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + blast2demPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean + +class blast2demPro(LAStoolsAlgorithm): + + ATTRIBUTE = "ATTRIBUTE" + PRODUCT = "PRODUCT" + ATTRIBUTES = ["elevation", "slope", "intensity", "rgb"] + PRODUCTS = ["actual values", "hillshade", "gray", "false"] + USE_TILE_BB = "USE_TILE_BB" + + def defineCharacteristics(self): + self.name = "blast2demPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersPointInputMergedGUI() + self.addParametersFilter1ReturnClassFlagsGUI() + self.addParametersStepGUI() + self.addParameter(ParameterSelection(blast2demPro.ATTRIBUTE, "Attribute", blast2demPro.ATTRIBUTES, 0)) + self.addParameter(ParameterSelection(blast2demPro.PRODUCT, "Product", blast2demPro.PRODUCTS, 0)) + self.addParameter(ParameterBoolean(blast2demPro.USE_TILE_BB, "use tile bounding box (after tiling with buffer)", False)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersRasterOutputFormatGUI() + self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "blast2dem")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersPointInputMergedCommands(commands) + self.addParametersFilter1ReturnClassFlagsCommands(commands) + self.addParametersStepCommands(commands) + attribute = self.getParameterValue(blast2demPro.ATTRIBUTE) + if attribute != 0: + commands.append("-" + blast2demPro.ATTRIBUTES[attribute]) + product = self.getParameterValue(blast2demPro.PRODUCT) + if product != 0: + commands.append("-" + blast2demPro.PRODUCTS[product]) + if (self.getParameterValue(blast2demPro.USE_TILE_BB)): + commands.append("-use_tile_bb") + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersRasterOutputFormatCommands(commands) + self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/blast2iso.py b/python/plugins/processing/algs/lidar/lastools/blast2iso.py index 91e425f425e0..7a96aa266bb3 100644 --- a/python/plugins/processing/algs/lidar/lastools/blast2iso.py +++ b/python/plugins/processing/algs/lidar/lastools/blast2iso.py @@ -48,9 +48,10 @@ def defineCharacteristics(self): self.addParameter(ParameterNumber(blast2iso.SIMPLIFY_LENGTH, "simplify segments shorter than (0 = do not simplify)", None, None, 0.0)) self.addParameter(ParameterNumber(blast2iso.SIMPLIFY_AREA, "simplify segments pairs with area less than (0 = do not simplify)", None, None, 0.0)) self.addParametersVectorOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "blast2iso.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "blast2iso")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) smooth = self.getParameterValue(blast2iso.SMOOTH) @@ -72,5 +73,6 @@ def processAlgorithm(self, progress): commands.append("-clean") commands.append(str(clean)) self.addParametersVectorOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/blast2isoPro.py b/python/plugins/processing/algs/lidar/lastools/blast2isoPro.py new file mode 100644 index 000000000000..8227689d2b19 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/blast2isoPro.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + blast2isoPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterNumber + +class blast2isoPro(LAStoolsAlgorithm): + + SMOOTH = "SMOOTH" + ISO_EVERY = "ISO_EVERY" + SIMPLIFY_LENGTH = "SIMPLIFY_LENGTH" + SIMPLIFY_AREA = "SIMPLIFY_AREA" + CLEAN = "CLEAN" + + def defineCharacteristics(self): + self.name = "blast2isoPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersPointInputMergedGUI() + self.addParameter(ParameterNumber(blast2isoPro.SMOOTH, "smooth underlying TIN", 0, None, 0)) + self.addParameter(ParameterNumber(blast2isoPro.ISO_EVERY, "extract isoline with a spacing of", 0, None, 10.0)) + self.addParameter(ParameterNumber(blast2isoPro.CLEAN, "clean isolines shorter than (0 = do not clean)", None, None, 0.0)) + self.addParameter(ParameterNumber(blast2isoPro.SIMPLIFY_LENGTH, "simplify segments shorter than (0 = do not simplify)", None, None, 0.0)) + self.addParameter(ParameterNumber(blast2isoPro.SIMPLIFY_AREA, "simplify segments pairs with area less than (0 = do not simplify)", None, None, 0.0)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersVectorOutputFormatGUI() + self.addParametersVectorOutputGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "blast2iso")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersPointInputMergedCommands(commands) + smooth = self.getParameterValue(blast2isoPro.SMOOTH) + if smooth != 0: + commands.append("-smooth") + commands.append(str(smooth)) + commands.append("-iso_every") + commands.append(str(self.getParameterValue(blast2isoPro.ISO_EVERY))) + simplify_length = self.getParameterValue(blast2isoPro.SIMPLIFY_LENGTH) + if simplify_length != 0: + commands.append("-simplify_length") + commands.append(str(simplify_length)) + simplify_area = self.getParameterValue(blast2isoPro.SIMPLIFY_AREA) + if simplify_area != 0: + commands.append("-simplify_area") + commands.append(str(simplify_area)) + clean = self.getParameterValue(blast2isoPro.CLEAN) + if clean != 0: + commands.append("-clean") + commands.append(str(clean)) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersVectorOutputFormatCommands(commands) + self.addParametersVectorOutputCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/flightlinesToCHM.py b/python/plugins/processing/algs/lidar/lastools/flightlinesToCHM.py index 0cfff8f9c314..cc6d2db73cd0 100644 --- a/python/plugins/processing/algs/lidar/lastools/flightlinesToCHM.py +++ b/python/plugins/processing/algs/lidar/lastools/flightlinesToCHM.py @@ -60,7 +60,7 @@ def processAlgorithm(self, progress): # first we tile the data - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersPointInputFolderCommands(commands) commands.append("-files_are_flightlines") @@ -83,7 +83,7 @@ def processAlgorithm(self, progress): # then we ground classify the tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, base_name+"*.laz") method = self.getParameterValue(flightlinesToCHM.TERRAIN) @@ -105,7 +105,7 @@ def processAlgorithm(self, progress): # then we height-normalize the tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, base_name+"*_g.laz") commands.append("-replace_z") @@ -119,7 +119,7 @@ def processAlgorithm(self, progress): # then we thin and splat the tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasthin.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasthin")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, base_name+"*_gh.laz") beam_width = self.getParameterValue(flightlinesToCHM.BEAM_WIDTH) @@ -140,7 +140,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into CHMs - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, base_name+"*_ght.laz") self.addParametersStepCommands(commands) diff --git a/python/plugins/processing/algs/lidar/lastools/flightlinesToDTMandDSM.py b/python/plugins/processing/algs/lidar/lastools/flightlinesToDTMandDSM.py index b0443b79269c..1a2046f196ad 100644 --- a/python/plugins/processing/algs/lidar/lastools/flightlinesToDTMandDSM.py +++ b/python/plugins/processing/algs/lidar/lastools/flightlinesToDTMandDSM.py @@ -58,7 +58,7 @@ def processAlgorithm(self, progress): # first we tile the data - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersPointInputFolderCommands(commands) commands.append("-files_are_flightlines") @@ -81,7 +81,7 @@ def processAlgorithm(self, progress): # then we ground classify the tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, base_name+"*.laz") method = self.getParameterValue(flightlinesToDTMandDSM.TERRAIN) @@ -103,7 +103,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into DTMs - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, base_name+"*_g.laz") commands.append("-keep_class") @@ -122,7 +122,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into DSMs - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, base_name+"*_g.laz") commands.append("-first_only") diff --git a/python/plugins/processing/algs/lidar/lastools/flightlinesToSingleCHMpitFree.py b/python/plugins/processing/algs/lidar/lastools/flightlinesToSingleCHMpitFree.py index fc698d85b453..1787d5b15aae 100644 --- a/python/plugins/processing/algs/lidar/lastools/flightlinesToSingleCHMpitFree.py +++ b/python/plugins/processing/algs/lidar/lastools/flightlinesToSingleCHMpitFree.py @@ -60,7 +60,7 @@ def processAlgorithm(self, progress): # first we tile the data - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersPointInputFolderCommands(commands) commands.append("-files_are_flightlines") @@ -79,7 +79,7 @@ def processAlgorithm(self, progress): # then we ground classify the tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*.laz") method = self.getParameterValue(flightlinesToSingleCHMpitFree.TERRAIN) @@ -101,7 +101,7 @@ def processAlgorithm(self, progress): # then we height-normalize the tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*_g.laz") commands.append("-replace_z") @@ -115,7 +115,7 @@ def processAlgorithm(self, progress): # then we thin and splat the tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasthin.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasthin")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*_gh.laz") beam_width = self.getParameterValue(flightlinesToSingleCHMpitFree.BEAM_WIDTH) @@ -135,7 +135,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into the partial CHMs at level 00 - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*_ght.laz") self.addParametersStepCommands(commands) @@ -152,7 +152,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into the partial CHMs at level 02 - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*_ght.laz") commands.append("-drop_z_below") @@ -173,7 +173,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into the partial CHMs at level 05 - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*_ght.laz") commands.append("-drop_z_below") @@ -194,7 +194,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into the partial CHMs at level 10 - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*_ght.laz") commands.append("-drop_z_below") @@ -215,7 +215,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into the partial CHMs at level 15 - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*_ght.laz") commands.append("-drop_z_below") @@ -236,7 +236,7 @@ def processAlgorithm(self, progress): # then we rasterize the classified tiles into the partial CHMs at level 20 - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile*_ght.laz") commands.append("-drop_z_below") @@ -257,7 +257,7 @@ def processAlgorithm(self, progress): # then we combine the partial CHMs into a single output CHM - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasgrid.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasgrid")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "tile_chm*.bil") commands.append("-highest") diff --git a/python/plugins/processing/algs/lidar/lastools/hugeFileClassify.py b/python/plugins/processing/algs/lidar/lastools/hugeFileClassify.py index f797d206db9d..bbc09539ddfa 100644 --- a/python/plugins/processing/algs/lidar/lastools/hugeFileClassify.py +++ b/python/plugins/processing/algs/lidar/lastools/hugeFileClassify.py @@ -59,7 +59,7 @@ def processAlgorithm(self, progress): # first we tile the data with option '-reversible' - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) tile_size = self.getParameterValue(hugeFileClassify.TILE_SIZE) @@ -78,7 +78,7 @@ def processAlgorithm(self, progress): # then we ground classify the reversible tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileClassify*.laz") airborne = self.getParameterValue(hugeFileClassify.AIRBORNE) @@ -100,7 +100,7 @@ def processAlgorithm(self, progress): # then we compute the height for each points in the reversible tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileClassify*_g.laz") self.addParametersTemporaryDirectoryAsOutputDirectoryCommands(commands) @@ -113,7 +113,7 @@ def processAlgorithm(self, progress): # then we classify buildings and trees in the reversible tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasclassify.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasclassify")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileClassify*_gh.laz") self.addParametersTemporaryDirectoryAsOutputDirectoryCommands(commands) @@ -126,7 +126,7 @@ def processAlgorithm(self, progress): # then we reverse the tiling - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileClassify*_ghc.laz") commands.append("-reverse_tiling") diff --git a/python/plugins/processing/algs/lidar/lastools/hugeFileGroundClassify.py b/python/plugins/processing/algs/lidar/lastools/hugeFileGroundClassify.py index aa3533f521e8..9cfd2bd7b561 100644 --- a/python/plugins/processing/algs/lidar/lastools/hugeFileGroundClassify.py +++ b/python/plugins/processing/algs/lidar/lastools/hugeFileGroundClassify.py @@ -59,7 +59,7 @@ def processAlgorithm(self, progress): # first we tile the data with option '-reversible' - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) tile_size = self.getParameterValue(hugeFileGroundClassify.TILE_SIZE) @@ -78,7 +78,7 @@ def processAlgorithm(self, progress): # then we ground classify the reversible tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileGroundClassify*.laz") airborne = self.getParameterValue(hugeFileGroundClassify.AIRBORNE) @@ -100,7 +100,7 @@ def processAlgorithm(self, progress): # then we reverse the tiling - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileGroundClassify*_g.laz") commands.append("-reverse_tiling") diff --git a/python/plugins/processing/algs/lidar/lastools/hugeFileNormalize.py b/python/plugins/processing/algs/lidar/lastools/hugeFileNormalize.py index a76cb148e165..3226d720cc6c 100644 --- a/python/plugins/processing/algs/lidar/lastools/hugeFileNormalize.py +++ b/python/plugins/processing/algs/lidar/lastools/hugeFileNormalize.py @@ -59,7 +59,7 @@ def processAlgorithm(self, progress): # first we tile the data with option '-reversible' - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) tile_size = self.getParameterValue(hugeFileNormalize.TILE_SIZE) @@ -78,7 +78,7 @@ def processAlgorithm(self, progress): # then we ground classify the reversible tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileNormalize*.laz") airborne = self.getParameterValue(hugeFileNormalize.AIRBORNE) @@ -100,7 +100,7 @@ def processAlgorithm(self, progress): # then we height-normalize each points in the reversible tiles - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileNormalize*_g.laz") self.addParametersTemporaryDirectoryAsOutputDirectoryCommands(commands) @@ -114,7 +114,7 @@ def processAlgorithm(self, progress): # then we reverse the tiling - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersTemporaryDirectoryAsInputFilesCommands(commands, "hugeFileNormalize*_gh.laz") commands.append("-reverse_tiling") diff --git a/python/plugins/processing/algs/lidar/lastools/las2dem.py b/python/plugins/processing/algs/lidar/lastools/las2dem.py index 7dc18d6de249..7ae93dd9bcee 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2dem.py +++ b/python/plugins/processing/algs/lidar/lastools/las2dem.py @@ -33,6 +33,7 @@ from LAStoolsAlgorithm import LAStoolsAlgorithm from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean class las2dem(LAStoolsAlgorithm): @@ -40,7 +41,7 @@ class las2dem(LAStoolsAlgorithm): PRODUCT = "PRODUCT" ATTRIBUTES = ["elevation", "slope", "intensity", "rgb", "edge_longest", "edge_shortest"] PRODUCTS = ["actual values", "hillshade", "gray", "false"] - + USE_TILE_BB = "USE_TILE_BB" def defineCharacteristics(self): self.name = "las2dem" @@ -51,10 +52,12 @@ def defineCharacteristics(self): self.addParametersStepGUI() self.addParameter(ParameterSelection(las2dem.ATTRIBUTE, "Attribute", las2dem.ATTRIBUTES, 0)) self.addParameter(ParameterSelection(las2dem.PRODUCT, "Product", las2dem.PRODUCTS, 0)) + self.addParameter(ParameterBoolean(las2dem.USE_TILE_BB, "use tile bounding box (after tiling with buffer)", False)) self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) @@ -65,6 +68,9 @@ def processAlgorithm(self, progress): product = self.getParameterValue(las2dem.PRODUCT) if product != 0: commands.append("-" + las2dem.PRODUCTS[product]) + if (self.getParameterValue(las2dem.USE_TILE_BB)): + commands.append("-use_tile_bb") self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2demPro.py b/python/plugins/processing/algs/lidar/lastools/las2demPro.py index 766b5ff59c9c..e1f0c4e6c453 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2demPro.py +++ b/python/plugins/processing/algs/lidar/lastools/las2demPro.py @@ -33,6 +33,7 @@ from LAStoolsAlgorithm import LAStoolsAlgorithm from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean class las2demPro(LAStoolsAlgorithm): @@ -40,7 +41,7 @@ class las2demPro(LAStoolsAlgorithm): PRODUCT = "PRODUCT" ATTRIBUTES = ["elevation", "slope", "intensity", "rgb", "edge_longest", "edge_shortest"] PRODUCTS = ["actual values", "hillshade", "gray", "false"] - + USE_TILE_BB = "USE_TILE_BB" def defineCharacteristics(self): self.name = "las2demPro" @@ -50,6 +51,7 @@ def defineCharacteristics(self): self.addParametersStepGUI() self.addParameter(ParameterSelection(las2demPro.ATTRIBUTE, "attribute (what to interpolate)", las2demPro.ATTRIBUTES, 0)) self.addParameter(ParameterSelection(las2demPro.PRODUCT, "product (how to output per pixel)", las2demPro.PRODUCTS, 0)) + self.addParameter(ParameterBoolean(las2demPro.USE_TILE_BB, "use tile bounding box (after tiling with buffer)", False)) self.addParametersOutputDirectoryGUI() self.addParametersOutputAppendixGUI() self.addParametersRasterOutputFormatGUI() @@ -58,7 +60,7 @@ def defineCharacteristics(self): self.addParametersVerboseGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2dem")] self.addParametersVerboseCommands(commands) self.addParametersPointInputFolderCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) @@ -69,9 +71,11 @@ def processAlgorithm(self, progress): product = self.getParameterValue(las2demPro.PRODUCT) if product != 0: commands.append("-" + las2demPro.PRODUCTS[product]) + if (self.getParameterValue(las2demPro.USE_TILE_BB)): + commands.append("-use_tile_bb") self.addParametersOutputDirectoryCommands(commands) self.addParametersOutputAppendixCommands(commands) - self.addParametersPointOutputFormatCommands(commands) + self.addParametersRasterOutputFormatCommands(commands) self.addParametersAdditionalCommands(commands) self.addParametersCoresCommands(commands) diff --git a/python/plugins/processing/algs/lidar/lastools/las2iso.py b/python/plugins/processing/algs/lidar/lastools/las2iso.py index b207f4d9bd47..33397c8bf56f 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2iso.py +++ b/python/plugins/processing/algs/lidar/lastools/las2iso.py @@ -52,9 +52,10 @@ def defineCharacteristics(self): self.addParameter(ParameterNumber(las2iso.SIMPLIFY_LENGTH, "simplify segments shorter than (0 = do not simplify)", None, None, 0.0)) self.addParameter(ParameterNumber(las2iso.SIMPLIFY_AREA, "simplify segments pairs with area less than (0 = do not simplify)", None, None, 0.0)) self.addParametersVectorOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2iso.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2iso")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) smooth = self.getParameterValue(las2iso.SMOOTH) @@ -76,5 +77,6 @@ def processAlgorithm(self, progress): commands.append("-clean") commands.append(str(clean)) self.addParametersVectorOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2las.py b/python/plugins/processing/algs/lidar/lastools/las2lasPro_filter.py similarity index 54% rename from python/plugins/processing/algs/lidar/lastools/las2las.py rename to python/plugins/processing/algs/lidar/lastools/las2lasPro_filter.py index 3a551266b454..8600593173d4 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2las.py +++ b/python/plugins/processing/algs/lidar/lastools/las2lasPro_filter.py @@ -2,10 +2,10 @@ """ *************************************************************************** - las2las.py + las2lasPro_filter.py --------------------- - Date : September 2013 - Copyright : (C) 2013 by Martin Isenburg + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg Email : martin near rapidlasso point com *************************************************************************** * * @@ -18,8 +18,8 @@ """ __author__ = 'Martin Isenburg' -__date__ = 'September 2013' -__copyright__ = '(C) 2013, Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' # This will get replaced with a git SHA1 when you do a git archive __revision__ = '$Format:%H$' @@ -27,43 +27,26 @@ from LAStoolsUtils import LAStoolsUtils from LAStoolsAlgorithm import LAStoolsAlgorithm -from processing.core.parameters import ParameterString -from processing.core.parameters import ParameterSelection - -class las2las(LAStoolsAlgorithm): - - STEP = "STEP" - OPERATION = "OPERATION" - OPERATIONS = ["---", "set_point_type", "set_point_size", "set_version_minor", "set_version_major", - "start_at_point", "stop_at_point", "remove_vlr", "auto_reoffset", "week_to_adjusted", - "adjusted_to_week", "scale_rgb_up", "scale_rgb_down", "remove_all_vlrs", "remove_extra", - "clip_to_bounding_box"] - OPERATIONARG = "OPERATIONARG" +class las2lasPro_filter(LAStoolsAlgorithm): def defineCharacteristics(self): - self.name = "las2las" - self.group = "LAStools" - self.addParametersVerboseGUI() - self.addParametersPointInputGUI() + self.name = "las2lasPro_filter" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() self.addParametersFilter1ReturnClassFlagsGUI() + self.addParametersFilter2ReturnClassFlagsGUI() self.addParametersFilter1CoordsIntensityGUI() - self.addParameter(ParameterSelection(las2las.OPERATION, "operations (first 7 need an argument)", las2las.OPERATIONS, 0)) - self.addParameter(ParameterString(las2las.OPERATIONARG, "argument for operation")) + self.addParametersFilter2CoordsIntensityGUI() self.addParametersPointOutputGUI() - def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) + self.addParametersFilter2ReturnClassFlagsCommands(commands) self.addParametersFilter1CoordsIntensityCommands(commands) - operation = self.getParameterValue(las2las.OPERATION) - if operation != 0: - commands.append("-" + OPERATIONS[operation]) - if operation > 7: - commands.append(self.getParameterValue(las2las.OPERATIONARG)) - + self.addParametersFilter2CoordsIntensityCommands(commands) self.addParametersPointOutputCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2lasPro_project.py b/python/plugins/processing/algs/lidar/lastools/las2lasPro_project.py new file mode 100644 index 000000000000..2c57d7bf0d6a --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/las2lasPro_project.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + las2lasPro_project.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterNumber +from processing.core.parameters import ParameterString +from processing.core.parameters import ParameterSelection + +class las2lasPro_project(LAStoolsAlgorithm): + + STATE_PLANES = ["---", "AK_10", "AK_2", "AK_3", "AK_4", "AK_5", "AK_6", "AK_7", "AK_8", "AK_9", "AL_E", "AL_W", "AR_N", "AR_S", "AZ_C", "AZ_E", "AZ_W", "CA_I", "CA_II", "CA_III", "CA_IV", "CA_V", "CA_VI", "CA_VII", "CO_C", "CO_N", "CO_S", "CT", "DE", "FL_E", "FL_N", "FL_W", "GA_E", "GA_W", "HI_1", "HI_2", "HI_3", "HI_4", "HI_5", "IA_N", "IA_S", "ID_C", "ID_E", "ID_W", "IL_E", "IL_W", "IN_E", "IN_W", "KS_N", "KS_S", "KY_N", "KY_S", "LA_N", "LA_S", "MA_I", "MA_M", "MD", "ME_E", "ME_W", "MI_C", "MI_N", "MI_S", "MN_C", "MN_N", "MN_S", "MO_C", "MO_E", "MO_W", "MS_E", "MS_W", "MT_C", "MT_N", "MT_S", "NC", "ND_N", "ND_S", "NE_N", "NE_S", "NH", "NJ", "NM_C", "NM_E", "NM_W", "NV_C", "NV_E", "NV_W", "NY_C", "NY_E", "NY_LI", "NY_W", "OH_N", "OH_S", "OK_N", "OK_S", "OR_N", "OR_S", "PA_N", "PA_S", "PR", "RI", "SC_N", "SC_S", "SD_N", "SD_S", "St.Croix", "TN", "TX_C", "TX_N", "TX_NC", "TX_S", "TX_SC", "UT_C", "UT_N", "UT_S", "VA_N", "VA_S", "VT", "WA_N", "WA_S", "WI_C", "WI_N", "WI_S", "WV_N", "WV_S", "WY_E", "WY_EC", "WY_W", "WY_WC"] + + UTM_ZONES = ["---", "1 (north)", "2 (north)", "3 (north)", "4 (north)", "5 (north)", "6 (north)", "7 (north)", "8 (north)", "9 (north)", "10 (north)", "11 (north)", "12 (north)", "13 (north)", "14 (north)", "15 (north)", "16 (north)", "17 (north)", "18 (north)", "19 (north)", "20 (north)", "21 (north)", "22 (north)", "23 (north)", "24 (north)", "25 (north)", "26 (north)", "27 (north)", "28 (north)", "29 (north)", "30 (north)", "31 (north)", "32 (north)", "33 (north)", "34 (north)", "35 (north)", "36 (north)", "37 (north)", "38 (north)", "39 (north)", "40 (north)", "41 (north)", "42 (north)", "43 (north)", "44 (north)", "45 (north)", "46 (north)", "47 (north)", "48 (north)", "49 (north)", "50 (north)", "51 (north)", "52 (north)", "53 (north)", "54 (north)", "55 (north)", "56 (north)", "57 (north)", "58 (north)", "59 (north)", "60 (north)", "1 (south)", "2 (south)", "3 (south)", "4 (south)", "5 (south)", "6 (south)", "7 (south)", "8 (south)", "9 (south)", "10 (south)", "11 (south)", "12 (south)", "13 (south)", "14 (south)", "15 (south)", "16 (south)", "17 (south)", "18 (south)", "19 (south)", "20 (south)", "21 (south)", "22 (south)", "23 (south)", "24 (south)", "25 (south)", "26 (south)", "27 (south)", "28 (south)", "29 (south)", "30 (south)", "31 (south)", "32 (south)", "33 (south)", "34 (south)", "35 (south)", "36 (south)", "37 (south)", "38 (south)", "39 (south)", "40 (south)", "41 (south)", "42 (south)", "43 (south)", "44 (south)", "45 (south)", "46 (south)", "47 (south)", "48 (south)", "49 (south)", "50 (south)", "51 (south)", "52 (south)", "53 (south)", "54 (south)", "55 (south)", "56 (south)", "57 (south)", "58 (south)", "59 (south)", "60 (south)"] + + PROJECTIONS = ["---", "utm", "sp83", "sp27", "longlat", "latlong", "ecef"] + + SOURCE_PROJECTION = "SOURCE_PROJECTION" + SOURCE_UTM = "SOURCE_UTM" + SOURCE_SP = "SOURCE_SP" + + TARGET_PROJECTION = "TARGET_PROJECTION" + TARGET_UTM = "TARGET_UTM" + TARGET_SP = "TARGET_SP" + + def defineCharacteristics(self): + self.name = "las2lasPro_project" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterSelection(las2lasPro_project.SOURCE_PROJECTION, "source projection", las2lasPro_project.PROJECTIONS, 0)) + self.addParameter(ParameterSelection(las2lasPro_project.SOURCE_UTM, "source utm zone", las2lasPro_project.UTM_ZONES, 0)) + self.addParameter(ParameterSelection(las2lasPro_project.SOURCE_SP, "source state plane code", las2lasPro_project.STATE_PLANES, 0)) + self.addParameter(ParameterSelection(las2lasPro_project.TARGET_PROJECTION, "target projection", las2lasPro_project.PROJECTIONS, 0)) + self.addParameter(ParameterSelection(las2lasPro_project.TARGET_UTM, "target utm zone", las2lasPro_project.UTM_ZONES, 0)) + self.addParameter(ParameterSelection(las2lasPro_project.TARGET_SP, "target state plane code", las2lasPro_project.STATE_PLANES, 0)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + source_projection = self.getParameterValue(las2lasPro_project.SOURCE_PROJECTION) + if source_projection != 0: + if source_projection == 1: + source_utm_zone = self.getParameterValue(las2lasPro_project.SOURCE_UTM) + if source_utm_zone != 0: + commands.append("-" + las2lasPro_project.PROJECTIONS[source_projection]) + if source_utm_zone > 60: + commands.append(str(source_utm_zone - 60) + "M") + else: + commands.append(str(source_utm_zone) + "N") + elif source_projection < 4: + source_sp_code = self.getParameterValue(las2lasPro_project.SOURCE_SP) + if source_sp_code != 0: + commands.append("-" + las2lasPro_project.PROJECTIONS[source_projection]) + commands.append(las2lasPro_project.STATE_PLANES[source_sp_code]) + else: + commands.append("-" + las2lasPro_project.PROJECTIONS[source_projection]) + target_projection = self.getParameterValue(las2lasPro_project.TARGET_PROJECTION) + if target_projection != 0: + if target_projection == 1: + target_utm_zone = self.getParameterValue(las2lasPro_project.TARGET_UTM) + if target_utm_zone != 0: + commands.append("-target_" + las2lasPro_project.PROJECTIONS[target_projection]) + if target_utm_zone > 60: + commands.append(str(target_utm_zone - 60) + "M") + else: + commands.append(str(target_utm_zone) + "N") + elif target_projection < 4: + target_sp_code = self.getParameterValue(las2lasPro_project.TARGET_SP) + if target_sp_code != 0: + commands.append("-target_" + las2lasPro_project.PROJECTIONS[target_projection]) + commands.append(las2lasPro_project.STATE_PLANES[target_sp_code]) + else: + commands.append("-target_" + las2lasPro_project.PROJECTIONS[target_projection]) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2lasPro_transform.py b/python/plugins/processing/algs/lidar/lastools/las2lasPro_transform.py new file mode 100644 index 000000000000..117def764775 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/las2lasPro_transform.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + las2lasPro_transform.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterString +from processing.core.parameters import ParameterSelection + +class las2lasPro_transform(LAStoolsAlgorithm): + + OPERATION = "OPERATION" + OPERATIONS = ["---", "set_point_type", "set_point_size", "set_version_minor", "set_version_major", "start_at_point", "stop_at_point", "remove_vlr", "week_to_adjusted", "adjusted_to_week", "auto_reoffset", "scale_rgb_up", "scale_rgb_down", "remove_all_vlrs", "remove_extra", "clip_to_bounding_box"] + OPERATIONARG = "OPERATIONARG" + + def defineCharacteristics(self): + self.name = "las2lasPro_transform" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersTransform1CoordinateGUI() + self.addParametersTransform2CoordinateGUI() + self.addParametersTransform1OtherGUI() + self.addParametersTransform2OtherGUI() + self.addParameter(ParameterSelection(las2lasPro_transform.OPERATION, "operations (first 8 need an argument)", las2lasPro_transform.OPERATIONS, 0)) + self.addParameter(ParameterString(las2lasPro_transform.OPERATIONARG, "argument for operation")) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersTransform1CoordinateCommands(commands) + self.addParametersTransform2CoordinateCommands(commands) + self.addParametersTransform1OtherCommands(commands) + self.addParametersTransform2OtherCommands(commands) + operation = self.getParameterValue(las2lasPro_transform.OPERATION) + if operation != 0: + commands.append("-" + las2lasPro_transform.OPERATIONS[operation]) + if operation > 8: + commands.append(self.getParameterValue(las2lasPro_transform.OPERATIONARG)) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2las_filter.py b/python/plugins/processing/algs/lidar/lastools/las2las_filter.py index b140117c9aa1..14f5199cb9c3 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2las_filter.py +++ b/python/plugins/processing/algs/lidar/lastools/las2las_filter.py @@ -40,17 +40,18 @@ def defineCharacteristics(self): self.addParametersFilter1CoordsIntensityGUI() self.addParametersFilter2CoordsIntensityGUI() self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) self.addParametersFilter2ReturnClassFlagsCommands(commands) self.addParametersFilter1CoordsIntensityCommands(commands) self.addParametersFilter2CoordsIntensityCommands(commands) - self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2las_project.py b/python/plugins/processing/algs/lidar/lastools/las2las_project.py index a6dcfe58c4d2..099b891ed0d0 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2las_project.py +++ b/python/plugins/processing/algs/lidar/lastools/las2las_project.py @@ -38,7 +38,7 @@ class las2las_project(LAStoolsAlgorithm): UTM_ZONES = ["---", "1 (north)", "2 (north)", "3 (north)", "4 (north)", "5 (north)", "6 (north)", "7 (north)", "8 (north)", "9 (north)", "10 (north)", "11 (north)", "12 (north)", "13 (north)", "14 (north)", "15 (north)", "16 (north)", "17 (north)", "18 (north)", "19 (north)", "20 (north)", "21 (north)", "22 (north)", "23 (north)", "24 (north)", "25 (north)", "26 (north)", "27 (north)", "28 (north)", "29 (north)", "30 (north)", "31 (north)", "32 (north)", "33 (north)", "34 (north)", "35 (north)", "36 (north)", "37 (north)", "38 (north)", "39 (north)", "40 (north)", "41 (north)", "42 (north)", "43 (north)", "44 (north)", "45 (north)", "46 (north)", "47 (north)", "48 (north)", "49 (north)", "50 (north)", "51 (north)", "52 (north)", "53 (north)", "54 (north)", "55 (north)", "56 (north)", "57 (north)", "58 (north)", "59 (north)", "60 (north)", "1 (south)", "2 (south)", "3 (south)", "4 (south)", "5 (south)", "6 (south)", "7 (south)", "8 (south)", "9 (south)", "10 (south)", "11 (south)", "12 (south)", "13 (south)", "14 (south)", "15 (south)", "16 (south)", "17 (south)", "18 (south)", "19 (south)", "20 (south)", "21 (south)", "22 (south)", "23 (south)", "24 (south)", "25 (south)", "26 (south)", "27 (south)", "28 (south)", "29 (south)", "30 (south)", "31 (south)", "32 (south)", "33 (south)", "34 (south)", "35 (south)", "36 (south)", "37 (south)", "38 (south)", "39 (south)", "40 (south)", "41 (south)", "42 (south)", "43 (south)", "44 (south)", "45 (south)", "46 (south)", "47 (south)", "48 (south)", "49 (south)", "50 (south)", "51 (south)", "52 (south)", "53 (south)", "54 (south)", "55 (south)", "56 (south)", "57 (south)", "58 (south)", "59 (south)", "60 (south)"] - PROJECTIONS = ["---", "utm", "sp83", "sp27", "longlat", "latlong"] + PROJECTIONS = ["---", "utm", "sp83", "sp27", "longlat", "latlong", "ecef"] SOURCE_PROJECTION = "SOURCE_PROJECTION" SOURCE_UTM = "SOURCE_UTM" @@ -60,10 +60,11 @@ def defineCharacteristics(self): self.addParameter(ParameterSelection(las2las_project.TARGET_UTM, "target utm zone", las2las_project.UTM_ZONES, 0)) self.addParameter(ParameterSelection(las2las_project.TARGET_SP, "target state plane code", las2las_project.STATE_PLANES, 0)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) source_projection = self.getParameterValue(las2las_project.SOURCE_PROJECTION) @@ -73,9 +74,9 @@ def processAlgorithm(self, progress): if source_utm_zone != 0: commands.append("-" + las2las_project.PROJECTIONS[source_projection]) if source_utm_zone > 60: - commands.append(str(source_utm_zone - 1) + "N") + commands.append(str(source_utm_zone - 60) + "M") else: - commands.append(str(source_utm_zone - 1) + "K") + commands.append(str(source_utm_zone) + "N") elif source_projection < 4: source_sp_code = self.getParameterValue(las2las_project.SOURCE_SP) if source_sp_code != 0: @@ -90,9 +91,9 @@ def processAlgorithm(self, progress): if target_utm_zone != 0: commands.append("-target_" + las2las_project.PROJECTIONS[target_projection]) if target_utm_zone > 60: - commands.append(str(target_utm_zone - 1) + "N") + commands.append(str(target_utm_zone - 60) + "M") else: - commands.append(str(target_utm_zone - 1) + "K") + commands.append(str(target_utm_zone) + "N") elif target_projection < 4: target_sp_code = self.getParameterValue(las2las_project.TARGET_SP) if target_sp_code != 0: @@ -101,5 +102,6 @@ def processAlgorithm(self, progress): else: commands.append("-target_" + las2las_project.PROJECTIONS[target_projection]) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2las_transform.py b/python/plugins/processing/algs/lidar/lastools/las2las_transform.py index d48cdaa0fb3b..a1780f048698 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2las_transform.py +++ b/python/plugins/processing/algs/lidar/lastools/las2las_transform.py @@ -33,7 +33,7 @@ class las2las_transform(LAStoolsAlgorithm): OPERATION = "OPERATION" - OPERATIONS = ["---", "set_point_type", "set_point_size", "set_version_minor", "set_version_major", "start_at_point", "stop_at_point", "remove_vlr", "auto_reoffset", "week_to_adjusted", "adjusted_to_week", "scale_rgb_up", "scale_rgb_down", "remove_all_vlrs", "remove_extra", "clip_to_bounding_box"] + OPERATIONS = ["---", "set_point_type", "set_point_size", "set_version_minor", "set_version_major", "start_at_point", "stop_at_point", "remove_vlr", "week_to_adjusted", "adjusted_to_week", "auto_reoffset", "scale_rgb_up", "scale_rgb_down", "remove_all_vlrs", "remove_extra", "clip_to_bounding_box"] OPERATIONARG = "OPERATIONARG" def defineCharacteristics(self): @@ -45,13 +45,14 @@ def defineCharacteristics(self): self.addParametersTransform2CoordinateGUI() self.addParametersTransform1OtherGUI() self.addParametersTransform2OtherGUI() - self.addParameter(ParameterSelection(las2las_transform.OPERATION, "operations (first 7 need an argument)", las2las_transform.OPERATIONS, 0)) + self.addParameter(ParameterSelection(las2las_transform.OPERATION, "operations (first 8 need an argument)", las2las_transform.OPERATIONS, 0)) self.addParameter(ParameterString(las2las_transform.OPERATIONARG, "argument for operation")) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2las")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersTransform1CoordinateCommands(commands) @@ -61,9 +62,9 @@ def processAlgorithm(self, progress): operation = self.getParameterValue(las2las_transform.OPERATION) if operation != 0: commands.append("-" + las2las_transform.OPERATIONS[operation]) - if operation > 7: + if operation > 8: commands.append(self.getParameterValue(las2las_transform.OPERATIONARG)) - self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2shp.py b/python/plugins/processing/algs/lidar/lastools/las2shp.py index 436a03080051..caca1f0a81a8 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2shp.py +++ b/python/plugins/processing/algs/lidar/lastools/las2shp.py @@ -45,9 +45,10 @@ def defineCharacteristics(self): self.addParameter(ParameterBoolean(las2shp.POINT_Z, "use PointZ instead of MultiPointZ", False)) self.addParameter(ParameterNumber(las2shp.RECORD_SIZE, "number of points per record", 0, None, 1024)) self.addOutput(OutputFile(las2shp.OUTPUT, "Output SHP file")) + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2shp.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2shp")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) if self.getParameterValue(las2shp.POINT_Z): @@ -58,5 +59,6 @@ def processAlgorithm(self, progress): commands.append(str(record_size)) commands.append("-o") commands.append(self.getOutputValue(las2shp.OUTPUT)) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2tin.py b/python/plugins/processing/algs/lidar/lastools/las2tin.py index 1066dc79fc77..2277baac1cad 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2tin.py +++ b/python/plugins/processing/algs/lidar/lastools/las2tin.py @@ -42,12 +42,14 @@ def defineCharacteristics(self): self.addParametersPointInputGUI() self.addParametersFilter1ReturnClassFlagsGUI() self.addParametersVectorOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2tin.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2tin")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) self.addParametersVectorOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2txt.py b/python/plugins/processing/algs/lidar/lastools/las2txt.py index 535a98bbb7ce..1c7db4661089 100644 --- a/python/plugins/processing/algs/lidar/lastools/las2txt.py +++ b/python/plugins/processing/algs/lidar/lastools/las2txt.py @@ -32,7 +32,7 @@ class las2txt(LAStoolsAlgorithm): - PARSE_STRING = "PARSE_STRING" + PARSE = "PARSE" OUTPUT = "OUTPUT" def defineCharacteristics(self): @@ -40,18 +40,20 @@ def defineCharacteristics(self): self.group = "LAStools" self.addParametersVerboseGUI() self.addParametersPointInputGUI() - self.addParameter(ParameterString(las2txt.PARSE_STRING, "parse_string", "xyz")) + self.addParameter(ParameterString(las2txt.PARSE, "parse string", "xyz")) self.addOutput(OutputFile(las2txt.OUTPUT, "Output ASCII file")) + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2txt.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2txt")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) - parse_string = self.getParameterValue(las2txt.PARSE_STRING) - if parse_string != "xyz": - commands.append("-parse_string") - commands.append(parse_string) + parse = self.getParameterValue(las2txt.PARSE) + if parse != "xyz": + commands.append("-parse") + commands.append(parse) commands.append("-o") commands.append(self.getOutputValue(las2txt.OUTPUT)) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/las2txtPro.py b/python/plugins/processing/algs/lidar/lastools/las2txtPro.py new file mode 100644 index 000000000000..ceddd2a6655b --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/las2txtPro.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + las2txtPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterString + +class las2txtPro(LAStoolsAlgorithm): + + PARSE = "PARSE" + + def defineCharacteristics(self): + self.name = "las2txtPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterString(las2txtPro.PARSE, "parse string", "xyz")) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "las2txt")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + parse = self.getParameterValue(las2txtPro.PARSE) + if parse != "xyz": + commands.append("-parse") + commands.append(parse) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + commands.append("-otxt") + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasboundary.py b/python/plugins/processing/algs/lidar/lastools/lasboundary.py index 2391d2205ae7..6e8fffa48668 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasboundary.py +++ b/python/plugins/processing/algs/lidar/lastools/lasboundary.py @@ -28,15 +28,17 @@ __revision__ = '$Format:%H$' import os -from PyQt4 import QtGui from LAStoolsUtils import LAStoolsUtils from LAStoolsAlgorithm import LAStoolsAlgorithm +from processing.core.parameters import ParameterSelection from processing.core.parameters import ParameterBoolean from processing.core.parameters import ParameterNumber class lasboundary(LAStoolsAlgorithm): + MODE = "MODE" + MODES = ["points", "spatial index (the *.lax file)", "bounding box"] CONCAVITY = "CONCAVITY" DISJOINT = "DISJOINT" HOLES = "HOLES" @@ -47,23 +49,33 @@ def defineCharacteristics(self): self.addParametersVerboseGUI() self.addParametersPointInputGUI() self.addParametersFilter1ReturnClassFlagsGUI() + self.addParameter(ParameterSelection(lasboundary.MODE, "compute boundary based on", lasboundary.MODES, 0)) self.addParameter(ParameterNumber(lasboundary.CONCAVITY, "concavity", 0, None, 50.0)) self.addParameter(ParameterBoolean(lasboundary.HOLES, "interior holes", False)) self.addParameter(ParameterBoolean(lasboundary.DISJOINT, "disjoint polygon", False)) self.addParametersVectorOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasboundary.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasboundary")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) - concavity = self.getParameterValue(lasboundary.CONCAVITY) - commands.append("-concavity") - commands.append(str(concavity)) - if self.getParameterValue(lasboundary.HOLES): - commands.append("-holes") - if self.getParameterValue(lasboundary.DISJOINT): - commands.append("-disjoint") + mode = self.getParameterValue(lasboundary.MODE) + if (mode != 0): + if (mode == 1): + commands.append("-use_lax") + else: + commands.append("-use_bb") + else: + concavity = self.getParameterValue(lasboundary.CONCAVITY) + commands.append("-concavity") + commands.append(str(concavity)) + if self.getParameterValue(lasboundary.HOLES): + commands.append("-holes") + if self.getParameterValue(lasboundary.DISJOINT): + commands.append("-disjoint") self.addParametersVectorOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasboundaryPro.py b/python/plugins/processing/algs/lidar/lastools/lasboundaryPro.py new file mode 100644 index 000000000000..ef55b438711c --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasboundaryPro.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasboundaryPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean +from processing.core.parameters import ParameterNumber + +class lasboundaryPro(LAStoolsAlgorithm): + + MODE = "MODE" + MODES = ["points", "spatial index (the *.lax file)", "bounding box"] + CONCAVITY = "CONCAVITY" + DISJOINT = "DISJOINT" + HOLES = "HOLES" + + def defineCharacteristics(self): + self.name = "lasboundaryPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersFilter1ReturnClassFlagsGUI() + self.addParameter(ParameterSelection(lasboundaryPro.MODE, "compute boundary based on", lasboundaryPro.MODES, 0)) + self.addParameter(ParameterNumber(lasboundaryPro.CONCAVITY, "concavity", 0, None, 50.0)) + self.addParameter(ParameterBoolean(lasboundaryPro.HOLES, "interior holes", False)) + self.addParameter(ParameterBoolean(lasboundaryPro.DISJOINT, "disjoint polygon", False)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersVectorOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasboundary")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersFilter1ReturnClassFlagsCommands(commands) + mode = self.getParameterValue(lasboundaryPro.MODE) + if (mode != 0): + if (mode == 1): + commands.append("-use_lax") + else: + commands.append("-use_bb") + else: + concavity = self.getParameterValue(lasboundaryPro.CONCAVITY) + commands.append("-concavity") + commands.append(str(concavity)) + if self.getParameterValue(lasboundaryPro.HOLES): + commands.append("-holes") + if self.getParameterValue(lasboundaryPro.DISJOINT): + commands.append("-disjoint") + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersVectorOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lascanopy.py b/python/plugins/processing/algs/lidar/lastools/lascanopy.py index 2fd0265fb06e..35e1948f352a 100644 --- a/python/plugins/processing/algs/lidar/lastools/lascanopy.py +++ b/python/plugins/processing/algs/lidar/lastools/lascanopy.py @@ -34,6 +34,7 @@ class lascanopy(LAStoolsAlgorithm): + PLOT_SIZE = "PLOT_SIZE" HEIGHT_CUTOFF = "HEIGHT_CUTOFF" ATTRIBUTE = "ATTRIBUTE" PRODUCT1 = "PRODUCT1" @@ -45,18 +46,21 @@ class lascanopy(LAStoolsAlgorithm): PRODUCT7 = "PRODUCT7" PRODUCT8 = "PRODUCT8" PRODUCT9 = "PRODUCT9" - PRODUCTS = ["---", "min", "max", "avg", "std", "ske", "kur", "cov", "dns", - "p01", "p05", "p10", "p25", "p50", "p75", "p90", "p99"] + PRODUCTS = ["---", "min", "max", "avg", "std", "ske", "kur", "qav", "cov", "dns", "all", + "p 1", "p 5", "p 10", "p 25", "p 50", "p 75", "p 90", "p 99", + "int_min", "int_max", "int_avg", "int_std", "int_ske", "int_kur", + "int_p 1", "int_p 5", "int_p 10", "int_p 25", "int_p 50", "int_p 75", "int_p 90", "int_p 99"] COUNTS = "COUNTS" DENSITIES = "DENSITIES" USE_TILE_BB = "USE_TILE_BB" + FILES_ARE_PLOTS = "FILES_ARE_PLOTS" def defineCharacteristics(self): self.name = "lascanopy" self.group = "LAStools" self.addParametersVerboseGUI() self.addParametersPointInputGUI() - self.addParametersStepGUI() + self.addParameter(ParameterNumber(lascanopy.PLOT_SIZE, "square plot size", 0, None, 20)) self.addParameter(ParameterNumber(lascanopy.HEIGHT_CUTOFF, "height cutoff / breast height", 0, None, 1.37)) self.addParameter(ParameterSelection(lascanopy.PRODUCT1, "create", lascanopy.PRODUCTS, 0)) self.addParameter(ParameterSelection(lascanopy.PRODUCT2, "create", lascanopy.PRODUCTS, 0)) @@ -70,13 +74,22 @@ def defineCharacteristics(self): self.addParameter(ParameterString(lascanopy.COUNTS, "count rasters (e.g. 2.0 5.0 10.0 20.0)", "")) self.addParameter(ParameterString(lascanopy.DENSITIES, "density rasters (e.g. 2.0 5.0 10.0 20.0)", "")) self.addParameter(ParameterBoolean(lascanopy.USE_TILE_BB, "use tile bounding box (after tiling with buffer)", False)) + self.addParameter(ParameterBoolean(lascanopy.FILES_ARE_PLOTS, "input file is single plot", False)) self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lascanopy.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lascanopy")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) - self.addParametersStepCommands(commands) + plot_size = self.getParameterValue(lascanopy.PLOT_SIZE) + if plot_size != 20: + commands.append("-step") + commands.append(str(plot_size)) + height_cutoff = self.getParameterValue(lascanopy.HEIGHT_CUTOFF) + if height_cutoff != 1.37: + commands.append("-height_cutoff") + commands.append(str(height_cutoff)) product = self.getParameterValue(lascanopy.PRODUCT1) if product != 0: commands.append("-" + lascanopy.PRODUCTS[product]) @@ -104,6 +117,21 @@ def processAlgorithm(self, progress): product = self.getParameterValue(lascanopy.PRODUCT9) if product != 0: commands.append("-" + lascanopy.PRODUCTS[product]) + array = self.getParameterValue(lascanopy.COUNTS).split() + if (len(array) > 1): + commands.append("-c") + for a in array: + commands.append(a) + array = self.getParameterValue(lascanopy.DENSITIES).split() + if (len(array) > 1): + commands.append("-d") + for a in array: + commands.append(a) + if (self.getParameterValue(lascanopy.USE_TILE_BB)): + commands.append("-use_tile_bb") + if (self.getParameterValue(lascanopy.FILES_ARE_PLOTS)): + commands.append("-files_are_plots") self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lascanopyPro.py b/python/plugins/processing/algs/lidar/lastools/lascanopyPro.py new file mode 100644 index 000000000000..6108f6f87cde --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lascanopyPro.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lascanopyPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean +from processing.core.parameters import ParameterNumber +from processing.core.parameters import ParameterString +from processing.core.parameters import ParameterSelection + +class lascanopyPro(LAStoolsAlgorithm): + + PLOT_SIZE = "PLOT_SIZE" + HEIGHT_CUTOFF = "HEIGHT_CUTOFF" + ATTRIBUTE = "ATTRIBUTE" + PRODUCT1 = "PRODUCT1" + PRODUCT2 = "PRODUCT2" + PRODUCT3 = "PRODUCT3" + PRODUCT4 = "PRODUCT4" + PRODUCT5 = "PRODUCT5" + PRODUCT6 = "PRODUCT6" + PRODUCT7 = "PRODUCT7" + PRODUCT8 = "PRODUCT8" + PRODUCT9 = "PRODUCT9" + PRODUCTS = ["---", "min", "max", "avg", "std", "ske", "kur", "qav", "cov", "dns", "all", + "p 1", "p 5", "p 10", "p 25", "p 50", "p 75", "p 90", "p 99", + "int_min", "int_max", "int_avg", "int_std", "int_ske", "int_kur", + "int_p 1", "int_p 5", "int_p 10", "int_p 25", "int_p 50", "int_p 75", "int_p 90", "int_p 99"] + COUNTS = "COUNTS" + DENSITIES = "DENSITIES" + USE_TILE_BB = "USE_TILE_BB" + FILES_ARE_PLOTS = "FILES_ARE_PLOTS" + + def defineCharacteristics(self): + self.name = "lascanopyPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersPointInputMergedGUI() + self.addParameter(ParameterNumber(lascanopyPro.PLOT_SIZE, "square plot size", 0, None, 20)) + self.addParameter(ParameterNumber(lascanopyPro.HEIGHT_CUTOFF, "height cutoff / breast height", 0, None, 1.37)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT1, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT2, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT3, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT4, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT5, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT6, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT7, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT8, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterSelection(lascanopyPro.PRODUCT9, "create", lascanopyPro.PRODUCTS, 0)) + self.addParameter(ParameterString(lascanopyPro.COUNTS, "count rasters (e.g. 2.0 5.0 10.0 20.0)", "")) + self.addParameter(ParameterString(lascanopyPro.DENSITIES, "density rasters (e.g. 2.0 5.0 10.0 20.0)", "")) + self.addParameter(ParameterBoolean(lascanopyPro.USE_TILE_BB, "use tile bounding box (after tiling with buffer)", False)) + self.addParameter(ParameterBoolean(lascanopyPro.FILES_ARE_PLOTS, "input file is single plot", False)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersRasterOutputFormatGUI() + self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lascanopy")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersPointInputMergedCommands(commands) + plot_size = self.getParameterValue(lascanopyPro.PLOT_SIZE) + if plot_size != 20: + commands.append("-step") + commands.append(str(plot_size)) + height_cutoff = self.getParameterValue(lascanopyPro.HEIGHT_CUTOFF) + if height_cutoff != 1.37: + commands.append("-height_cutoff") + commands.append(str(height_cutoff)) + product = self.getParameterValue(lascanopyPro.PRODUCT1) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + product = self.getParameterValue(lascanopyPro.PRODUCT2) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + product = self.getParameterValue(lascanopyPro.PRODUCT3) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + product = self.getParameterValue(lascanopyPro.PRODUCT4) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + product = self.getParameterValue(lascanopyPro.PRODUCT5) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + product = self.getParameterValue(lascanopyPro.PRODUCT6) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + product = self.getParameterValue(lascanopyPro.PRODUCT7) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + product = self.getParameterValue(lascanopyPro.PRODUCT8) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + product = self.getParameterValue(lascanopyPro.PRODUCT9) + if product != 0: + commands.append("-" + lascanopyPro.PRODUCTS[product]) + array = self.getParameterValue(lascanopyPro.COUNTS).split() + if (len(array) > 1): + commands.append("-c") + for a in array: + commands.append(a) + array = self.getParameterValue(lascanopyPro.DENSITIES).split() + if (len(array) > 1): + commands.append("-d") + for a in array: + commands.append(a) + if (self.getParameterValue(lascanopyPro.USE_TILE_BB)): + commands.append("-use_tile_bb") + if (self.getParameterValue(lascanopyPro.FILES_ARE_PLOTS)): + commands.append("-files_are_plots") + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersRasterOutputFormatCommands(commands) + self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasclassify.py b/python/plugins/processing/algs/lidar/lastools/lasclassify.py index 680d6e659913..4f030fc31566 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasclassify.py +++ b/python/plugins/processing/algs/lidar/lastools/lasclassify.py @@ -40,12 +40,14 @@ def defineCharacteristics(self): self.addParametersPointInputGUI() self.addParametersHorizontalAndVerticalFeetGUI() self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasclassify.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasclassify")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersHorizontalAndVerticalFeetCommands(commands) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasclassifyPro.py b/python/plugins/processing/algs/lidar/lastools/lasclassifyPro.py new file mode 100644 index 000000000000..91db0793ab0c --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasclassifyPro.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasclassifyPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +class lasclassifyPro(LAStoolsAlgorithm): + + def defineCharacteristics(self): + self.name = "lasclassifyPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersHorizontalAndVerticalFeetGUI() + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasclassify")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersHorizontalAndVerticalFeetCommands(commands) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasclip.py b/python/plugins/processing/algs/lidar/lastools/lasclip.py index 14f1e5db5ef4..443f254b197f 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasclip.py +++ b/python/plugins/processing/algs/lidar/lastools/lasclip.py @@ -54,9 +54,10 @@ def defineCharacteristics(self): self.addParameter(ParameterSelection(lasclip.OPERATION, "what to do with points", lasclip.OPERATIONS, 0)) self.addParameter(ParameterNumber(lasclip.CLASSIFY_AS, "classify as", 0, None, 12)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasclip.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasclip")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) poly = self.getParameterValue(lasclip.POLYGON) @@ -71,5 +72,6 @@ def processAlgorithm(self, progress): classify_as = self.getParameterValue(lasclip.CLASSIFY_AS) commands.append(str(classify_as)) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lascolor.py b/python/plugins/processing/algs/lidar/lastools/lascolor.py index 4b09ef60b0d8..fd054967ee69 100644 --- a/python/plugins/processing/algs/lidar/lastools/lascolor.py +++ b/python/plugins/processing/algs/lidar/lastools/lascolor.py @@ -44,9 +44,10 @@ def defineCharacteristics(self): self.addParametersPointInputGUI() self.addParameter(ParameterRaster(lascolor.ORTHO, "Input ortho")) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lascolor.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lascolor")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) ortho = self.getParameterValue(lascolor.ORTHO) @@ -54,5 +55,6 @@ def processAlgorithm(self, progress): commands.append("-image") commands.append(ortho) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lascontrol.py b/python/plugins/processing/algs/lidar/lastools/lascontrol.py index e47cfd5461ed..d73bcb88df9c 100644 --- a/python/plugins/processing/algs/lidar/lastools/lascontrol.py +++ b/python/plugins/processing/algs/lidar/lastools/lascontrol.py @@ -50,9 +50,10 @@ def defineCharacteristics(self): self.addParameter(ParameterSelection(lascontrol.OPERATION, "what to do with isolated points", lascontrol.OPERATIONS, 0)) self.addParameter(ParameterNumber(lascontrol.CLASSIFY_AS, "classify as", 0, None, 12)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lascontrol.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lascontrol")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) poly = self.getParameterValue(lascontrol.POLYGON) @@ -67,5 +68,6 @@ def processAlgorithm(self, progress): classify_as = self.getParameterValue(lascontrol.CLASSIFY_AS) commands.append(str(classify_as)) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasduplicate.py b/python/plugins/processing/algs/lidar/lastools/lasduplicate.py index bcd75159757c..42a6f2fba6e1 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasduplicate.py +++ b/python/plugins/processing/algs/lidar/lastools/lasduplicate.py @@ -47,10 +47,11 @@ def defineCharacteristics(self): self.addParameter(ParameterBoolean(lasduplicate.SINGLE_RETURNS, "mark surviving duplicate as single return", False)) self.addParameter(ParameterFile(lasduplicate.RECORD_REMOVED, "record removed duplictates to LAS/LAZ file")) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasduplicate.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasduplicate")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) if self.getParameterValue(lasduplicate.LOWEST_Z): @@ -64,5 +65,6 @@ def processAlgorithm(self, progress): commands.append("-record_removed") commands.append(record_removed) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasduplicatePro.py b/python/plugins/processing/algs/lidar/lastools/lasduplicatePro.py new file mode 100644 index 000000000000..6e9bbdb3f768 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasduplicatePro.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasduplicate.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean + +class lasduplicatePro(LAStoolsAlgorithm): + + LOWEST_Z = "LOWEST_Z" + UNIQUE_XYZ = "UNIQUE_XYZ" + SINGLE_RETURNS = "SINGLE_RETURNS" + RECORD_REMOVED = "RECORD_REMOVED" + + def defineCharacteristics(self): + self.name = "lasduplicatePro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterBoolean(lasduplicatePro.LOWEST_Z, "keep duplicate with lowest z coordinate", False)) + self.addParameter(ParameterBoolean(lasduplicatePro.UNIQUE_XYZ, "only remove duplicates in x y and z", False)) + self.addParameter(ParameterBoolean(lasduplicatePro.SINGLE_RETURNS, "mark surviving duplicate as single return", False)) + self.addParameter(ParameterBoolean(lasduplicatePro.RECORD_REMOVED, "record removed duplicates", False)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasduplicate")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + if self.getParameterValue(lasduplicatePro.LOWEST_Z): + commands.append("-lowest_z") + if self.getParameterValue(lasduplicatePro.UNIQUE_XYZ): + commands.append("-unique_xyz") + if self.getParameterValue(lasduplicatePro.SINGLE_RETURNS): + commands.append("-single_returns") + if self.getParameterValue(lasduplicatePro.RECORD_REMOVED): + commands.append("-record_removed") + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasgrid.py b/python/plugins/processing/algs/lidar/lastools/lasgrid.py index a3890e34a332..7a175ecdb1b1 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasgrid.py +++ b/python/plugins/processing/algs/lidar/lastools/lasgrid.py @@ -32,6 +32,7 @@ from LAStoolsAlgorithm import LAStoolsAlgorithm from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean class lasgrid(LAStoolsAlgorithm): @@ -39,6 +40,7 @@ class lasgrid(LAStoolsAlgorithm): METHOD = "METHOD" ATTRIBUTES = ["elevation", "intensity", "rgb", "classification"] METHODS = ["lowest", "highest", "average", "stddev"] + USE_TILE_BB = "USE_TILE_BB" def defineCharacteristics(self): self.name = "lasgrid" @@ -49,10 +51,12 @@ def defineCharacteristics(self): self.addParametersStepGUI() self.addParameter(ParameterSelection(lasgrid.ATTRIBUTE, "Attribute", lasgrid.ATTRIBUTES, 0)) self.addParameter(ParameterSelection(lasgrid.METHOD, "Method", lasgrid.METHODS, 0)) + self.addParameter(ParameterBoolean(lasgrid.USE_TILE_BB, "use tile bounding box (after tiling with buffer)", False)) self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasgrid.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasgrid")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) @@ -63,6 +67,9 @@ def processAlgorithm(self, progress): method = self.getParameterValue(lasgrid.METHOD) if method != 0: commands.append("-" + lasgrid.METHODS[method]) + if (self.getParameterValue(lasgrid.USE_TILE_BB)): + commands.append("-use_tile_bb") self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasgridPro.py b/python/plugins/processing/algs/lidar/lastools/lasgridPro.py new file mode 100644 index 000000000000..672d7a325f39 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasgridPro.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasgridPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2013 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean + +class lasgridPro(LAStoolsAlgorithm): + + ATTRIBUTE = "ATTRIBUTE" + METHOD = "METHOD" + ATTRIBUTES = ["elevation", "intensity", "rgb", "classification"] + METHODS = ["lowest", "highest", "average", "stddev"] + USE_TILE_BB = "USE_TILE_BB" + + def defineCharacteristics(self): + self.name = "lasgridPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersPointInputMergedGUI() + self.addParametersFilter1ReturnClassFlagsGUI() + self.addParametersStepGUI() + self.addParameter(ParameterSelection(lasgridPro.ATTRIBUTE, "Attribute", lasgridPro.ATTRIBUTES, 0)) + self.addParameter(ParameterSelection(lasgridPro.METHOD, "Method", lasgridPro.METHODS, 0)) + self.addParameter(ParameterBoolean(lasgridPro.USE_TILE_BB, "use tile bounding box (after tiling with buffer)", False)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersRasterOutputFormatGUI() + self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasgrid")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersPointInputMergedCommands(commands) + self.addParametersFilter1ReturnClassFlagsCommands(commands) + self.addParametersStepCommands(commands) + attribute = self.getParameterValue(lasgridPro.ATTRIBUTE) + if attribute != 0: + commands.append("-" + lasgridPro.ATTRIBUTES[attribute]) + method = self.getParameterValue(lasgridPro.METHOD) + if method != 0: + commands.append("-" + lasgridPro.METHODS[method]) + if (self.getParameterValue(lasgridPro.USE_TILE_BB)): + commands.append("-use_tile_bb") + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersRasterOutputFormatCommands(commands) + self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasground.py b/python/plugins/processing/algs/lidar/lastools/lasground.py index 79ddd6ce3443..d69a342a06c0 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasground.py +++ b/python/plugins/processing/algs/lidar/lastools/lasground.py @@ -36,7 +36,7 @@ class lasground(LAStoolsAlgorithm): - AIRBORNE = "AIRBORNE" + NO_BULGE = "NO_BULGE" TERRAIN = "TERRAIN" TERRAINS = ["wilderness", "nature", "town", "city", "metro"] GRANULARITY = "GRANULARITY" @@ -48,22 +48,26 @@ def defineCharacteristics(self): self.addParametersVerboseGUI() self.addParametersPointInputGUI() self.addParametersHorizontalAndVerticalFeetGUI() - self.addParameter(ParameterBoolean(lasground.AIRBORNE, "airborne LiDAR", True)) + self.addParameter(ParameterBoolean(lasground.NO_BULGE, "no triangle bulging during TIN refinement", False)) self.addParameter(ParameterSelection(lasground.TERRAIN, "terrain type", lasground.TERRAINS, 1)) self.addParameter(ParameterSelection(lasground.GRANULARITY, "preprocessing", lasground.GRANULARITIES, 1)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersHorizontalAndVerticalFeetCommands(commands) + if (self.getParameterValue(lasground.NO_BULGE)): + commands.append("-no_bulge") method = self.getParameterValue(lasground.TERRAIN) - if method != 1: + if (method != 1): commands.append("-" + lasground.TERRAINS[method]) granularity = self.getParameterValue(lasground.GRANULARITY) - if granularity != 1: + if (granularity != 1): commands.append("-" + lasground.GRANULARITIES[granularity]) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasgroundPro.py b/python/plugins/processing/algs/lidar/lastools/lasgroundPro.py index 67a9e55ad493..e51c8c1d47a1 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasgroundPro.py +++ b/python/plugins/processing/algs/lidar/lastools/lasgroundPro.py @@ -36,7 +36,7 @@ class lasgroundPro(LAStoolsAlgorithm): - AIRBORNE = "AIRBORNE" + NO_BULGE = "NO_BULGE" TERRAIN = "TERRAIN" TERRAINS = ["wilderness", "nature", "town", "city", "metro"] GRANULARITY = "GRANULARITY" @@ -47,35 +47,34 @@ def defineCharacteristics(self): self.group = "LAStools Production" self.addParametersPointInputFolderGUI() self.addParametersHorizontalAndVerticalFeetGUI() - self.addParameter(ParameterBoolean(lasgroundPro.AIRBORNE, "airborne LiDAR", True)) + self.addParameter(ParameterBoolean(lasgroundPro.NO_BULGE, "no triangle bulging during TIN refinement", False)) self.addParameter(ParameterSelection(lasgroundPro.TERRAIN, "terrain type", lasgroundPro.TERRAINS, 1)) self.addParameter(ParameterSelection(lasgroundPro.GRANULARITY, "preprocessing", lasgroundPro.GRANULARITIES, 1)) self.addParametersOutputDirectoryGUI() self.addParametersOutputAppendixGUI() self.addParametersPointOutputFormatGUI() - self.addParametersAdditionalGUI() + self.addParametersAdditionalGUI() self.addParametersCoresGUI() self.addParametersVerboseGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasground")] self.addParametersVerboseCommands(commands) self.addParametersPointInputFolderCommands(commands) self.addParametersHorizontalAndVerticalFeetCommands(commands) - airborne = self.getParameterValue(lasgroundPro.AIRBORNE) - if airborne != True: - commands.append("-not_airborne") + if (self.getParameterValue(lasgroundPro.NO_BULGE)): + commands.append("-no_bulge") method = self.getParameterValue(lasgroundPro.TERRAIN) - if method != 1: + if (method != 1): commands.append("-" + lasgroundPro.TERRAINS[method]) granularity = self.getParameterValue(lasgroundPro.GRANULARITY) - if granularity != 1: + if (granularity != 1): commands.append("-" + lasgroundPro.GRANULARITIES[granularity]) self.addParametersCoresCommands(commands) self.addParametersOutputDirectoryCommands(commands) self.addParametersOutputAppendixCommands(commands) self.addParametersPointOutputFormatCommands(commands) - self.addParametersAdditionalCommands(commands) + self.addParametersAdditionalCommands(commands) self.addParametersCoresCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasheight.py b/python/plugins/processing/algs/lidar/lastools/lasheight.py index 84b6f67ffa3e..cae88b2e8532 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasheight.py +++ b/python/plugins/processing/algs/lidar/lastools/lasheight.py @@ -2,7 +2,7 @@ """ *************************************************************************** - lasduplicate.py + lasheight.py --------------------- Date : September 2013 Copyright : (C) 2013 by Martin Isenburg @@ -17,9 +17,9 @@ *************************************************************************** """ -__author__ = 'Victor Olaya' -__date__ = 'August 2012' -__copyright__ = '(C) 2012, Victor Olaya' +__author__ = 'Martin Isenburg' +__date__ = 'September 2013' +__copyright__ = '(C) 2013, Martin Isenburg' # This will get replaced with a git SHA1 when you do a git archive __revision__ = '$Format:%H$' @@ -28,10 +28,15 @@ from LAStoolsAlgorithm import LAStoolsAlgorithm from processing.core.parameters import ParameterBoolean +from processing.core.parameters import ParameterNumber class lasheight(LAStoolsAlgorithm): REPLACE_Z = "REPLACE_Z" + DROP_ABOVE = "DROP_ABOVE" + DROP_ABOVE_HEIGHT = "DROP_ABOVE_HEIGHT" + DROP_BELOW = "DROP_BELOW" + DROP_BELOW_HEIGHT = "DROP_BELOW_HEIGHT" def defineCharacteristics(self): self.name = "lasheight" @@ -39,16 +44,26 @@ def defineCharacteristics(self): self.addParametersVerboseGUI() self.addParametersPointInputGUI() self.addParameter(ParameterBoolean(lasheight.REPLACE_Z, "replace z", False)) + self.addParameter(ParameterBoolean(lasheight.DROP_ABOVE, "drop above", False)) + self.addParameter(ParameterNumber(lasheight.DROP_ABOVE_HEIGHT, "drop above height", 0, None, 100.0)) + self.addParameter(ParameterBoolean(lasheight.DROP_BELOW, "drop below", False)) + self.addParameter(ParameterNumber(lasheight.DROP_BELOW_HEIGHT, "drop below height", 0, None, -2.0)) self.addParametersPointOutputGUI() - + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) - replace_z = self.getParameterValue(lasheight.REPLACE_Z) - if replace_z == True: + if self.getParameterValue(lasheight.REPLACE_Z): commands.append("-replace_z") + if self.getParameterValue(lasheight.DROP_ABOVE): + commands.append("-drop_above") + commands.append(str(self.getParameterValue(lasheight.DROP_ABOVE_HEIGHT))) + if self.getParameterValue(lasheight.DROP_BELOW): + commands.append("-drop_below") + commands.append(str(self.getParameterValue(lasheight.DROP_BELOW_HEIGHT))) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasheightPro.py b/python/plugins/processing/algs/lidar/lastools/lasheightPro.py new file mode 100644 index 000000000000..17c28fb12ab6 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasheightPro.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasheightPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean +from processing.core.parameters import ParameterNumber + +class lasheightPro(LAStoolsAlgorithm): + + REPLACE_Z = "REPLACE_Z" + DROP_ABOVE = "DROP_ABOVE" + DROP_ABOVE_HEIGHT = "DROP_ABOVE_HEIGHT" + DROP_BELOW = "DROP_BELOW" + DROP_BELOW_HEIGHT = "DROP_BELOW_HEIGHT" + + def defineCharacteristics(self): + self.name = "lasheightPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterBoolean(lasheightPro.REPLACE_Z, "replace z", False)) + self.addParameter(ParameterBoolean(lasheightPro.DROP_ABOVE, "drop above", False)) + self.addParameter(ParameterNumber(lasheightPro.DROP_ABOVE_HEIGHT, "drop above height", 0, None, 100.0)) + self.addParameter(ParameterBoolean(lasheightPro.DROP_BELOW, "drop below", False)) + self.addParameter(ParameterNumber(lasheightPro.DROP_BELOW_HEIGHT, "drop below height", 0, None, -2.0)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasheight")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + if self.getParameterValue(lasheightPro.REPLACE_Z): + commands.append("-replace_z") + if self.getParameterValue(lasheightPro.DROP_ABOVE): + commands.append("-drop_above") + commands.append(str(self.getParameterValue(lasheightPro.DROP_ABOVE_HEIGHT))) + if self.getParameterValue(lasheightPro.DROP_BELOW): + commands.append("-drop_below") + commands.append(str(self.getParameterValue(lasheightPro.DROP_BELOW_HEIGHT))) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasindex.py b/python/plugins/processing/algs/lidar/lastools/lasindex.py index 4cb6f362d9e4..6b02838fe06c 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasindex.py +++ b/python/plugins/processing/algs/lidar/lastools/lasindex.py @@ -32,23 +32,28 @@ class lasindex(LAStoolsAlgorithm): MOBILE_OR_TERRESTRIAL = "MOBILE_OR_TERRESTRIAL" + APPEND_LAX = "APPEND_LAX" def defineCharacteristics(self): self.name = "lasindex" self.group = "LAStools" self.addParametersVerboseGUI() self.addParametersPointInputGUI() + self.addParameter(ParameterBoolean(lasindex.APPEND_LAX, "append *.lax file to *.laz file", False)) self.addParameter(ParameterBoolean(lasindex.MOBILE_OR_TERRESTRIAL, "is mobile or terrestrial LiDAR (not airborne)", False)) - + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasindex.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasindex")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) + if self.getParameterValue(lasindex.APPEND_LAX): + commands.append("-append") if self.getParameterValue(lasindex.MOBILE_OR_TERRESTRIAL): commands.append("-tile_size") commands.append("10") commands.append("-maximum") commands.append("-100") + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasindexPro.py b/python/plugins/processing/algs/lidar/lastools/lasindexPro.py new file mode 100644 index 000000000000..566c0bc1c1da --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasindexPro.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasindexPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean + +class lasindexPro(LAStoolsAlgorithm): + + MOBILE_OR_TERRESTRIAL = "MOBILE_OR_TERRESTRIAL" + APPEND_LAX = "APPEND_LAX" + + def defineCharacteristics(self): + self.name = "lasindexPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterBoolean(lasindexPro.APPEND_LAX, "append *.lax file to *.laz file", False)) + self.addParameter(ParameterBoolean(lasindexPro.MOBILE_OR_TERRESTRIAL, "is mobile or terrestrial LiDAR (not airborne)", False)) + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasindex")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + if self.getParameterValue(lasindexPro.APPEND_LAX): + commands.append("-append") + if self.getParameterValue(lasindexPro.MOBILE_OR_TERRESTRIAL): + commands.append("-tile_size") + commands.append("10") + commands.append("-maximum") + commands.append("-100") + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasinfo.py b/python/plugins/processing/algs/lidar/lastools/lasinfo.py index f18197fe6d3b..b12777b5c2e2 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasinfo.py +++ b/python/plugins/processing/algs/lidar/lastools/lasinfo.py @@ -30,10 +30,24 @@ import os from LAStoolsUtils import LAStoolsUtils from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean from processing.core.outputs import OutputFile +from processing.core.parameters import ParameterNumber class lasinfo(LAStoolsAlgorithm): + COMPUTE_DENSITY = "COMPUTE_DENSITY" + REPAIR_BB = "REPAIR_BB" + REPAIR_COUNTERS = "REPAIR_COUNTERS" + HISTO1 = "HISTO1" + HISTO2 = "HISTO2" + HISTO3 = "HISTO3" + HISTOGRAM = ["---", "x", "y", "z", "intensity", "classification", "scan_angle", "user_data", "point_source", "gps_time", "X", "Y", "Z"] + HISTO1_BIN = "HISTO1_BIN" + HISTO2_BIN = "HISTO2_BIN" + HISTO3_BIN = "HISTO3_BIN" OUTPUT = "OUTPUT" def defineCharacteristics(self): @@ -41,13 +55,45 @@ def defineCharacteristics(self): self.group = "LAStools" self.addParametersVerboseGUI() self.addParametersPointInputGUI() + self.addParameter(ParameterBoolean(lasinfo.COMPUTE_DENSITY, "compute density", False)) + self.addParameter(ParameterBoolean(lasinfo.REPAIR_BB, "repair bounding box", False)) + self.addParameter(ParameterBoolean(lasinfo.REPAIR_COUNTERS, "repair counters", False)) + self.addParameter(ParameterSelection(lasinfo.HISTO1, "histogram", lasinfo.HISTOGRAM, 0)) + self.addParameter(ParameterNumber(lasinfo.HISTO1_BIN, "bin size", 0, None, 1.0)) + self.addParameter(ParameterSelection(lasinfo.HISTO2, "histogram", lasinfo.HISTOGRAM, 0)) + self.addParameter(ParameterNumber(lasinfo.HISTO2_BIN, "bin size", 0, None, 1.0)) + self.addParameter(ParameterSelection(lasinfo.HISTO3, "histogram", lasinfo.HISTOGRAM, 0)) + self.addParameter(ParameterNumber(lasinfo.HISTO3_BIN, "bin size", 0, None, 1.0)) self.addOutput(OutputFile(lasinfo.OUTPUT, "Output ASCII file")) + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasinfo.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasinfo")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) + if self.getParameterValue(lasinfo.COMPUTE_DENSITY): + commands.append("-cd") + if self.getParameterValue(lasinfo.REPAIR_BB): + commands.append("-repair_bb") + if self.getParameterValue(lasinfo.REPAIR_COUNTERS): + commands.append("-repair_counters") + histo = self.getParameterValue(lasinfo.HISTO1) + if histo != 0: + commands.append("-histo") + commands.append(lasinfo.HISTOGRAM[histo]) + commands.append(str(self.getParameterValue(lasinfo.HISTO1_BIN))) + histo = self.getParameterValue(lasinfo.HISTO2) + if histo != 0: + commands.append("-histo") + commands.append(lasinfo.HISTOGRAM[histo]) + commands.append(str(self.getParameterValue(lasinfo.HISTO2_BIN))) + histo = self.getParameterValue(lasinfo.HISTO3) + if histo != 0: + commands.append("-histo") + commands.append(lasinfo.HISTOGRAM[histo]) + commands.append(str(self.getParameterValue(lasinfo.HISTO3_BIN))) commands.append("-o") commands.append(self.getOutputValue(lasinfo.OUTPUT)) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasinfoPro.py b/python/plugins/processing/algs/lidar/lastools/lasinfoPro.py new file mode 100644 index 000000000000..d2e2bc133833 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasinfoPro.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasinfoPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean + +from processing.core.outputs import OutputFile +from processing.core.parameters import ParameterNumber + +class lasinfoPro(LAStoolsAlgorithm): + + COMPUTE_DENSITY = "COMPUTE_DENSITY" + REPAIR_BB = "REPAIR_BB" + REPAIR_COUNTERS = "REPAIR_COUNTERS" + HISTO1 = "HISTO1" + HISTO2 = "HISTO2" + HISTO3 = "HISTO3" + HISTOGRAM = ["---", "x", "y", "z", "intensity", "classification", "scan_angle", "user_data", "point_source", "gps_time", "X", "Y", "Z"] + HISTO1_BIN = "HISTO1_BIN" + HISTO2_BIN = "HISTO2_BIN" + HISTO3_BIN = "HISTO3_BIN" + + def defineCharacteristics(self): + self.name = "lasinfoPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterBoolean(lasinfoPro.COMPUTE_DENSITY, "compute density", False)) + self.addParameter(ParameterBoolean(lasinfoPro.REPAIR_BB, "repair bounding box", False)) + self.addParameter(ParameterBoolean(lasinfoPro.REPAIR_COUNTERS, "repair counters", False)) + self.addParameter(ParameterSelection(lasinfoPro.HISTO1, "histogram", lasinfoPro.HISTOGRAM, 0)) + self.addParameter(ParameterNumber(lasinfoPro.HISTO1_BIN, "bin size", 0, None, 1.0)) + self.addParameter(ParameterSelection(lasinfoPro.HISTO2, "histogram", lasinfoPro.HISTOGRAM, 0)) + self.addParameter(ParameterNumber(lasinfoPro.HISTO2_BIN, "bin size", 0, None, 1.0)) + self.addParameter(ParameterSelection(lasinfoPro.HISTO3, "histogram", lasinfoPro.HISTOGRAM, 0)) + self.addParameter(ParameterNumber(lasinfoPro.HISTO3_BIN, "bin size", 0, None, 1.0)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasinfo")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + if self.getParameterValue(lasinfoPro.COMPUTE_DENSITY): + commands.append("-cd") + if self.getParameterValue(lasinfoPro.REPAIR_BB): + commands.append("-repair_bb") + if self.getParameterValue(lasinfoPro.REPAIR_COUNTERS): + commands.append("-repair_counters") + histo = self.getParameterValue(lasinfoPro.HISTO1) + if histo != 0: + commands.append("-histo") + commands.append(lasinfoPro.HISTOGRAM[histo]) + commands.append(str(self.getParameterValue(lasinfoPro.HISTO1_BIN))) + histo = self.getParameterValue(lasinfoPro.HISTO2) + if histo != 0: + commands.append("-histo") + commands.append(lasinfoPro.HISTOGRAM[histo]) + commands.append(str(self.getParameterValue(lasinfoPro.HISTO2_BIN))) + histo = self.getParameterValue(lasinfoPro.HISTO3) + if histo != 0: + commands.append("-histo") + commands.append(lasinfoPro.HISTOGRAM[histo]) + commands.append(str(self.getParameterValue(lasinfoPro.HISTO3_BIN))) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + commands.append("-otxt") + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasmerge.py b/python/plugins/processing/algs/lidar/lastools/lasmerge.py index faec681f25ce..e82f0ddc4239 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasmerge.py +++ b/python/plugins/processing/algs/lidar/lastools/lasmerge.py @@ -43,6 +43,7 @@ def defineCharacteristics(self): self.group = "LAStools" self.addParametersVerboseGUI() self.addParametersFilesAreFlightlinesGUI() + self.addParametersApplyFileSourceIdGUI() self.addParametersPointInputGUI() self.addParameter(ParameterFile(lasmerge.FILE2, "2nd file")) self.addParameter(ParameterFile(lasmerge.FILE3, "3rd file")) @@ -51,12 +52,11 @@ def defineCharacteristics(self): self.addParameter(ParameterFile(lasmerge.FILE6, "6th file")) self.addParameter(ParameterFile(lasmerge.FILE7, "7th file")) self.addParametersPointOutputGUI() - + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasmerge.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasmerge")] self.addParametersVerboseCommands(commands) - self.addParametersFilesAreFlightlinesCommands(commands) self.addParametersPointInputCommands(commands) file2 = self.getParameterValue(lasmerge.FILE2) if file2 != None: @@ -82,6 +82,9 @@ def processAlgorithm(self, progress): if file7 != None: commands.append("-i") commands.append(file7) + self.addParametersFilesAreFlightlinesCommands(commands) + self.addParametersApplyFileSourceIdsCommands(commands) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasmergePro.py b/python/plugins/processing/algs/lidar/lastools/lasmergePro.py new file mode 100644 index 000000000000..bcda4c81ca07 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasmergePro.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasmergePro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +class lasmergePro(LAStoolsAlgorithm): + + def defineCharacteristics(self): + self.name = "lasmergePro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersFilesAreFlightlinesGUI() + self.addParametersApplyFileSourceIdGUI() + self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasmerge")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersFilesAreFlightlinesCommands(commands) + self.addParametersApplyFileSourceIdsCommands(commands) + self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasnoise.py b/python/plugins/processing/algs/lidar/lastools/lasnoise.py index 40b63623ec6e..5d6bb49c37f8 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasnoise.py +++ b/python/plugins/processing/algs/lidar/lastools/lasnoise.py @@ -50,10 +50,11 @@ def defineCharacteristics(self): self.addParameter(ParameterSelection(lasnoise.OPERATION, "what to do with isolated points", lasnoise.OPERATIONS, 0)) self.addParameter(ParameterNumber(lasnoise.CLASSIFY_AS, "classify as", 0, None, 7)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasnoise.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasnoise")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) isolated = self.getParameterValue(lasnoise.ISOLATED) @@ -73,5 +74,6 @@ def processAlgorithm(self, progress): classify_as = self.getParameterValue(lasnoise.CLASSIFY_AS) commands.append(str(classify_as)) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasnoisePro.py b/python/plugins/processing/algs/lidar/lastools/lasnoisePro.py new file mode 100644 index 000000000000..b201af85b628 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasnoisePro.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasnoisePro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterNumber +from processing.core.parameters import ParameterSelection + +class lasnoisePro(LAStoolsAlgorithm): + + ISOLATED = "ISOLATED" + STEP_XY = "STEP_XY" + STEP_Z = "STEP_Z" + OPERATION = "OPERATION" + OPERATIONS = ["classify", "remove"] + CLASSIFY_AS = "CLASSIFY_AS" + + def defineCharacteristics(self): + self.name = "lasnoisePro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterNumber(lasnoisePro.ISOLATED, "isolated if surrounding cells have only", 0, None, 5)) + self.addParameter(ParameterNumber(lasnoisePro.STEP_XY, "resolution of isolation grid in xy", 0, None, 4.0)) + self.addParameter(ParameterNumber(lasnoisePro.STEP_Z, "resolution of isolation grid in z ", 0, None, 4.0)) + self.addParameter(ParameterSelection(lasnoisePro.OPERATION, "what to do with isolated points", lasnoisePro.OPERATIONS, 0)) + self.addParameter(ParameterNumber(lasnoisePro.CLASSIFY_AS, "classify as", 0, None, 7)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasnoise")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + isolated = self.getParameterValue(lasnoisePro.ISOLATED) + commands.append("-isolated") + commands.append(str(isolated)) + step_xy = self.getParameterValue(lasnoisePro.STEP_XY) + commands.append("-step_xy") + commands.append(str(step_xy)) + step_z = self.getParameterValue(lasnoisePro.STEP_Z) + commands.append("-step_z") + commands.append(str(step_z)) + operation = self.getParameterValue(lasnoisePro.OPERATION) + if operation != 0: + commands.append("-remove_noise") + else: + commands.append("-classify_as") + classify_as = self.getParameterValue(lasnoisePro.CLASSIFY_AS) + commands.append(str(classify_as)) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasoverage.py b/python/plugins/processing/algs/lidar/lastools/lasoverage.py index a92199bd4727..45a0ff9c91d1 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasoverage.py +++ b/python/plugins/processing/algs/lidar/lastools/lasoverage.py @@ -46,10 +46,11 @@ def defineCharacteristics(self): self.addParameter(ParameterNumber(lasoverage.CHECK_STEP, "size of grid used for scan angle check", 0, None, 1.0)) self.addParameter(ParameterSelection(lasoverage.OPERATION, "mode of operation", lasoverage.OPERATIONS, 0)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasoverage.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasoverage")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersHorizontalFeetCommands(commands) @@ -64,5 +65,6 @@ def processAlgorithm(self, progress): elif operation == 2: commands.append("-remove_overage") self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasoveragePro.py b/python/plugins/processing/algs/lidar/lastools/lasoveragePro.py new file mode 100644 index 000000000000..3eff10672083 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasoveragePro.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasoveragePro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterNumber +from processing.core.parameters import ParameterSelection + +class lasoveragePro(LAStoolsAlgorithm): + + CHECK_STEP = "CHECK_STEP" + OPERATION = "OPERATION" + OPERATIONS= ["classify as overlap", "flag as withheld", "remove from output"] + + def defineCharacteristics(self): + self.name = "lasoveragePro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersHorizontalFeetGUI() + self.addParametersFilesAreFlightlinesGUI() + self.addParameter(ParameterNumber(lasoveragePro.CHECK_STEP, "size of grid used for scan angle check", 0, None, 1.0)) + self.addParameter(ParameterSelection(lasoveragePro.OPERATION, "mode of operation", lasoveragePro.OPERATIONS, 0)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasoverage")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersHorizontalFeetCommands(commands) + self.addParametersFilesAreFlightlinesCommands(commands) + step = self.getParameterValue(lasoveragePro.CHECK_STEP) + if step != 1.0: + commands.append("-step") + commands.append(str(step)) + operation = self.getParameterValue(lasoveragePro.OPERATION) + if operation == 1: + commands.append("-flag_as_withheld") + elif operation == 2: + commands.append("-remove_overage") + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasoverlap.py b/python/plugins/processing/algs/lidar/lastools/lasoverlap.py index 725556325a44..3a816625604b 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasoverlap.py +++ b/python/plugins/processing/algs/lidar/lastools/lasoverlap.py @@ -53,9 +53,10 @@ def defineCharacteristics(self): self.addParameter(ParameterBoolean(lasoverlap.CREATE_OVERLAP_RASTER, "create overlap raster", True)) self.addParameter(ParameterBoolean(lasoverlap.CREATE_DIFFERENCE_RASTER, "create difference raster", True)) self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasoverlap.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasoverlap")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilter1ReturnClassFlagsCommands(commands) @@ -75,5 +76,6 @@ def processAlgorithm(self, progress): if self.getParameterValue(lasoverlap.CREATE_DIFFERENCE_RASTER) != True: commands.append("-no_diff") self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasoverlapPro.py b/python/plugins/processing/algs/lidar/lastools/lasoverlapPro.py new file mode 100644 index 000000000000..ab7c87d3fbe1 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasoverlapPro.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasoverlapPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean +from processing.core.parameters import ParameterNumber +from processing.core.parameters import ParameterSelection + +class lasoverlapPro(LAStoolsAlgorithm): + + CHECK_STEP = "CHECK_STEP" + ATTRIBUTE = "ATTRIBUTE" + OPERATION = "OPERATION" + ATTRIBUTES = ["elevation", "intensity", "number_of_returns", "scan_angle_abs", "density"] + OPERATIONS = ["lowest", "highest", "average"] + CREATE_OVERLAP_RASTER = "CREATE_OVERLAP_RASTER" + CREATE_DIFFERENCE_RASTER = "CREATE_DIFFERENCE_RASTER" + + def defineCharacteristics(self): + self.name = "lasoverlapPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersFilesAreFlightlinesGUI() + self.addParametersFilter1ReturnClassFlagsGUI() + self.addParameter(ParameterNumber(lasoverlapPro.CHECK_STEP, "size of grid used for overlap check", 0, None, 2.0)) + self.addParameter(ParameterSelection(lasoverlapPro.ATTRIBUTE, "attribute to check", lasoverlapPro.ATTRIBUTES, 0)) + self.addParameter(ParameterSelection(lasoverlapPro.OPERATION, "operation on attribute per cell", lasoverlapPro.OPERATIONS, 0)) + self.addParameter(ParameterBoolean(lasoverlapPro.CREATE_OVERLAP_RASTER, "create overlap raster", True)) + self.addParameter(ParameterBoolean(lasoverlapPro.CREATE_DIFFERENCE_RASTER, "create difference raster", True)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersRasterOutputFormatGUI() + self.addParametersRasterOutputGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasoverlap")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersFilesAreFlightlinesCommands(commands) + self.addParametersFilter1ReturnClassFlagsCommands(commands) + step = self.getParameterValue(lasoverlapPro.CHECK_STEP) + if step != 0.0: + commands.append("-step") + commands.append(str(step)) + commands.append("-values") + attribute = self.getParameterValue(lasoverlapPro.ATTRIBUTE) + if attribute != 0: + commands.append("-" + lasoverlapPro.ATTRIBUTES[attribute]) + operation = self.getParameterValue(lasoverlapPro.OPERATION) + if operation != 0: + commands.append("-" + lasoverlapPro.OPERATIONS[operation]) + if self.getParameterValue(lasoverlapPro.CREATE_OVERLAP_RASTER) != True: + commands.append("-no_over") + if self.getParameterValue(lasoverlapPro.CREATE_DIFFERENCE_RASTER) != True: + commands.append("-no_diff") + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersRasterOutputFormatCommands(commands) + self.addParametersRasterOutputCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasprecision.py b/python/plugins/processing/algs/lidar/lastools/lasprecision.py index e3552f602f7e..3a187a2ec577 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasprecision.py +++ b/python/plugins/processing/algs/lidar/lastools/lasprecision.py @@ -43,12 +43,14 @@ def defineCharacteristics(self): self.addParametersVerboseGUI() self.addParametersPointInputGUI() self.addOutput(OutputFile(lasprecision.OUTPUT, "Output ASCII file")) + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasprecision.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasprecision")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) commands.append("-o") commands.append(self.getOutputValue(lasprecision.OUTPUT)) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasquery.py b/python/plugins/processing/algs/lidar/lastools/lasquery.py index 6920c17092b7..509cce8aec1c 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasquery.py +++ b/python/plugins/processing/algs/lidar/lastools/lasquery.py @@ -42,10 +42,11 @@ def defineCharacteristics(self): self.group = "LAStools" self.addParametersVerboseGUI() self.addParameter(ParameterExtent(self.AOI, 'area of interest')) + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasview.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasview")] self.addParametersVerboseCommands(commands) # get area-of-interest @@ -70,5 +71,6 @@ def processAlgorithm(self, progress): commands.append(aoiCoords[2]) commands.append(aoiCoords[1]) commands.append(aoiCoords[3]) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lassort.py b/python/plugins/processing/algs/lidar/lastools/lassort.py index c9b0da8f4a80..3846570b846e 100644 --- a/python/plugins/processing/algs/lidar/lastools/lassort.py +++ b/python/plugins/processing/algs/lidar/lastools/lassort.py @@ -42,10 +42,11 @@ def defineCharacteristics(self): self.addParameter(ParameterBoolean(lassort.BY_GPS_TIME, "sort by GPS time", False)) self.addParameter(ParameterBoolean(lassort.BY_POINT_SOURCE_ID, "sort by point source ID", False)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lassort.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lassort")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) if self.getParameterValue(lassort.BY_GPS_TIME): @@ -53,5 +54,6 @@ def processAlgorithm(self, progress): if self.getParameterValue(lassort.BY_POINT_SOURCE_ID): commands.append("-point_source") self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lassortPro.py b/python/plugins/processing/algs/lidar/lastools/lassortPro.py new file mode 100644 index 000000000000..76f83709780e --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lassortPro.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lassortPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean + +class lassortPro(LAStoolsAlgorithm): + + BY_GPS_TIME = "BY_GPS_TIME" + BY_POINT_SOURCE_ID = "BY_POINT_SOURCE_ID" + + def defineCharacteristics(self): + self.name = "lassortPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterBoolean(lassortPro.BY_GPS_TIME, "sort by GPS time", False)) + self.addParameter(ParameterBoolean(lassortPro.BY_POINT_SOURCE_ID, "sort by point source ID", False)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lassort")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + if self.getParameterValue(lassortPro.BY_GPS_TIME): + commands.append("-gps_time") + if self.getParameterValue(lassortPro.BY_POINT_SOURCE_ID): + commands.append("-point_source") + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lassplit.py b/python/plugins/processing/algs/lidar/lastools/lassplit.py index 7f7ce5b2f228..1ddbd20d8f3c 100644 --- a/python/plugins/processing/algs/lidar/lastools/lassplit.py +++ b/python/plugins/processing/algs/lidar/lastools/lassplit.py @@ -46,9 +46,10 @@ def defineCharacteristics(self): self.addParameter(ParameterSelection(lassplit.OPERATION, "how to split", lassplit.OPERATIONS, 0)) self.addParameter(ParameterNumber(lassplit.INTERVAL, "interval or number", 0, None, 5)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lassplit.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lassplit")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) digits = self.getParameterValue(lassplit.DIGITS) @@ -65,5 +66,6 @@ def processAlgorithm(self, progress): interval = self.getParameterValue(lassplit.INTERVAL) commands.append(str(interval)) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasthin.py b/python/plugins/processing/algs/lidar/lastools/lasthin.py index 2aa43f6e7a78..1e736792a848 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasthin.py +++ b/python/plugins/processing/algs/lidar/lastools/lasthin.py @@ -37,6 +37,8 @@ class lasthin(LAStoolsAlgorithm): OPERATION = "OPERATION" OPERATIONS= ["lowest", "random", "highest"] WITHHELD = "WITHHELD" + CLASSIFY_AS = "CLASSIFY_AS" + CLASSIFY_AS_CLASS = "CLASSIFY_AS_CLASS" def defineCharacteristics(self): self.name = "lasthin" @@ -45,12 +47,14 @@ def defineCharacteristics(self): self.addParametersPointInputGUI() self.addParameter(ParameterNumber(lasthin.THIN_STEP, "size of grid used for thinning", 0, None, 1.0)) self.addParameter(ParameterSelection(lasthin.OPERATION, "keep particular point per cell", lasthin.OPERATIONS, 0)) - self.addParameter(ParameterBoolean(lasthin.WITHHELD, "mark points as withheld", False)) + self.addParameter(ParameterBoolean(lasthin.WITHHELD, "mark thinned-away points as withheld", False)) + self.addParameter(ParameterBoolean(lasthin.CLASSIFY_AS, "classify surviving points as class", False)) + self.addParameter(ParameterNumber(lasthin.CLASSIFY_AS_CLASS, "class", 0, None, 8)) self.addParametersPointOutputGUI() - + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasthin.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasthin")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) step = self.getParameterValue(lasthin.THIN_STEP) @@ -62,6 +66,10 @@ def processAlgorithm(self, progress): commands.append("-" + self.OPERATIONS[operation]) if self.getParameterValue(lasthin.WITHHELD): commands.append("-withheld") + if self.getParameterValue(lasthin.CLASSIFY_AS): + commands.append("-classify_as") + commands.append(str(self.getParameterValue(lasthin.CLASSIFY_AS_CLASS))) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasthinPro.py b/python/plugins/processing/algs/lidar/lastools/lasthinPro.py new file mode 100644 index 000000000000..f1893e9930b9 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasthinPro.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasthinPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean +from processing.core.parameters import ParameterNumber +from processing.core.parameters import ParameterSelection + +class lasthinPro(LAStoolsAlgorithm): + + THIN_STEP = "THIN_STEP" + OPERATION = "OPERATION" + OPERATIONS= ["lowest", "random", "highest"] + WITHHELD = "WITHHELD" + CLASSIFY_AS = "CLASSIFY_AS" + CLASSIFY_AS_CLASS = "CLASSIFY_AS_CLASS" + + def defineCharacteristics(self): + self.name = "lasthinPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterNumber(lasthinPro.THIN_STEP, "size of grid used for thinning", 0, None, 1.0)) + self.addParameter(ParameterSelection(lasthinPro.OPERATION, "keep particular point per cell", lasthinPro.OPERATIONS, 0)) + self.addParameter(ParameterBoolean(lasthinPro.WITHHELD, "mark thinned-away points as withheld", False)) + self.addParameter(ParameterBoolean(lasthinPro.CLASSIFY_AS, "classify surviving points as class", False)) + self.addParameter(ParameterNumber(lasthinPro.CLASSIFY_AS_CLASS, "class", 0, None, 8)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasthin")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + step = self.getParameterValue(lasthinPro.THIN_STEP) + if step != 0.0: + commands.append("-step") + commands.append(str(step)) + operation = self.getParameterValue(lasthinPro.OPERATION) + if operation != 0: + commands.append("-" + self.OPERATIONS[operation]) + if self.getParameterValue(lasthinPro.WITHHELD): + commands.append("-withheld") + if self.getParameterValue(lasthinPro.CLASSIFY_AS): + commands.append("-classify_as") + commands.append(str(self.getParameterValue(lasthinPro.CLASSIFY_AS_CLASS))) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lastile.py b/python/plugins/processing/algs/lidar/lastools/lastile.py index 1dd2bb786656..26158fd308d9 100644 --- a/python/plugins/processing/algs/lidar/lastools/lastile.py +++ b/python/plugins/processing/algs/lidar/lastools/lastile.py @@ -41,16 +41,19 @@ def defineCharacteristics(self): self.addParametersVerboseGUI() self.addParametersPointInputGUI() self.addParametersFilesAreFlightlinesGUI() + self.addParametersApplyFileSourceIdGUI() self.addParameter(ParameterNumber(lastile.TILE_SIZE, "tile size (side length of square tile)", None, None, 1000.0)) self.addParameter(ParameterNumber(lastile.BUFFER, "buffer around each tile", None, None, 0.0)) - self.addParameter(ParameterNumber(lastile.BUFFER, "make tiling reversible (advanced)", False)) + self.addParameter(ParameterNumber(lastile.REVERSIBLE, "make tiling reversible (advanced, usually not needed)", False)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) self.addParametersFilesAreFlightlinesCommands(commands) + self.addParametersApplyFileSourceIdCommands(commands) tile_size = self.getParameterValue(lastile.TILE_SIZE) commands.append("-tile_size") commands.append(str(tile_size)) @@ -61,5 +64,6 @@ def processAlgorithm(self, progress): if self.getParameterValue(lastile.REVERSIBLE): commands.append("-reversible") self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lastilePro.py b/python/plugins/processing/algs/lidar/lastools/lastilePro.py index e84d040ee079..9f03888b901c 100644 --- a/python/plugins/processing/algs/lidar/lastools/lastilePro.py +++ b/python/plugins/processing/algs/lidar/lastools/lastilePro.py @@ -43,6 +43,7 @@ def defineCharacteristics(self): self.group = "LAStools Production" self.addParametersPointInputFolderGUI() self.addParametersFilesAreFlightlinesGUI() + self.addParametersApplyFileSourceIdGUI() self.addParameter(ParameterNumber(lastilePro.TILE_SIZE, "tile size (side length of square tile)", None, None, 1000.0)) self.addParameter(ParameterNumber(lastilePro.BUFFER, "buffer around each tile (avoids edge artifacts)", None, None, 25.0)) self.addParameter(ParameterBoolean(lastilePro.EXTRA_PASS, "more than 2000 tiles", False)) @@ -53,10 +54,11 @@ def defineCharacteristics(self): self.addParametersVerboseGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lastile")] self.addParametersVerboseCommands(commands) self.addParametersPointInputFolderCommands(commands) self.addParametersFilesAreFlightlinesCommands(commands) + self.addParametersApplyFileSourceIdCommands(commands) tile_size = self.getParameterValue(lastilePro.TILE_SIZE) commands.append("-tile_size") commands.append(str(tile_size)) diff --git a/python/plugins/processing/algs/lidar/lastools/lasvalidate.py b/python/plugins/processing/algs/lidar/lastools/lasvalidate.py index 87aa6370e5b4..2b032562f3bb 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasvalidate.py +++ b/python/plugins/processing/algs/lidar/lastools/lasvalidate.py @@ -26,24 +26,31 @@ import os from LAStoolsUtils import LAStoolsUtils from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean from processing.core.outputs import OutputFile class lasvalidate(LAStoolsAlgorithm): + ONE_REPORT_PER_FILE = "ONE_REPORT_PER_FILE" OUTPUT = "OUTPUT" def defineCharacteristics(self): self.name = "lasvalidate" self.group = "LAStools" - self.addParametersVerboseGUI() self.addParametersPointInputGUI() + self.addParameter(ParameterBoolean(lasvalidate.ONE_REPORT_PER_FILE, "save report to '*_LVS.xml'", False)) self.addOutput(OutputFile(lasvalidate.OUTPUT, "Output XML file")) + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasvalidate.exe")] - self.addParametersVerboseCommands(commands) + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasvalidate")] self.addParametersPointInputCommands(commands) - commands.append("-o") - commands.append(self.getOutputValue(lasvalidate.OUTPUT)) + if self.getParameterValue(lasvalidate.ONE_REPORT_PER_FILE): + commands.append("-oxml") + else: + commands.append("-o") + commands.append(self.getOutputValue(lasvalidate.OUTPUT)) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasvalidatePro.py b/python/plugins/processing/algs/lidar/lastools/lasvalidatePro.py new file mode 100644 index 000000000000..f96a7f3af9f4 --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasvalidatePro.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasvalidatePro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean +from processing.core.outputs import OutputFile + +class lasvalidatePro(LAStoolsAlgorithm): + + ONE_REPORT_PER_FILE = "ONE_REPORT_PER_FILE" + OUTPUT = "OUTPUT" + + def defineCharacteristics(self): + self.name = "lasvalidatePro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterBoolean(lasvalidatePro.ONE_REPORT_PER_FILE, "generate one '*_LVS.xml' report per file", False)) + self.addOutput(OutputFile(lasvalidatePro.OUTPUT, "Output XML file")) + self.addParametersAdditionalGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasvalidate")] + self.addParametersPointInputFolderCommands(commands) + if self.getParameterValue(lasvalidatePro.ONE_REPORT_PER_FILE): + commands.append("-oxml") + else: + commands.append("-o") + commands.append(self.getOutputValue(lasvalidatePro.OUTPUT)) + self.addParametersAdditionalCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasview.py b/python/plugins/processing/algs/lidar/lastools/lasview.py index 1b3eacfa7688..e4c68b8909ad 100644 --- a/python/plugins/processing/algs/lidar/lastools/lasview.py +++ b/python/plugins/processing/algs/lidar/lastools/lasview.py @@ -2,7 +2,7 @@ """ *************************************************************************** - lasinfo.py + lasview.py --------------------- Date : August 2012 Copyright : (C) 2012 by Victor Olaya @@ -31,20 +31,42 @@ from LAStoolsUtils import LAStoolsUtils from LAStoolsAlgorithm import LAStoolsAlgorithm +from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterNumber + class lasview(LAStoolsAlgorithm): - INPUT = "INPUT" - OUTPUT = "OUTPUT" + POINTS = "POINTS" + + SIZE = "SIZE" + SIZES = ["1024 768", "800 600", "1200 900", "1200 400", "1550 900", "1550 1150"] + + COLORING = "COLORING" + COLORINGS = ["default", "classification", "elevation1", "elevation2", "intensity", "return", "flightline", "rgb"] def defineCharacteristics(self): self.name = "lasview" self.group = "LAStools" self.addParametersVerboseGUI() self.addParametersPointInputGUI() + self.addParameter(ParameterNumber(lasview.POINTS, "max number of points sampled", 100000, 20000000, 5000000)) + self.addParameter(ParameterSelection(lasview.COLORING, "color by", lasview.COLORINGS, 0)) + self.addParameter(ParameterSelection(lasview.SIZE, "window size (x y) in pixels", lasview.SIZES, 0)) + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasview.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasview")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) + points = self.getParameterValue(lasview.POINTS) + commands.append("-points " + str(points)) + coloring = self.getParameterValue(lasview.COLORING) + if coloring != 0: + commands.append("-color_by_" + lasview.COLORINGS[coloring]) + size = self.getParameterValue(lasview.SIZE) + if size != 0: + commands.append("-win " + lasview.SIZES[size]) + self.addParametersAdditionalCommands(commands) + print commands LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/lasviewPro.py b/python/plugins/processing/algs/lidar/lastools/lasviewPro.py new file mode 100644 index 000000000000..14edab44aa7f --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/lasviewPro.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + lasviewPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterBoolean +from processing.core.parameters import ParameterNumber + +class lasviewPro(LAStoolsAlgorithm): + + POINTS = "POINTS" + + SIZE = "SIZE" + SIZES = ["1024 768", "800 600", "1200 900", "1200 400", "1550 900", "1550 1150"] + + COLORING = "COLORING" + COLORINGS = ["default", "classification", "elevation1", "elevation2", "intensity", "return", "flightline", "rgb"] + + def defineCharacteristics(self): + self.name = "lasviewPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParametersFilesAreFlightlinesGUI() + self.addParameter(ParameterNumber(lasviewPro.POINTS, "max number of points sampled", 100000, 20000000, 5000000)) + self.addParameter(ParameterSelection(lasviewPro.COLORING, "color by", lasviewPro.COLORINGS, 0)) + self.addParameter(ParameterSelection(lasviewPro.SIZE, "window size (x y) in pixels", lasviewPro.SIZES, 0)) + self.addParametersAdditionalGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "lasview")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + self.addParametersFilesAreFlightlinesCommands(commands) + points = self.getParameterValue(lasviewPro.POINTS) + commands.append("-points " + str(points)) + self.addParametersAdditionalCommands(commands) + coloring = self.getParameterValue(lasviewPro.COLORING) + if coloring != 0: + commands.append("-color_by_" + lasviewPro.COLORINGS[coloring]) + size = self.getParameterValue(lasviewPro.SIZE) + if size != 0: + commands.append("-win " + lasviewPro.SIZES[size]) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/laszip.py b/python/plugins/processing/algs/lidar/lastools/laszip.py index 87faef099bbb..a79af937ff89 100644 --- a/python/plugins/processing/algs/lidar/lastools/laszip.py +++ b/python/plugins/processing/algs/lidar/lastools/laszip.py @@ -32,6 +32,8 @@ class laszip(LAStoolsAlgorithm): REPORT_SIZE = "REPORT_SIZE" + CREATE_LAX = "CREATE_LAX" + APPEND_LAX = "APPEND_LAX" def defineCharacteristics(self): self.name = "laszip" @@ -39,15 +41,23 @@ def defineCharacteristics(self): self.addParametersVerboseGUI() self.addParametersPointInputGUI() self.addParameter(ParameterBoolean(laszip.REPORT_SIZE, "only report size", False)) + self.addParameter(ParameterBoolean(laszip.CREATE_LAX, "create spatial indexing file (*.lax)", False)) + self.addParameter(ParameterBoolean(laszip.APPEND_LAX, "append *.lax into *.laz file", False)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "laszip.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "laszip")] self.addParametersVerboseCommands(commands) self.addParametersPointInputCommands(commands) if self.getParameterValue(laszip.REPORT_SIZE): commands.append("-size") + if self.getParameterValue(laszip.CREATE_LAX): + commands.append("-lax") + if self.getParameterValue(laszip.APPEND_LAX): + commands.append("-append") self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/laszipPro.py b/python/plugins/processing/algs/lidar/lastools/laszipPro.py new file mode 100644 index 000000000000..9e538b96b3be --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/laszipPro.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + laszipPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterBoolean + +class laszipPro(LAStoolsAlgorithm): + + REPORT_SIZE = "REPORT_SIZE" + CREATE_LAX = "CREATE_LAX" + APPEND_LAX = "APPEND_LAX" + + def defineCharacteristics(self): + self.name = "laszipPro" + self.group = "LAStools Production" + self.addParametersPointInputFolderGUI() + self.addParameter(ParameterBoolean(laszipPro.REPORT_SIZE, "only report size", False)) + self.addParameter(ParameterBoolean(laszipPro.CREATE_LAX, "create spatial indexing file (*.lax)", False)) + self.addParameter(ParameterBoolean(laszipPro.APPEND_LAX, "append *.lax into *.laz file", False)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "laszip")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + if self.getParameterValue(laszipPro.REPORT_SIZE): + commands.append("-size") + if self.getParameterValue(laszipPro.CREATE_LAX): + commands.append("-lax") + if self.getParameterValue(laszipPro.APPEND_LAX): + commands.append("-append") + self.addParametersCoresCommands(commands) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/shp2las.py b/python/plugins/processing/algs/lidar/lastools/shp2las.py index 5702a75b1220..4f53ae99f0f6 100644 --- a/python/plugins/processing/algs/lidar/lastools/shp2las.py +++ b/python/plugins/processing/algs/lidar/lastools/shp2las.py @@ -44,9 +44,10 @@ def defineCharacteristics(self): self.addParameter(ParameterNumber(shp2las.SCALE_FACTOR_XY, "resolution of x and y coordinate", False, False, 0.01)) self.addParameter(ParameterNumber(shp2las.SCALE_FACTOR_Z, "resolution of z coordinate", False, False, 0.01)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "shp2las.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "shp2las")] self.addParametersVerboseCommands(commands) commands.append("-i") commands.append(self.getParameterValue(shp2las.INPUT)) @@ -56,5 +57,6 @@ def processAlgorithm(self, progress): commands.append("-set_scale_factor") commands.append(str(scale_factor_xy) + " " + str(scale_factor_xy) + " " + str(scale_factor_z)) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/txt2las.py b/python/plugins/processing/algs/lidar/lastools/txt2las.py index 75760f15330b..36d5ca5fd2bd 100644 --- a/python/plugins/processing/algs/lidar/lastools/txt2las.py +++ b/python/plugins/processing/algs/lidar/lastools/txt2las.py @@ -2,7 +2,7 @@ """ *************************************************************************** - las2txt.py + txt2las.py --------------------- Date : September 2013 Copyright : (C) 2013 by Martin Isenburg @@ -30,34 +30,49 @@ from processing.core.parameters import ParameterNumber from processing.core.parameters import ParameterString from processing.core.parameters import ParameterFile +from processing.core.parameters import ParameterSelection class txt2las(LAStoolsAlgorithm): INPUT = "INPUT" - PARSE_STRING = "PARSE_STRING" + PARSE = "PARSE" SKIP = "SKIP" SCALE_FACTOR_XY = "SCALE_FACTOR_XY" SCALE_FACTOR_Z = "SCALE_FACTOR_Z" + STATE_PLANES = ["---", "AK_10", "AK_2", "AK_3", "AK_4", "AK_5", "AK_6", "AK_7", "AK_8", "AK_9", "AL_E", "AL_W", "AR_N", "AR_S", "AZ_C", "AZ_E", "AZ_W", "CA_I", "CA_II", "CA_III", "CA_IV", "CA_V", "CA_VI", "CA_VII", "CO_C", "CO_N", "CO_S", "CT", "DE", "FL_E", "FL_N", "FL_W", "GA_E", "GA_W", "HI_1", "HI_2", "HI_3", "HI_4", "HI_5", "IA_N", "IA_S", "ID_C", "ID_E", "ID_W", "IL_E", "IL_W", "IN_E", "IN_W", "KS_N", "KS_S", "KY_N", "KY_S", "LA_N", "LA_S", "MA_I", "MA_M", "MD", "ME_E", "ME_W", "MI_C", "MI_N", "MI_S", "MN_C", "MN_N", "MN_S", "MO_C", "MO_E", "MO_W", "MS_E", "MS_W", "MT_C", "MT_N", "MT_S", "NC", "ND_N", "ND_S", "NE_N", "NE_S", "NH", "NJ", "NM_C", "NM_E", "NM_W", "NV_C", "NV_E", "NV_W", "NY_C", "NY_E", "NY_LI", "NY_W", "OH_N", "OH_S", "OK_N", "OK_S", "OR_N", "OR_S", "PA_N", "PA_S", "PR", "RI", "SC_N", "SC_S", "SD_N", "SD_S", "St.Croix", "TN", "TX_C", "TX_N", "TX_NC", "TX_S", "TX_SC", "UT_C", "UT_N", "UT_S", "VA_N", "VA_S", "VT", "WA_N", "WA_S", "WI_C", "WI_N", "WI_S", "WV_N", "WV_S", "WY_E", "WY_EC", "WY_W", "WY_WC"] + + UTM_ZONES = ["---", "1 (north)", "2 (north)", "3 (north)", "4 (north)", "5 (north)", "6 (north)", "7 (north)", "8 (north)", "9 (north)", "10 (north)", "11 (north)", "12 (north)", "13 (north)", "14 (north)", "15 (north)", "16 (north)", "17 (north)", "18 (north)", "19 (north)", "20 (north)", "21 (north)", "22 (north)", "23 (north)", "24 (north)", "25 (north)", "26 (north)", "27 (north)", "28 (north)", "29 (north)", "30 (north)", "31 (north)", "32 (north)", "33 (north)", "34 (north)", "35 (north)", "36 (north)", "37 (north)", "38 (north)", "39 (north)", "40 (north)", "41 (north)", "42 (north)", "43 (north)", "44 (north)", "45 (north)", "46 (north)", "47 (north)", "48 (north)", "49 (north)", "50 (north)", "51 (north)", "52 (north)", "53 (north)", "54 (north)", "55 (north)", "56 (north)", "57 (north)", "58 (north)", "59 (north)", "60 (north)", "1 (south)", "2 (south)", "3 (south)", "4 (south)", "5 (south)", "6 (south)", "7 (south)", "8 (south)", "9 (south)", "10 (south)", "11 (south)", "12 (south)", "13 (south)", "14 (south)", "15 (south)", "16 (south)", "17 (south)", "18 (south)", "19 (south)", "20 (south)", "21 (south)", "22 (south)", "23 (south)", "24 (south)", "25 (south)", "26 (south)", "27 (south)", "28 (south)", "29 (south)", "30 (south)", "31 (south)", "32 (south)", "33 (south)", "34 (south)", "35 (south)", "36 (south)", "37 (south)", "38 (south)", "39 (south)", "40 (south)", "41 (south)", "42 (south)", "43 (south)", "44 (south)", "45 (south)", "46 (south)", "47 (south)", "48 (south)", "49 (south)", "50 (south)", "51 (south)", "52 (south)", "53 (south)", "54 (south)", "55 (south)", "56 (south)", "57 (south)", "58 (south)", "59 (south)", "60 (south)"] + + PROJECTIONS = ["---", "utm", "sp83", "sp27", "longlat", "latlong", "ecef"] + + PROJECTION = "PROJECTION" + UTM = "UTM" + SP = "SP" + def defineCharacteristics(self): self.name = "txt2las" self.group = "LAStools" self.addParametersVerboseGUI() self.addParameter(ParameterFile(txt2las.INPUT, "Input ASCII file")) - self.addParameter(ParameterString(txt2las.PARSE_STRING, "parse lines as", "xyz")) - self.addParameter(ParameterNumber(txt2las.SKIP, "skip the first n lines", False, False, 0)) - self.addParameter(ParameterNumber(txt2las.SCALE_FACTOR_XY, "resolution of x and y coordinate", False, False, 0.01)) - self.addParameter(ParameterNumber(txt2las.SCALE_FACTOR_Z, "resolution of z coordinate", False, False, 0.01)) + self.addParameter(ParameterString(txt2las.PARSE, "parse lines as", "xyz")) + self.addParameter(ParameterNumber(txt2las.SKIP, "skip the first n lines", 0, None, 0)) + self.addParameter(ParameterNumber(txt2las.SCALE_FACTOR_XY, "resolution of x and y coordinate", 0, None, 0.01)) + self.addParameter(ParameterNumber(txt2las.SCALE_FACTOR_Z, "resolution of z coordinate", 0, None, 0.01)) + self.addParameter(ParameterSelection(txt2las.PROJECTION, "projection", txt2las.PROJECTIONS, 0)) + self.addParameter(ParameterSelection(txt2las.UTM, "utm zone", txt2las.UTM_ZONES, 0)) + self.addParameter(ParameterSelection(txt2las.SP, "state plane code", txt2las.STATE_PLANES, 0)) self.addParametersPointOutputGUI() + self.addParametersAdditionalGUI() def processAlgorithm(self, progress): - commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "txt2las.exe")] + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "txt2las")] self.addParametersVerboseCommands(commands) commands.append("-i") commands.append(self.getParameterValue(txt2las.INPUT)) - parse_string = self.getParameterValue(txt2las.PARSE_STRING) + parse_string = self.getParameterValue(txt2las.PARSE) if parse_string != "xyz": - commands.append("-parse_string") + commands.append("-parse") commands.append(parse_string) skip = self.getParameterValue(txt2las.SKIP) if parse_string != 0: @@ -66,8 +81,26 @@ def processAlgorithm(self, progress): scale_factor_xy = self.getParameterValue(txt2las.SCALE_FACTOR_XY) scale_factor_z = self.getParameterValue(txt2las.SCALE_FACTOR_Z) if scale_factor_xy != 0.01 or scale_factor_z != 0.01: - commands.append("-set_scale_factor") + commands.append("-set_scale") commands.append(str(scale_factor_xy) + " " + str(scale_factor_xy) + " " + str(scale_factor_z)) + projection = self.getParameterValue(txt2las.PROJECTION) + if projection != 0: + if projection == 1: + utm_zone = self.getParameterValue(txt2las.UTM) + if utm_zone != 0: + commands.append("-" + txt2las.PROJECTIONS[projection]) + if utm_zone > 60: + commands.append(str(utm_zone - 60) + "M") + else: + commands.append(str(utm_zone) + "N") + elif projection < 4: + sp_code = self.getParameterValue(txt2las.SP) + if sp_code != 0: + commands.append("-" + txt2las.PROJECTIONS[projection]) + commands.append(txt2las.STATE_PLANES[sp_code]) + else: + commands.append("-" + txt2las.PROJECTIONS[projection]) self.addParametersPointOutputCommands(commands) + self.addParametersAdditionalCommands(commands) LAStoolsUtils.runLAStools(commands, progress) diff --git a/python/plugins/processing/algs/lidar/lastools/txt2lasPro.py b/python/plugins/processing/algs/lidar/lastools/txt2lasPro.py new file mode 100644 index 000000000000..4f52c35a411d --- /dev/null +++ b/python/plugins/processing/algs/lidar/lastools/txt2lasPro.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + txt2lasPro.py + --------------------- + Date : October 2014 + Copyright : (C) 2014 by Martin Isenburg + Email : martin near rapidlasso point com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'Martin Isenburg' +__date__ = 'October 2014' +__copyright__ = '(C) 2014, Martin Isenburg' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from LAStoolsUtils import LAStoolsUtils +from LAStoolsAlgorithm import LAStoolsAlgorithm + +from processing.core.parameters import ParameterNumber +from processing.core.parameters import ParameterString +from processing.core.parameters import ParameterSelection + +class txt2lasPro(LAStoolsAlgorithm): + + PARSE = "PARSE" + SKIP = "SKIP" + SCALE_FACTOR_XY = "SCALE_FACTOR_XY" + SCALE_FACTOR_Z = "SCALE_FACTOR_Z" + + STATE_PLANES = ["---", "AK_10", "AK_2", "AK_3", "AK_4", "AK_5", "AK_6", "AK_7", "AK_8", "AK_9", "AL_E", "AL_W", "AR_N", "AR_S", "AZ_C", "AZ_E", "AZ_W", "CA_I", "CA_II", "CA_III", "CA_IV", "CA_V", "CA_VI", "CA_VII", "CO_C", "CO_N", "CO_S", "CT", "DE", "FL_E", "FL_N", "FL_W", "GA_E", "GA_W", "HI_1", "HI_2", "HI_3", "HI_4", "HI_5", "IA_N", "IA_S", "ID_C", "ID_E", "ID_W", "IL_E", "IL_W", "IN_E", "IN_W", "KS_N", "KS_S", "KY_N", "KY_S", "LA_N", "LA_S", "MA_I", "MA_M", "MD", "ME_E", "ME_W", "MI_C", "MI_N", "MI_S", "MN_C", "MN_N", "MN_S", "MO_C", "MO_E", "MO_W", "MS_E", "MS_W", "MT_C", "MT_N", "MT_S", "NC", "ND_N", "ND_S", "NE_N", "NE_S", "NH", "NJ", "NM_C", "NM_E", "NM_W", "NV_C", "NV_E", "NV_W", "NY_C", "NY_E", "NY_LI", "NY_W", "OH_N", "OH_S", "OK_N", "OK_S", "OR_N", "OR_S", "PA_N", "PA_S", "PR", "RI", "SC_N", "SC_S", "SD_N", "SD_S", "St.Croix", "TN", "TX_C", "TX_N", "TX_NC", "TX_S", "TX_SC", "UT_C", "UT_N", "UT_S", "VA_N", "VA_S", "VT", "WA_N", "WA_S", "WI_C", "WI_N", "WI_S", "WV_N", "WV_S", "WY_E", "WY_EC", "WY_W", "WY_WC"] + + UTM_ZONES = ["---", "1 (north)", "2 (north)", "3 (north)", "4 (north)", "5 (north)", "6 (north)", "7 (north)", "8 (north)", "9 (north)", "10 (north)", "11 (north)", "12 (north)", "13 (north)", "14 (north)", "15 (north)", "16 (north)", "17 (north)", "18 (north)", "19 (north)", "20 (north)", "21 (north)", "22 (north)", "23 (north)", "24 (north)", "25 (north)", "26 (north)", "27 (north)", "28 (north)", "29 (north)", "30 (north)", "31 (north)", "32 (north)", "33 (north)", "34 (north)", "35 (north)", "36 (north)", "37 (north)", "38 (north)", "39 (north)", "40 (north)", "41 (north)", "42 (north)", "43 (north)", "44 (north)", "45 (north)", "46 (north)", "47 (north)", "48 (north)", "49 (north)", "50 (north)", "51 (north)", "52 (north)", "53 (north)", "54 (north)", "55 (north)", "56 (north)", "57 (north)", "58 (north)", "59 (north)", "60 (north)", "1 (south)", "2 (south)", "3 (south)", "4 (south)", "5 (south)", "6 (south)", "7 (south)", "8 (south)", "9 (south)", "10 (south)", "11 (south)", "12 (south)", "13 (south)", "14 (south)", "15 (south)", "16 (south)", "17 (south)", "18 (south)", "19 (south)", "20 (south)", "21 (south)", "22 (south)", "23 (south)", "24 (south)", "25 (south)", "26 (south)", "27 (south)", "28 (south)", "29 (south)", "30 (south)", "31 (south)", "32 (south)", "33 (south)", "34 (south)", "35 (south)", "36 (south)", "37 (south)", "38 (south)", "39 (south)", "40 (south)", "41 (south)", "42 (south)", "43 (south)", "44 (south)", "45 (south)", "46 (south)", "47 (south)", "48 (south)", "49 (south)", "50 (south)", "51 (south)", "52 (south)", "53 (south)", "54 (south)", "55 (south)", "56 (south)", "57 (south)", "58 (south)", "59 (south)", "60 (south)"] + + PROJECTIONS = ["---", "utm", "sp83", "sp27", "longlat", "latlong", "ecef"] + + PROJECTION = "PROJECTION" + UTM = "UTM" + SP = "SP" + + def defineCharacteristics(self): + self.name = "txt2lasPro" + self.group = "LAStools Production" + self.addParametersGenericInputFolderGUI("*.txt") + self.addParameter(ParameterString(txt2lasPro.PARSE, "parse lines as", "xyz")) + self.addParameter(ParameterNumber(txt2lasPro.SKIP, "skip the first n lines", 0, None, 0)) + self.addParameter(ParameterNumber(txt2lasPro.SCALE_FACTOR_XY, "resolution of x and y coordinate", 0, None, 0.01)) + self.addParameter(ParameterNumber(txt2lasPro.SCALE_FACTOR_Z, "resolution of z coordinate", 0, None, 0.01)) + self.addParameter(ParameterSelection(txt2lasPro.PROJECTION, "projection", txt2lasPro.PROJECTIONS, 0)) + self.addParameter(ParameterSelection(txt2lasPro.UTM, "utm zone", txt2lasPro.UTM_ZONES, 0)) + self.addParameter(ParameterSelection(txt2lasPro.SP, "state plane code", txt2lasPro.STATE_PLANES, 0)) + self.addParametersOutputDirectoryGUI() + self.addParametersOutputAppendixGUI() + self.addParametersPointOutputFormatGUI() + self.addParametersAdditionalGUI() + self.addParametersCoresGUI() + self.addParametersVerboseGUI() + + def processAlgorithm(self, progress): + commands = [os.path.join(LAStoolsUtils.LAStoolsPath(), "bin", "txt2las")] + self.addParametersVerboseCommands(commands) + self.addParametersPointInputFolderCommands(commands) + parse_string = self.getParameterValue(txt2lasPro.PARSE) + if parse_string != "xyz": + commands.append("-parse") + commands.append(parse_string) + skip = self.getParameterValue(txt2lasPro.SKIP) + if parse_string != 0: + commands.append("-skip") + commands.append(str(skip)) + scale_factor_xy = self.getParameterValue(txt2lasPro.SCALE_FACTOR_XY) + scale_factor_z = self.getParameterValue(txt2lasPro.SCALE_FACTOR_Z) + if scale_factor_xy != 0.01 or scale_factor_z != 0.01: + commands.append("-set_scale") + commands.append(str(scale_factor_xy) + " " + str(scale_factor_xy) + " " + str(scale_factor_z)) + projection = self.getParameterValue(txt2lasPro.PROJECTION) + if projection != 0: + if projection == 1: + utm_zone = self.getParameterValue(txt2lasPro.UTM) + if utm_zone != 0: + commands.append("-" + txt2lasPro.PROJECTIONS[projection]) + if utm_zone > 60: + commands.append(str(utm_zone - 60) + "M") + else: + commands.append(str(utm_zone) + "N") + elif projection < 4: + sp_code = self.getParameterValue(txt2lasPro.SP) + if sp_code != 0: + commands.append("-" + txt2lasPro.PROJECTIONS[projection]) + commands.append(txt2lasPro.STATE_PLANES[sp_code]) + else: + commands.append("-" + txt2lasPro.PROJECTIONS[projection]) + self.addParametersOutputDirectoryCommands(commands) + self.addParametersOutputAppendixCommands(commands) + self.addParametersPointOutputFormatCommands(commands) + self.addParametersAdditionalCommands(commands) + self.addParametersCoresCommands(commands) + + LAStoolsUtils.runLAStools(commands, progress)