Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added explode and multi to single part algorithms
added lastools for linux added FUSION filterdata algorihtm changed r installation method git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@171 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
- Loading branch information
volayaf
committed
May 8, 2012
1 parent
3107d16
commit c80371a
Showing
19 changed files
with
250 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
from sextante.core.GeoAlgorithm import GeoAlgorithm | ||
import os.path | ||
from PyQt4 import QtGui | ||
from PyQt4.QtCore import * | ||
from PyQt4.QtGui import * | ||
from qgis.core import * | ||
from sextante.parameters.ParameterVector import ParameterVector | ||
from sextante.core.QGisLayers import QGisLayers | ||
from sextante.outputs.OutputVector import OutputVector | ||
|
||
class Explode(GeoAlgorithm): | ||
|
||
INPUT = "INPUT" | ||
OUTPUT = "OUTPUT" | ||
|
||
def getIcon(self): | ||
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/toolbox.png") | ||
|
||
def processAlgorithm(self, progress): | ||
settings = QSettings() | ||
systemEncoding = settings.value( "/UI/encoding", "System" ).toString() | ||
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT)) | ||
output = self.getOutputValue(self.OUTPUT) | ||
vprovider = vlayer.dataProvider() | ||
allAttrs = vprovider.attributeIndexes() | ||
vprovider.select( allAttrs ) | ||
fields = vprovider.fields() | ||
writer = QgsVectorFileWriter( output, systemEncoding, | ||
fields, QGis.WKBLineString, vprovider.crs() ) | ||
inFeat = QgsFeature() | ||
outFeat = QgsFeature() | ||
inGeom = QgsGeometry() | ||
nFeat = vprovider.featureCount() | ||
nElement = 0 | ||
while vprovider.nextFeature( inFeat ): | ||
nElement += 1 | ||
progress.setPercentage((nElement*100)/nFeat) | ||
inGeom = inFeat.geometry() | ||
atMap = inFeat.attributeMap() | ||
segments = self.extractAsSingleSegments( inGeom ) | ||
outFeat.setAttributeMap( atMap ) | ||
for segment in segments: | ||
outFeat.setGeometry(segment) | ||
writer.addFeature(outFeat) | ||
del writer | ||
|
||
|
||
def extractAsSingleSegments( self, geom ): | ||
segments = [] | ||
if geom.isMultipart(): | ||
multi = geom.asMultiPolyline() | ||
for polyline in multi: | ||
segments.extend( self.getPolylineAsSingleSegments(polyline)) | ||
else: | ||
segments.extend( self.getPolylineAsSingleSegments(geom.asPolyline())) | ||
return segments | ||
|
||
def getPolylineAsSingleSegments(self, polyline): | ||
segments = [] | ||
for i in range(len(polyline)-1): | ||
ptA = polyline[i] | ||
ptB = polyline[i+1] | ||
segment = QgsGeometry.fromPolyline([ptA, ptB]) | ||
segments.append(segment) | ||
return segments | ||
|
||
def defineCharacteristics(self): | ||
self.name = "Explode lines" | ||
self.group = "Algorithms for vector layers" | ||
self.addParameter(ParameterVector(self.INPUT, "Input layer",ParameterVector.VECTOR_TYPE_LINE)) | ||
self.addOutput(OutputVector(self.OUTPUT, "Output layer")) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
from sextante.core.GeoAlgorithm import GeoAlgorithm | ||
import os.path | ||
from PyQt4 import QtGui | ||
from PyQt4.QtCore import * | ||
from PyQt4.QtGui import * | ||
from qgis.core import * | ||
from sextante.parameters.ParameterVector import ParameterVector | ||
from sextante.core.QGisLayers import QGisLayers | ||
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException | ||
from sextante.outputs.OutputVector import OutputVector | ||
|
||
class MultipartTosingleparts(GeoAlgorithm): | ||
|
||
INPUT = "INPUT" | ||
OUTPUT = "OUTPUT" | ||
|
||
def getIcon(self): | ||
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/multi_to_single.png") | ||
|
||
def processAlgorithm(self, progress): | ||
settings = QSettings() | ||
systemEncoding = settings.value( "/UI/encoding", "System" ).toString() | ||
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT)) | ||
output = self.getOutputValue(self.OUTPUT) | ||
vprovider = vlayer.dataProvider() | ||
allAttrs = vprovider.attributeIndexes() | ||
vprovider.select( allAttrs ) | ||
fields = vprovider.fields() | ||
geomType = self.multiToSingleGeom(vprovider.geometryType()) | ||
writer = QgsVectorFileWriter( output, systemEncoding, | ||
fields, geomType, vprovider.crs() ) | ||
inFeat = QgsFeature() | ||
outFeat = QgsFeature() | ||
inGeom = QgsGeometry() | ||
nFeat = vprovider.featureCount() | ||
nElement = 0 | ||
while vprovider.nextFeature( inFeat ): | ||
nElement += 1 | ||
progress.setPercentage((nElement*100)/nFeat) | ||
inGeom = inFeat.geometry() | ||
atMap = inFeat.attributeMap() | ||
featList = self.extractAsSingle( inGeom ) | ||
outFeat.setAttributeMap( atMap ) | ||
for i in featList: | ||
outFeat.setGeometry( i ) | ||
writer.addFeature( outFeat ) | ||
del writer | ||
|
||
|
||
def multiToSingleGeom(self, wkbType): | ||
try: | ||
if wkbType in (QGis.WKBPoint, QGis.WKBMultiPoint, | ||
QGis.WKBPoint25D, QGis.WKBMultiPoint25D): | ||
return QGis.WKBPoint | ||
elif wkbType in (QGis.WKBLineString, QGis.WKBMultiLineString, | ||
QGis.WKBMultiLineString25D, QGis.WKBLineString25D): | ||
return QGis.WKBLineString | ||
elif wkbType in (QGis.WKBPolygon, QGis.WKBMultiPolygon, | ||
QGis.WKBMultiPolygon25D, QGis.WKBPolygon25D): | ||
return QGis.WKBPolygon | ||
else: | ||
return QGis.WKBUnknown | ||
except Exception, err: | ||
raise GeoAlgorithmExecutionException(str(err)) | ||
|
||
|
||
def extractAsSingle( self, geom ): | ||
multi_geom = QgsGeometry() | ||
temp_geom = [] | ||
if geom.type() == 0: | ||
if geom.isMultipart(): | ||
multi_geom = geom.asMultiPoint() | ||
for i in multi_geom: | ||
temp_geom.append( QgsGeometry().fromPoint ( i ) ) | ||
else: | ||
temp_geom.append( geom ) | ||
elif geom.type() == 1: | ||
if geom.isMultipart(): | ||
multi_geom = geom.asMultiPolyline() | ||
for i in multi_geom: | ||
temp_geom.append( QgsGeometry().fromPolyline( i ) ) | ||
else: | ||
temp_geom.append( geom ) | ||
elif geom.type() == 2: | ||
if geom.isMultipart(): | ||
multi_geom = geom.asMultiPolygon() | ||
for i in multi_geom: | ||
temp_geom.append( QgsGeometry().fromPolygon( i ) ) | ||
else: | ||
temp_geom.append( geom ) | ||
return temp_geom | ||
|
||
|
||
def defineCharacteristics(self): | ||
self.name = "Multipart to singleparts" | ||
self.group = "Geometry tools" | ||
self.addParameter(ParameterVector(self.INPUT, "Input layer")) | ||
self.addOutput(OutputVector(self.OUTPUT, "Output layer")) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
''' | ||
Created on 07/05/2012 | ||
@author: Volaya | ||
''' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
import os | ||
from sextante.parameters.ParameterFile import ParameterFile | ||
from sextante.fusion.FusionUtils import FusionUtils | ||
from PyQt4 import QtGui | ||
import subprocess | ||
from sextante.outputs.OutputFile import OutputFile | ||
from sextante.fusion.FusionAlgorithm import FusionAlgorithm | ||
from sextante.parameters.ParameterNumber import ParameterNumber | ||
|
||
class FilterData(FusionAlgorithm): | ||
|
||
INPUT = "INPUT" | ||
OUTPUT = "OUTPUT" | ||
VALUE = "VALUE" | ||
SHAPE = "SHAPE" | ||
WINDOWSIZE = "WINDOWSIZE" | ||
|
||
|
||
def defineCharacteristics(self): | ||
self.name = "Filter Data outliers" | ||
self.group = "Points" | ||
self.addParameter(ParameterFile(self.INPUT, "Input las layer")) | ||
self.addParameter(ParameterNumber(self.VALUE, "Standard Deviation multiplier")) | ||
self.addParameter(ParameterNumber(self.VALUE, "Window size", None, None, 10)) | ||
self.addOutput(OutputFile(self.OUTPUT, "Output filtered las file")) | ||
self.addAdvancedModifiers() | ||
|
||
def processAlgorithm(self, progress): | ||
commands = [os.path.join(FusionUtils.FusionPath(), "FilterData.exe")] | ||
commands.append("/verbose") | ||
self.addAdvancedModifiersToCommand(commands) | ||
commands.append("outlier") | ||
commands.append(self.getParameterValue(self.VALUE)) | ||
commands.append(self.getParameterValue(self.WINDOWSIZE)) | ||
outFile = self.getOutputValue(self.OUTPUT) + ".lda" | ||
commands.append(outFile) | ||
files = self.getParameterValue(self.INPUT).split(";") | ||
if len(files) == 1: | ||
commands.append(self.getParameterValue(self.INPUT)) | ||
else: | ||
FusionUtils.createFileList(files) | ||
commands.append(FusionUtils.tempFileListFilepath()) | ||
FusionUtils.runFusion(commands, progress) | ||
commands = [os.path.join(FusionUtils.FusionPath(), "LDA2LAS.exe")] | ||
commands.append(outFile) | ||
commands.append(self.getOutputValue(self.OUTPUT)) | ||
p = subprocess.Popen(commands, shell=True) | ||
p.wait() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,9 @@ | ||
v.surf.idw | ||
v.surf.idw | ||
Vector (v.*) | ||
ParameterVector|input|input|-1|False | ||
ParameterVector|input|input|0|False | ||
ParameterNumber|npoints|npoints|None|None|12 | ||
ParameterNumber|power|power|None|None|2.0 | ||
ParameterNumber|layer|layer|None|None|1 | ||
ParameterTableField|column|column|input | ||
ParameterBoolean|-n|-n|True | ||
OutputRaster|output|output |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.