31
31
32
32
from qgis .core import (QgsRectangle ,
33
33
QgsProcessingUtils ,
34
- QgsProcessingParameterDefinition )
34
+ QgsProcessingParameterDefinition ,
35
+ QgsProcessingParameterNumber ,
36
+ QgsProcessingParameterExtent ,
37
+ QgsProcessingParameterRasterDestination ,
38
+ QgsProcessingException )
35
39
from qgis .analysis import (QgsInterpolator ,
36
40
QgsIDWInterpolator ,
37
- QgsGridFileWriter
38
- )
41
+ QgsGridFileWriter )
39
42
40
43
from processing .algs .qgis .QgisAlgorithm import QgisAlgorithm
41
- from processing .core .GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
42
- from processing .core .parameters import (Parameter ,
43
- ParameterNumber ,
44
- ParameterExtent ,
45
- _splitParameterOptions )
46
- from processing .core .outputs import OutputRaster
47
44
48
45
pluginPath = os .path .split (os .path .split (os .path .dirname (__file__ ))[0 ])[0 ]
49
46
50
47
48
+ class ParameterInterpolationData (QgsProcessingParameterDefinition ):
49
+
50
+ def __init__ (self , name = '' , description = '' ):
51
+ super ().__init__ (name , description )
52
+ self .setMetadata ({
53
+ 'widget_wrapper' : 'processing.algs.qgis.ui.InterpolationDataWidget.InterpolationDataWidgetWrapper'
54
+ })
55
+
56
+ def type (self ):
57
+ return 'idw_interpolation_data'
58
+
59
+ def clone (self ):
60
+ return ParameterInterpolationData (self .name (), self .description ())
61
+
62
+ @staticmethod
63
+ def parseValue (value ):
64
+ if value is None :
65
+ return None
66
+
67
+ if value == '' :
68
+ return None
69
+
70
+ if isinstance (value , str ):
71
+ return value if value != '' else None
72
+ else :
73
+ return ParameterInterpolationData .dataToString (value )
74
+
75
+ @staticmethod
76
+ def dataToString (data ):
77
+ s = ''
78
+ for c in data :
79
+ s += '{}, {}, {:d}, {:d};' .format (c [0 ],
80
+ c [1 ],
81
+ c [2 ],
82
+ c [3 ])
83
+ return s [:- 1 ]
84
+
85
+
51
86
class IdwInterpolation (QgisAlgorithm ):
52
87
53
88
INTERPOLATION_DATA = 'INTERPOLATION_DATA'
@@ -57,7 +92,7 @@ class IdwInterpolation(QgisAlgorithm):
57
92
CELLSIZE_X = 'CELLSIZE_X'
58
93
CELLSIZE_Y = 'CELLSIZE_Y'
59
94
EXTENT = 'EXTENT'
60
- OUTPUT_LAYER = 'OUTPUT_LAYER '
95
+ OUTPUT = 'OUTPUT '
61
96
62
97
def icon (self ):
63
98
return QIcon (os .path .join (pluginPath , 'images' , 'interpolation.png' ))
@@ -69,78 +104,29 @@ def __init__(self):
69
104
super ().__init__ ()
70
105
71
106
def initAlgorithm (self , config = None ):
72
- class ParameterInterpolationData (Parameter ):
73
- default_metadata = {
74
- 'widget_wrapper' : 'processing.algs.qgis.ui.InterpolationDataWidget.InterpolationDataWidgetWrapper'
75
- }
76
-
77
- def __init__ (self , name = '' , description = '' ):
78
- Parameter .__init__ (self , name , description )
79
-
80
- def setValue (self , value ):
81
- if value is None :
82
- if not self .flags () & QgsProcessingParameterDefinition .FlagOptional :
83
- return False
84
- self .value = None
85
- return True
86
-
87
- if value == '' :
88
- if not self .flags () & QgsProcessingParameterDefinition .FlagOptional :
89
- return False
90
-
91
- if isinstance (value , str ):
92
- self .value = value if value != '' else None
93
- else :
94
- self .value = ParameterInterpolationData .dataToString (value )
95
- return True
96
-
97
- def getValueAsCommandLineParameter (self ):
98
- return '"{}"' .format (self .value )
99
-
100
- def getAsScriptCode (self ):
101
- param_type = ''
102
- param_type += 'interpolation data '
103
- return '##' + self .name + '=' + param_type
104
-
105
- @classmethod
106
- def fromScriptCode (self , line ):
107
- isOptional , name , definition = _splitParameterOptions (line )
108
- descName = QgsProcessingParameters .descriptionFromName (name )
109
- parent = definition .lower ().strip ()[len ('interpolation data' ) + 1 :]
110
- return ParameterInterpolationData (name , descName , parent )
111
-
112
- @staticmethod
113
- def dataToString (data ):
114
- s = ''
115
- for c in data :
116
- s += '{}, {}, {:d}, {:d};' .format (c [0 ],
117
- c [1 ],
118
- c [2 ],
119
- c [3 ])
120
- return s [:- 1 ]
121
107
122
108
self .addParameter (ParameterInterpolationData (self .INTERPOLATION_DATA ,
123
109
self .tr ('Input layer(s)' )))
124
- self .addParameter (ParameterNumber (self .DISTANCE_COEFFICIENT ,
125
- self .tr ('Distance coefficient P' ),
126
- 0.0 , 99.99 , 2.0 ))
127
- self .addParameter (ParameterNumber (self .COLUMNS ,
128
- self .tr ('Number of columns' ),
129
- 0 , 10000000 , 300 ))
130
- self .addParameter (ParameterNumber (self .ROWS ,
131
- self .tr ('Number of rows' ),
132
- 0 , 10000000 , 300 ))
133
- self .addParameter (ParameterNumber (self .CELLSIZE_X ,
134
- self .tr ('Cell Size X' ),
135
- 0.0 , 999999.000000 , 0.0 ))
136
- self .addParameter (ParameterNumber (self .CELLSIZE_Y ,
137
- self .tr ('Cell Size Y' ),
138
- 0.0 , 999999.000000 , 0.0 ))
139
- self .addParameter (ParameterExtent (self .EXTENT ,
140
- self .tr ('Extent' ),
141
- optional = False ))
142
- self .addOutput ( OutputRaster (self .OUTPUT_LAYER ,
143
- self .tr ('Interpolated' )))
110
+ self .addParameter (QgsProcessingParameterNumber (self .DISTANCE_COEFFICIENT ,
111
+ self .tr ('Distance coefficient P' ), type = QgsProcessingParameterNumber . Double ,
112
+ minValue = 0.0 , maxValue = 99.99 , defaultValue = 2.0 ))
113
+ self .addParameter (QgsProcessingParameterNumber (self .COLUMNS ,
114
+ self .tr ('Number of columns' ),
115
+ minValue = 0 , maxValue = 10000000 , defaultValue = 300 ))
116
+ self .addParameter (QgsProcessingParameterNumber (self .ROWS ,
117
+ self .tr ('Number of rows' ),
118
+ minValue = 0 , maxValue = 10000000 , defaultValue = 300 ))
119
+ self .addParameter (QgsProcessingParameterNumber (self .CELLSIZE_X ,
120
+ self .tr ('Cell Size X' ), type = QgsProcessingParameterNumber . Double ,
121
+ minValue = 0.0 , maxValue = 999999.000000 , defaultValue = 0.0 ))
122
+ self .addParameter (QgsProcessingParameterNumber (self .CELLSIZE_Y ,
123
+ self .tr ('Cell Size Y' ), type = QgsProcessingParameterNumber . Double ,
124
+ minValue = 0.0 , maxValue = 999999.000000 , defaultValue = 0.0 ))
125
+ self .addParameter (QgsProcessingParameterExtent (self .EXTENT ,
126
+ self .tr ('Extent' ),
127
+ optional = False ))
128
+ self .addParameter ( QgsProcessingParameterRasterDestination (self .OUTPUT ,
129
+ self .tr ('Interpolated' )))
144
130
145
131
def name (self ):
146
132
return 'idwinterpolation'
@@ -149,25 +135,19 @@ def displayName(self):
149
135
return self .tr ('IDW interpolation' )
150
136
151
137
def processAlgorithm (self , parameters , context , feedback ):
152
- interpolationData = self . getParameterValue ( self .INTERPOLATION_DATA )
153
- coefficient = self .getParameterValue ( self .DISTANCE_COEFFICIENT )
154
- columns = self .getParameterValue ( self .COLUMNS )
155
- rows = self .getParameterValue ( self .ROWS )
156
- cellsizeX = self .getParameterValue ( self .CELLSIZE_X )
157
- cellsizeY = self .getParameterValue ( self .CELLSIZE_Y )
158
- extent = self .getParameterValue ( self .EXTENT ). split ( ',' )
159
- output = self .getOutputValue ( self .OUTPUT_LAYER )
138
+ interpolationData = ParameterInterpolationData . parseValue ( parameters [ self .INTERPOLATION_DATA ] )
139
+ coefficient = self .parameterAsDouble ( parameters , self .DISTANCE_COEFFICIENT , context )
140
+ columns = self .parameterAsInt ( parameters , self .COLUMNS , context )
141
+ rows = self .parameterAsInt ( parameters , self .ROWS , context )
142
+ cellsizeX = self .parameterAsDouble ( parameters , self .CELLSIZE_X , context )
143
+ cellsizeY = self .parameterAsDouble ( parameters , self .CELLSIZE_Y , context )
144
+ bbox = self .parameterAsExtent ( parameters , self .EXTENT , context )
145
+ output = self .parameterAsOutputLayer ( parameters , self .OUTPUT , context )
160
146
161
147
if interpolationData is None :
162
- raise GeoAlgorithmExecutionException (
148
+ raise QgsProcessingException (
163
149
self .tr ('You need to specify at least one input layer.' ))
164
150
165
- xMin = float (extent [0 ])
166
- xMax = float (extent [1 ])
167
- yMin = float (extent [2 ])
168
- yMax = float (extent [3 ])
169
- bbox = QgsRectangle (xMin , yMin , xMax , yMax )
170
-
171
151
layerData = []
172
152
layers = []
173
153
for row in interpolationData .split (';' ):
@@ -201,3 +181,4 @@ def processAlgorithm(self, parameters, context, feedback):
201
181
cellsizeY )
202
182
203
183
writer .writeFile ()
184
+ return {self .OUTPUT : output }
0 commit comments