Skip to content

Commit

Permalink
Merge pull request #360 from slarosa/sextante-issue
Browse files Browse the repository at this point in the history
Fixes issue #5505 (sextante/nviz)
  • Loading branch information
volaya committed Dec 16, 2012
2 parents cdaebd1 + a18cb51 commit a2f4db6
Showing 1 changed file with 53 additions and 7 deletions.
60 changes: 53 additions & 7 deletions python/plugins/sextante/grass/nviz.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,24 @@
__revision__ = '$Format:%H$'

import os
from qgis.core import *
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
from sextante.grass.GrassUtils import GrassUtils
from sextante.core.GeoAlgorithm import GeoAlgorithm
from PyQt4 import QtGui
from sextante.core.SextanteUtils import SextanteUtils
from sextante.parameters.ParameterExtent import ParameterExtent
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.core.QGisLayers import QGisLayers
import time

class nviz(GeoAlgorithm):

ELEVATION = "ELEVATION"
VECTOR = "VECTOR"
GRASS_REGION_EXTENT_PARAMETER = "GRASS_REGION_PARAMETER"
GRASS_REGION_CELLSIZE_PARAMETER = "GRASS_REGION_CELLSIZE_PARAMETER"

def getIcon(self):
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/grass.png")
Expand All @@ -44,22 +51,41 @@ def defineCharacteristics(self):
self.group = "Visualization(NVIZ)"
self.addParameter(ParameterMultipleInput(nviz.ELEVATION, "Elevation layers", ParameterMultipleInput.TYPE_RASTER, True))
self.addParameter(ParameterMultipleInput(nviz.VECTOR, "Vector layers", ParameterMultipleInput.TYPE_VECTOR_ANY, True))

self.addParameter(ParameterExtent(nviz.GRASS_REGION_EXTENT_PARAMETER, "GRASS region extent"))
self.addParameter(ParameterNumber(self.GRASS_REGION_CELLSIZE_PARAMETER, "GRASS region cellsize (leave 0 for default)", 0, None, 0.0))

def processAlgorithm(self, progress):
commands = []
command = "nviz"
vector = self.getParameterValue(self.VECTOR);
elevation = self.getParameterValue(self.ELEVATION);

region = str(self.getParameterValue(self.GRASS_REGION_EXTENT_PARAMETER))
regionCoords = region.split(",")
command = "g.region "
command += "n=" + str(regionCoords[3])
command +=" s=" + str(regionCoords[2])
command +=" e=" + str(regionCoords[1])
command +=" w=" + str(regionCoords[0])
cellsize = self.getParameterValue(self.GRASS_REGION_CELLSIZE_PARAMETER)
if cellsize:
command +=" res=" + str(cellsize);
else:
command +=" res=" + str(self.getDefaultCellsize())
commands.append(command)

command = "nviz"
if vector:
layers = vector.split(";")
for layer in layers:
newfilename = self.exportVectorLayer(layer)
cmd, newfilename = self.exportVectorLayer(layer)
commands.append(cmd)
vector = vector.replace(layer, newfilename)
command += (" vector=" + vector.replace(";", ","))
if elevation:
layers = elevation.split(";")
for layer in layers:
newfilename = self.exportRasterLayer(layer)
cmd, newfilename = self.exportRasterLayer(layer)
commands.append(cmd)
elevation = elevation.replace(layer, newfilename)
command += (" elevation=" + elevation.replace(";", ","))
if elevation is None and vector is None:
Expand All @@ -80,8 +106,7 @@ def exportVectorLayer(self,layer):
command +=" layer=" + os.path.basename(layer)[:-4]
command +=" output=" + destFilename;
command +=" --overwrite -o"
return destFilename

return command, destFilename

def exportRasterLayer(self, layer):
destFilename = self.getTempFilename()
Expand All @@ -90,5 +115,26 @@ def exportRasterLayer(self, layer):
command +=" band=1"
command +=" out=" + destFilename;
command +=" --overwrite -o"
return destFilename
return command, destFilename

def getDefaultCellsize(self):
cellsize = 0
for param in self.parameters:
if param.value:
if isinstance(param, ParameterRaster):
if isinstance(param.value, QgsRasterLayer):
layer = param.value
else:
layer = QGisLayers.getObjectFromUri(param.value)
cellsize = max(cellsize, (layer.extent().xMaximum() - layer.extent().xMinimum())/layer.width())

elif isinstance(param, ParameterMultipleInput):
layers = param.value.split(";")
for layername in layers:
layer = QGisLayers.getObjectFromUri(layername)
if isinstance(layer, QgsRasterLayer):
cellsize = max(cellsize, (layer.extent().xMaximum() - layer.extent().xMinimum())/layer.width())

if cellsize == 0:
cellsize = 1
return cellsize

0 comments on commit a2f4db6

Please sign in to comment.