Skip to content

Commit 6195e81

Browse files
author
volayaf
committed
Added ParameterFile and OutputFile
Added LasTools provider and a few algorithms (still quite a few left, to be added soon) git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@122 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
1 parent 97dbc83 commit 6195e81

24 files changed

+503
-8
lines changed

src/sextante/core/LayerExporter.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def exportVectorLayer(layer):
4646
return str(layer.source())
4747

4848

49+
4950
@staticmethod
5051
def exportRasterLayer(layer):
5152
'''Takes a QgsRasterLayer and returns the filename to refer to it, which allows external

src/sextante/core/Sextante.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
from sextante.modeler.ModelerOnlyAlgorithmProvider import ModelerOnlyAlgorithmProvider
2020
from sextante.gdal.GdalAlgorithmProvider import GdalAlgorithmProvider
2121
from sextante.otb.OTBAlgorithmProvider import OTBAlgorithmProvider
22+
from sextante.lastools.LasToolsAlgorithmProvider import LasToolsAlgorithmProvider
23+
from sextante.core.SextanteUtils import SextanteUtils
2224

2325
class Sextante:
2426

@@ -80,11 +82,13 @@ def initialize():
8082
Sextante.addProvider(MMQGISAlgorithmProvider())
8183
Sextante.addProvider(FToolsAlgorithmProvider())
8284
Sextante.addProvider(ModelerOnlyAlgorithmProvider())
85+
Sextante.addProvider(GdalAlgorithmProvider())
86+
if SextanteUtils.isWindows():
87+
Sextante.addProvider(LasToolsAlgorithmProvider())
88+
Sextante.addProvider(OTBAlgorithmProvider())
8389
Sextante.addProvider(RAlgorithmProvider())
8490
Sextante.addProvider(SagaAlgorithmProvider())
8591
Sextante.addProvider(GrassAlgorithmProvider())
86-
Sextante.addProvider(GdalAlgorithmProvider())
87-
Sextante.addProvider(OTBAlgorithmProvider())
8892
Sextante.addProvider(ScriptAlgorithmProvider())
8993
Sextante.modeler.initializeSettings();
9094
#and initialize
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from PyQt4 import QtGui, QtCore
2+
from sextante.core.SextanteUtils import SextanteUtils
3+
4+
class FileSelectionPanel(QtGui.QWidget):
5+
6+
def __init__(self):
7+
super(FileSelectionPanel, self).__init__(None)
8+
self.horizontalLayout = QtGui.QHBoxLayout(self)
9+
self.horizontalLayout.setSpacing(2)
10+
self.horizontalLayout.setMargin(0)
11+
self.text = QtGui.QLineEdit()
12+
self.text.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
13+
self.horizontalLayout.addWidget(self.text)
14+
self.pushButton = QtGui.QPushButton()
15+
self.pushButton.setText("...")
16+
self.pushButton.clicked.connect(self.showSelectionDialog)
17+
self.horizontalLayout.addWidget(self.pushButton)
18+
self.setLayout(self.horizontalLayout)
19+
20+
def showSelectionDialog(self):
21+
filename = QtGui.QFileDialog.getOpenFileName(self, "Open file", QtCore.QString(""), "*.*")
22+
if filename:
23+
self.text.setText(str(filename))
24+
25+
def getValue(self):
26+
s = str(self.text.text())
27+
if SextanteUtils.isWindows():
28+
s = s.replace("/", "\\")
29+
return s

src/sextante/gui/ParametersDialog.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from sextante.parameters.ParameterNumber import ParameterNumber
2020

2121
from sextante.gui.ParametersPanel import ParametersPanel
22+
from sextante.parameters.ParameterFile import ParameterFile
2223

2324
try:
2425
_fromUtf8 = QtCore.QString.fromUtf8
@@ -123,7 +124,7 @@ def setParamValue(self, param, widget):
123124
for index in widget.selectedoptions:
124125
value.append(options[index])
125126
return param.setValue(value)
126-
elif isinstance(param, ParameterNumber):
127+
elif isinstance(param, (ParameterNumber, ParameterFile)):
127128
return param.setValue(widget.getValue())
128129
else:
129130
return param.setValue(str(widget.text()))
@@ -153,7 +154,7 @@ def accept(self):
153154
QApplication.restoreOverrideCursor()
154155
if ret:
155156
SextantePostprocessing.handleAlgorithmResults(self.alg)
156-
157+
157158
self.dialog.executed = True
158159
self.dialog.close()
159160

src/sextante/gui/ParametersPanel.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
from sextante.gui.ExtentSelectionPanel import ExtentSelectionPanel
2121
from sextante.parameters.ParameterExtent import ParameterExtent
2222
from sextante.core.SextanteConfig import SextanteConfig
23+
from sextante.parameters.ParameterFile import ParameterFile
24+
from sextante.gui.FileSelectionPanel import FileSelectionPanel
2325

2426
class ParametersPanel(QtGui.QWidget):
2527

@@ -176,6 +178,8 @@ def getWidgetFromParameter(self, param):
176178
item = FixedTablePanel(param)
177179
elif isinstance(param, ParameterRange):
178180
item = RangePanel(param)
181+
elif isinstance(param, ParameterFile):
182+
item = FileSelectionPanel()
179183
elif isinstance(param, ParameterMultipleInput):
180184
if param.datatype == ParameterMultipleInput.TYPE_RASTER:
181185
options = QGisLayers.getRasterLayers()

src/sextante/gui/SextantePostprocessing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from PyQt4.QtGui import *
1010
from sextante.core.SextanteConfig import SextanteConfig
1111
import os
12+
from sextante.outputs.OutputFile import OutputFile
1213
class SextantePostprocessing:
1314

1415
@staticmethod

src/sextante/images/tool.png

3.2 KB
Loading
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from sextante.lastools.LasToolsUtils import LasToolsUtils
2+
from sextante.core.GeoAlgorithm import GeoAlgorithm
3+
from sextante.parameters.ParameterBoolean import ParameterBoolean
4+
5+
class LasToolsAlgorithm(GeoAlgorithm):
6+
7+
FIRST_ONLY = "FIRST_ONLY"
8+
LAST_ONLY = "LAST_ONLY"
9+
SINGLE_RET_ONLY = "SINGLE_RET_ONLY"
10+
DOUBLE_RET_ONLY = "DOUBLE_RET_ONLY"
11+
12+
def checkBeforeOpeningParametersDialog(self):
13+
path = LasToolsUtils.LasToolsPath()
14+
if path == "":
15+
return "SAGA folder is not configured.\nPlease configure it before running SAGA algorithms."
16+
17+
def addCommonParameters(self):
18+
self.addParameter(ParameterBoolean(LasToolsAlgorithm.FIRST_ONLY, "Keep first return only", False))
19+
self.addParameter(ParameterBoolean(LasToolsAlgorithm.LAST_ONLY, "Keep last return only", False))
20+
self.addParameter(ParameterBoolean(LasToolsAlgorithm.SINGLE_RET_ONLY, "Keep single returns only", False))
21+
self.addParameter(ParameterBoolean(LasToolsAlgorithm.DOUBLE_RET_ONLY, "Keep double returns only", False))
22+
23+
def addCommonParameterValuesToCommand(self, commands):
24+
if self.getParameterValue(LasToolsAlgorithm.LAST_ONLY):
25+
commands.append("-last_only")
26+
if self.getParameterValue(LasToolsAlgorithm.FIRST_ONLY):
27+
commands.append("-first_only")
28+
if self.getParameterValue(LasToolsAlgorithm.SINGLE_RET_ONLY):
29+
commands.append("-single_returns_only")
30+
if self.getParameterValue(LasToolsAlgorithm.DOUBLE_RET_ONLY):
31+
commands.append("-double_returns_only")
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import os
2+
from PyQt4.QtCore import *
3+
from PyQt4.QtGui import *
4+
from sextante.core.AlgorithmProvider import AlgorithmProvider
5+
from sextante.lastools.LasToolsUtils import LasToolsUtils
6+
from sextante.core.SextanteConfig import Setting, SextanteConfig
7+
from sextante.lastools.las2shp import las2shp
8+
from sextante.lastools.las2dem import las2dem
9+
from sextante.lastools.lasboundary import lasboundary
10+
from sextante.lastools.las2iso import las2iso
11+
from sextante.lastools.lasgrid import lasgrid
12+
from sextante.lastools.lasground import lasground
13+
from sextante.lastools.lasinfo import lasinfo
14+
15+
16+
class LasToolsAlgorithmProvider(AlgorithmProvider):
17+
18+
def __init__(self):
19+
AlgorithmProvider.__init__(self)
20+
self.algsList = [las2shp(), lasboundary(), las2dem(), las2iso(), lasgrid(), lasground(), lasinfo()]
21+
22+
def initializeSettings(self):
23+
AlgorithmProvider.initializeSettings(self)
24+
SextanteConfig.addSetting(Setting("LASTools", LasToolsUtils.LASTOOLS_FOLDER, "LASTools folder", LasToolsUtils.LasToolsPath()))
25+
def getName(self):
26+
return "LASTools"
27+
28+
def getIcon(self):
29+
return QIcon(os.path.dirname(__file__) + "/../images/tool.png")
30+
31+
def _loadAlgorithms(self):
32+
self.algs = self.algsList
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from PyQt4.QtCore import *
2+
from PyQt4.QtGui import *
3+
import subprocess
4+
from sextante.core.SextanteLog import SextanteLog
5+
from sextante.core.SextanteConfig import SextanteConfig
6+
7+
class LasToolsUtils():
8+
9+
LASTOOLS_FOLDER = "LASTOOLS_FOLDER"
10+
11+
@staticmethod
12+
def LasToolsPath():
13+
folder = SextanteConfig.getSetting(LasToolsUtils.LASTOOLS_FOLDER)
14+
if folder == None:
15+
folder =""
16+
17+
return folder
18+
19+
@staticmethod
20+
def runLasTools(commands, progress):
21+
loglines = []
22+
loglines.append("LasTools execution console output")
23+
proc = subprocess.Popen(commands, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=False).stdout
24+
for line in iter(proc.readline, ""):
25+
loglines.append(line)
26+
SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)

src/sextante/lastools/__init__.py

Whitespace-only changes.

src/sextante/lastools/las2dem.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import os
2+
from PyQt4 import QtGui
3+
from sextante.parameters.ParameterString import ParameterString
4+
from sextante.lastools.LasToolsUtils import LasToolsUtils
5+
from sextante.parameters.ParameterBoolean import ParameterBoolean
6+
from sextante.outputs.OutputRaster import OutputRaster
7+
from sextante.lastools.LasToolsAlgorithm import LasToolsAlgorithm
8+
from sextante.parameters.ParameterFile import ParameterFile
9+
10+
class las2dem(LasToolsAlgorithm):
11+
12+
INPUT = "INPUT"
13+
OUTPUT = "OUTPUT"
14+
INTENSITY = "INTENSITY"
15+
16+
def getIcon(self):
17+
filepath = os.path.dirname(__file__) + "/../images/tool.png"
18+
return QtGui.QIcon(filepath)
19+
20+
def defineCharacteristics(self):
21+
self.name = "las2dem"
22+
self.group = "Tools"
23+
self.addParameter(ParameterFile(las2dem.INPUT, "Input las layer", ""))
24+
self.addParameter(ParameterBoolean(las2dem.INTENSITY, "Use intensity instead of elevation", False))
25+
self.addOutput(OutputRaster(las2dem.OUTPUT, "Output dem layer"))
26+
self.addCommonParameters()
27+
28+
def processAlgorithm(self, progress):
29+
commands = [os.path.join(LasToolsUtils.LasToolsPath(), "bin", "las2dem.exe")]
30+
commands.append("-i")
31+
commands.append(self.getParameterValue(las2dem.INPUT))
32+
commands.append("-o")
33+
commands.append(self.getOutputValue(las2dem.OUTPUT))
34+
if self.getParameterValue(las2dem.INTENSITY):
35+
commands.append("-intensity")
36+
self.addCommonParameterValuesToCommand(commands)
37+
38+
LasToolsUtils.runLasTools(commands, progress)

src/sextante/lastools/las2iso.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import os
2+
from PyQt4 import QtGui
3+
from sextante.parameters.ParameterString import ParameterString
4+
from sextante.lastools.LasToolsUtils import LasToolsUtils
5+
from sextante.parameters.ParameterBoolean import ParameterBoolean
6+
from sextante.lastools.LasToolsAlgorithm import LasToolsAlgorithm
7+
from sextante.parameters.ParameterNumber import ParameterNumber
8+
from sextante.outputs.OutputVector import OutputVector
9+
from sextante.parameters.ParameterFile import ParameterFile
10+
11+
class las2iso(LasToolsAlgorithm):
12+
13+
INPUT = "INPUT"
14+
OUTPUT = "OUTPUT"
15+
CLEAN = "CLEAN"
16+
SIMPLIFY = "SIMPLIFY"
17+
INTERVAL = "INTERVAL"
18+
19+
def getIcon(self):
20+
filepath = os.path.dirname(__file__) + "/../images/tool.png"
21+
return QtGui.QIcon(filepath)
22+
23+
def defineCharacteristics(self):
24+
self.name = "las2iso"
25+
self.group = "Tools"
26+
self.addParameter(ParameterFile(las2iso.INPUT, "Input las layer", ""))
27+
self.addParameter(ParameterNumber(las2iso.INTERVAL, "Interval between isolines", 0, None, 10.0))
28+
self.addParameter(ParameterNumber(las2iso.CLEAN, "Clean isolines shorter than (0 = do not clean)", None, None, 0.0))
29+
self.addParameter(ParameterNumber(las2iso.SIMPLIFY, "simplify segments shorter than (0 = do not simplify)", None, None, 0.0))
30+
self.addOutput(OutputVector(las2iso.OUTPUT, "Output isolines"))
31+
self.addCommonParameters()
32+
33+
def processAlgorithm(self, progress):
34+
commands = [os.path.join(LasToolsUtils.LasToolsPath(), "bin", "las2iso.exe")]
35+
commands.append("-i")
36+
commands.append(self.getParameterValue(las2iso.INPUT))
37+
commands.append("-o")
38+
commands.append(self.getOutputValue(las2iso.OUTPUT))
39+
commands.append("-iso_every")
40+
commands.append(str(self.getParameterValue(las2iso.INTERVAL)))
41+
simplify = self.getParameterValue(las2iso.SIMPLIFY)
42+
if simplify != 0:
43+
commands.append("-simplify")
44+
commands.append(str(simplify))
45+
clean = self.getParameterValue(las2iso.CLEAN)
46+
if clean != 0:
47+
commands.append("-clean")
48+
commands.append(str(clean))
49+
self.addCommonParameterValuesToCommand(commands)
50+
51+
LasToolsUtils.runLasTools(commands, progress)

src/sextante/lastools/las2shp.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import os
2+
from PyQt4 import QtGui
3+
from sextante.parameters.ParameterString import ParameterString
4+
from sextante.outputs.OutputVector import OutputVector
5+
from sextante.lastools.LasToolsUtils import LasToolsUtils
6+
from sextante.lastools.LasToolsAlgorithm import LasToolsAlgorithm
7+
from sextante.parameters.ParameterFile import ParameterFile
8+
9+
class las2shp(LasToolsAlgorithm):
10+
11+
INPUT = "INPUT"
12+
OUTPUT = "OUTPUT"
13+
14+
def getIcon(self):
15+
filepath = os.path.dirname(__file__) + "/../images/tool.png"
16+
return QtGui.QIcon(filepath)
17+
18+
def defineCharacteristics(self):
19+
self.name = "las2shp"
20+
self.group = "Tools"
21+
self.addParameter(ParameterFile(las2shp.INPUT, "Input las layer", ""))
22+
self.addOutput(OutputVector(las2shp.OUTPUT, "Output shp layer"))
23+
self.addCommonParameters()
24+
25+
def processAlgorithm(self, progress):
26+
commands = [os.path.join(LasToolsUtils.LasToolsPath(), "bin", "las2shp.exe")]
27+
commands.append("-i")
28+
commands.append(self.getParameterValue(las2shp.INPUT))
29+
commands.append("-o")
30+
commands.append(self.getOutputValue(las2shp.OUTPUT))
31+
self.addCommonParameterValuesToCommand(commands)
32+
33+
34+
LasToolsUtils.runLasTools(commands, progress)

src/sextante/lastools/lasboundary.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import os
2+
from PyQt4 import QtGui
3+
from sextante.core.GeoAlgorithm import GeoAlgorithm
4+
from sextante.parameters.ParameterString import ParameterString
5+
from sextante.outputs.OutputVector import OutputVector
6+
from sextante.lastools.LasToolsUtils import LasToolsUtils
7+
from sextante.parameters.ParameterBoolean import ParameterBoolean
8+
from sextante.parameters.ParameterNumber import ParameterNumber
9+
from sextante.lastools.LasToolsAlgorithm import LasToolsAlgorithm
10+
from sextante.parameters.ParameterFile import ParameterFile
11+
12+
class lasboundary(LasToolsAlgorithm):
13+
14+
INPUT = "INPUT"
15+
OUTPUT = "OUTPUT"
16+
CONCAVITY = "CONCAVITY"
17+
DISJOINT = "DISJOINT"
18+
HOLES = "HOLES"
19+
20+
21+
def getIcon(self):
22+
filepath = os.path.dirname(__file__) + "/../images/tool.png"
23+
return QtGui.QIcon(filepath)
24+
25+
def defineCharacteristics(self):
26+
self.name = "lasboundary"
27+
self.group = "Tools"
28+
self.addParameter(ParameterFile(lasboundary.INPUT, "Input las layer", ""))
29+
self.addParameter(ParameterNumber(lasboundary.CONCAVITY, "Concavity threshold", 0, None, 50.0))
30+
self.addParameter(ParameterBoolean(lasboundary.HOLES, "Compute also interior holes", False))
31+
self.addParameter(ParameterBoolean(lasboundary.DISJOINT, "Compute disjoint hull", False))
32+
self.addOutput(OutputVector(lasboundary.OUTPUT, "Output boundary layer"))
33+
self.addCommonParameters()
34+
35+
def processAlgorithm(self, progress):
36+
commands = [os.path.join(LasToolsUtils.LasToolsPath(), "bin", "lasboundary.exe")]
37+
commands.append("-i")
38+
commands.append(self.getParameterValue(lasboundary.INPUT))
39+
commands.append("-o")
40+
commands.append(self.getOutputValue(lasboundary.OUTPUT))
41+
commands.append("-concavity")
42+
commands.append(str(self.getParameterValue(lasboundary.CONCAVITY)))
43+
if self.getParameterValue(lasboundary.HOLES):
44+
commands.append("-holes")
45+
if self.getParameterValue(lasboundary.DISJOINT):
46+
commands.append("-disjoint")
47+
self.addCommonParameterValuesToCommand(commands)
48+
49+
LasToolsUtils.runLasTools(commands, progress)

0 commit comments

Comments
 (0)