24
24
__revision__ = '$Format:%H$'
25
25
26
26
import os
27
+ from qgis .core import *
27
28
from sextante .parameters .ParameterMultipleInput import ParameterMultipleInput
28
29
from sextante .grass .GrassUtils import GrassUtils
29
30
from sextante .core .GeoAlgorithm import GeoAlgorithm
30
31
from PyQt4 import QtGui
31
32
from sextante .core .SextanteUtils import SextanteUtils
33
+ from sextante .parameters .ParameterExtent import ParameterExtent
34
+ from sextante .parameters .ParameterNumber import ParameterNumber
35
+ from sextante .parameters .ParameterRaster import ParameterRaster
36
+ from sextante .core .QGisLayers import QGisLayers
32
37
import time
33
38
34
39
class nviz (GeoAlgorithm ):
35
40
36
41
ELEVATION = "ELEVATION"
37
42
VECTOR = "VECTOR"
43
+ GRASS_REGION_EXTENT_PARAMETER = "GRASS_REGION_PARAMETER"
44
+ GRASS_REGION_CELLSIZE_PARAMETER = "GRASS_REGION_CELLSIZE_PARAMETER"
38
45
39
46
def getIcon (self ):
40
47
return QtGui .QIcon (os .path .dirname (__file__ ) + "/../images/grass.png" )
@@ -44,22 +51,41 @@ def defineCharacteristics(self):
44
51
self .group = "Visualization(NVIZ)"
45
52
self .addParameter (ParameterMultipleInput (nviz .ELEVATION , "Elevation layers" , ParameterMultipleInput .TYPE_RASTER , True ))
46
53
self .addParameter (ParameterMultipleInput (nviz .VECTOR , "Vector layers" , ParameterMultipleInput .TYPE_VECTOR_ANY , True ))
47
-
54
+ self .addParameter (ParameterExtent (nviz .GRASS_REGION_EXTENT_PARAMETER , "GRASS region extent" ))
55
+ self .addParameter (ParameterNumber (self .GRASS_REGION_CELLSIZE_PARAMETER , "GRASS region cellsize (leave 0 for default)" , 0 , None , 0.0 ))
56
+
48
57
def processAlgorithm (self , progress ):
49
58
commands = []
50
- command = "nviz"
51
59
vector = self .getParameterValue (self .VECTOR );
52
60
elevation = self .getParameterValue (self .ELEVATION );
61
+
62
+ region = str (self .getParameterValue (self .GRASS_REGION_EXTENT_PARAMETER ))
63
+ regionCoords = region .split ("," )
64
+ command = "g.region "
65
+ command += "n=" + str (regionCoords [3 ])
66
+ command += " s=" + str (regionCoords [2 ])
67
+ command += " e=" + str (regionCoords [1 ])
68
+ command += " w=" + str (regionCoords [0 ])
69
+ cellsize = self .getParameterValue (self .GRASS_REGION_CELLSIZE_PARAMETER )
70
+ if cellsize :
71
+ command += " res=" + str (cellsize );
72
+ else :
73
+ command += " res=" + str (self .getDefaultCellsize ())
74
+ commands .append (command )
75
+
76
+ command = "nviz"
53
77
if vector :
54
78
layers = vector .split (";" )
55
79
for layer in layers :
56
- newfilename = self .exportVectorLayer (layer )
80
+ cmd , newfilename = self .exportVectorLayer (layer )
81
+ commands .append (cmd )
57
82
vector = vector .replace (layer , newfilename )
58
83
command += (" vector=" + vector .replace (";" , "," ))
59
84
if elevation :
60
85
layers = elevation .split (";" )
61
86
for layer in layers :
62
- newfilename = self .exportRasterLayer (layer )
87
+ cmd , newfilename = self .exportRasterLayer (layer )
88
+ commands .append (cmd )
63
89
elevation = elevation .replace (layer , newfilename )
64
90
command += (" elevation=" + elevation .replace (";" , "," ))
65
91
if elevation is None and vector is None :
@@ -80,8 +106,7 @@ def exportVectorLayer(self,layer):
80
106
command += " layer=" + os .path .basename (layer )[:- 4 ]
81
107
command += " output=" + destFilename ;
82
108
command += " --overwrite -o"
83
- return destFilename
84
-
109
+ return command , destFilename
85
110
86
111
def exportRasterLayer (self , layer ):
87
112
destFilename = self .getTempFilename ()
@@ -90,5 +115,26 @@ def exportRasterLayer(self, layer):
90
115
command += " band=1"
91
116
command += " out=" + destFilename ;
92
117
command += " --overwrite -o"
93
- return destFilename
118
+ return command , destFilename
119
+
120
+ def getDefaultCellsize (self ):
121
+ cellsize = 0
122
+ for param in self .parameters :
123
+ if param .value :
124
+ if isinstance (param , ParameterRaster ):
125
+ if isinstance (param .value , QgsRasterLayer ):
126
+ layer = param .value
127
+ else :
128
+ layer = QGisLayers .getObjectFromUri (param .value )
129
+ cellsize = max (cellsize , (layer .extent ().xMaximum () - layer .extent ().xMinimum ())/ layer .width ())
130
+
131
+ elif isinstance (param , ParameterMultipleInput ):
132
+ layers = param .value .split (";" )
133
+ for layername in layers :
134
+ layer = QGisLayers .getObjectFromUri (layername )
135
+ if isinstance (layer , QgsRasterLayer ):
136
+ cellsize = max (cellsize , (layer .extent ().xMaximum () - layer .extent ().xMinimum ())/ layer .width ())
94
137
138
+ if cellsize == 0 :
139
+ cellsize = 1
140
+ return cellsize
0 commit comments