1616* *
1717***************************************************************************
1818"""
19- from builtins import str
2019
2120__author__ = 'Alexander Bruy'
2221__date__ = 'October 2013'
3029
3130from qgis .PyQt .QtGui import QIcon
3231
32+ from qgis .core import (QgsRasterFileWriter ,
33+ QgsProcessing ,
34+ QgsProcessingParameterDefinition ,
35+ QgsProcessingParameterVectorLayer ,
36+ QgsProcessingParameterEnum ,
37+ QgsProcessingParameterField ,
38+ QgsProcessingParameterNumber ,
39+ QgsProcessingParameterRasterDestination )
3340from processing .algs .gdal .GdalAlgorithm import GdalAlgorithm
34- from processing .core .parameters import ParameterVector
35- from processing .core .parameters import ParameterTableField
36- from processing .core .parameters import ParameterSelection
37- from processing .core .parameters import ParameterNumber
38- from processing .core .outputs import OutputRaster
39- from processing .tools import dataobjects
4041from processing .algs .gdal .GdalUtils import GdalUtils
4142
4243
@@ -53,39 +54,78 @@ class GridDataMetrics(GdalAlgorithm):
5354 MIN_POINTS = 'MIN_POINTS'
5455 ANGLE = 'ANGLE'
5556 NODATA = 'NODATA'
57+ DATA_TYPE = 'DATA_TYPE'
5658 OUTPUT = 'OUTPUT'
57- RTYPE = 'RTYPE'
5859
59- TYPE = ['Byte' , 'Int16' , 'UInt16' , 'UInt32' , 'Int32' , 'Float32' , 'Float64' ]
60-
61- DATA_METRICS = ['Minimum' , 'Maximum' , 'Range' , 'Count' , 'Average distance' ,
62- 'Average distance between points' ]
60+ TYPE = ['Byte' , 'Int16' , 'UInt16' , 'UInt32' , 'Int32' , 'Float32' , 'Float64' , 'CInt16' , 'CInt32' , 'CFloat32' , 'CFloat64' ]
6361
6462 def __init__ (self ):
6563 super ().__init__ ()
6664
6765 def initAlgorithm (self , config = None ):
68- self .addParameter (ParameterVector (self .INPUT ,
69- self .tr ('Input layer' ), [dataobjects .TYPE_VECTOR_POINT ]))
70- self .addParameter (ParameterTableField (self .Z_FIELD ,
71- self .tr ('Z field' ), self .INPUT ,
72- ParameterTableField .DATA_TYPE_NUMBER , True ))
73- self .addParameter (ParameterSelection (self .METRIC ,
74- self .tr ('Metrics' ), self .DATA_METRICS , 0 ))
75- self .addParameter (ParameterNumber (self .RADIUS_1 ,
76- self .tr ('Radius 1' ), 0.0 , 99999999.999999 , 0.0 ))
77- self .addParameter (ParameterNumber (self .RADIUS_2 ,
78- self .tr ('Radius 2' ), 0.0 , 99999999.999999 , 0.0 ))
79- self .addParameter (ParameterNumber (self .MIN_POINTS ,
80- self .tr ('Min points' ), 0.0 , 99999999.999999 , 0.0 ))
81- self .addParameter (ParameterNumber (self .ANGLE ,
82- self .tr ('Angle' ), 0.0 , 359.0 , 0.0 ))
83- self .addParameter (ParameterNumber (self .NODATA ,
84- self .tr ('Nodata' ), 0.0 , 99999999.999999 , 0.0 ))
85- self .addParameter (ParameterSelection (self .RTYPE ,
86- self .tr ('Output raster type' ), self .TYPE , 5 ))
87-
88- self .addOutput (OutputRaster (self .OUTPUT , self .tr ('Interpolated metrics' )))
66+ self .metrics = ((self .tr ('Minimum' ), 'minimum' ),
67+ (self .tr ('Maximum' ), 'maximum' ),
68+ (self .tr ('Range' ), 'range' ),
69+ (self .tr ('Count' ), 'count' ),
70+ (self .tr ('Average distance' ), 'average_distance' ),
71+ (self .tr ('Average distance between points' ), 'average_distance_pts' ))
72+
73+ self .addParameter (QgsProcessingParameterVectorLayer (self .INPUT ,
74+ self .tr ('Point layer' ),
75+ [QgsProcessing .TypeVectorPoint ]))
76+
77+ z_field_param = QgsProcessingParameterField (self .Z_FIELD ,
78+ self .tr ('Z value from field' ),
79+ None ,
80+ self .INPUT ,
81+ QgsProcessingParameterField .Numeric ,
82+ optional = True )
83+ z_field_param .setFlags (z_field_param .flags () | QgsProcessingParameterDefinition .FlagAdvanced )
84+ self .addParameter (z_field_param )
85+
86+ self .addParameter (QgsProcessingParameterEnum (self .METRIC ,
87+ self .tr ('Data metric to use' ),
88+ options = [i [0 ] for i in self .metrics ],
89+ allowMultiple = False ,
90+ defaultValue = 0 ))
91+ self .addParameter (QgsProcessingParameterNumber (self .RADIUS_1 ,
92+ self .tr ('The first radius of search ellipse' ),
93+ type = QgsProcessingParameterNumber .Double ,
94+ minValue = 0.0 ,
95+ maxValue = 99999999.999999 ,
96+ defaultValue = 0.0 ))
97+ self .addParameter (QgsProcessingParameterNumber (self .RADIUS_2 ,
98+ self .tr ('The second radius of search ellipse' ),
99+ type = QgsProcessingParameterNumber .Double ,
100+ minValue = 0.0 ,
101+ maxValue = 99999999.999999 ,
102+ defaultValue = 0.0 ))
103+ self .addParameter (QgsProcessingParameterNumber (self .ANGLE ,
104+ self .tr ('Angle of search ellipse rotation in degrees (counter clockwise)' ),
105+ type = QgsProcessingParameterNumber .Double ,
106+ minValue = 0.0 ,
107+ maxValue = 360.0 ,
108+ defaultValue = 0.0 ))
109+ self .addParameter (QgsProcessingParameterNumber (self .MIN_POINTS ,
110+ self .tr ('Minimum number of data points to use' ),
111+ type = QgsProcessingParameterNumber .Integer ,
112+ minValue = 0 ,
113+ maxValue = 99999999 ,
114+ defaultValue = 0 ))
115+ self .addParameter (QgsProcessingParameterNumber (self .NODATA ,
116+ self .tr ('NODATA marker to fill empty points' ),
117+ type = QgsProcessingParameterNumber .Double ,
118+ minValue = - 99999999.999999 ,
119+ maxValue = 99999999.999999 ,
120+ defaultValue = 0.0 ))
121+ self .addParameter (QgsProcessingParameterEnum (self .DATA_TYPE ,
122+ self .tr ('Output data type' ),
123+ self .TYPE ,
124+ allowMultiple = False ,
125+ defaultValue = 5 ))
126+
127+ self .addParameter (QgsProcessingParameterRasterDestination (self .OUTPUT ,
128+ self .tr ('Interpolated (data metrics)' )))
89129
90130 def name (self ):
91131 return 'griddatametrics'
@@ -100,41 +140,35 @@ def group(self):
100140 return self .tr ('Raster analysis' )
101141
102142 def getConsoleCommands (self , parameters , context , feedback ):
143+ inLayer = self .parameterAsVectorLayer (parameters , self .INPUT , context )
144+ connectionString = GdalUtils .ogrConnectionString (inLayer .source (), context )
145+ print (connectionString )
146+
103147 arguments = ['-l' ]
104- arguments .append (
105- os .path .basename (os .path .splitext (
106- str (self .getParameterValue (self .INPUT )))[0 ]))
148+ arguments .append (GdalUtils .ogrLayerName (connectionString ))
107149
108- fieldName = self .getParameterValue ( self .Z_FIELD )
109- if fieldName is not None and fieldName != '' :
150+ fieldName = self .parameterAsString ( parameters , self .Z_FIELD , context )
151+ if fieldName :
110152 arguments .append ('-zfield' )
111153 arguments .append (fieldName )
112154
113- metric = self .getParameterValue (self .METRIC )
114- if metric == 0 :
115- params = 'minimum'
116- elif metric == 1 :
117- params = 'maximum'
118- elif metric == 2 :
119- params = 'range'
120- elif metric == 3 :
121- params = 'count'
122- elif metric == 4 :
123- params = 'average_distance'
124- elif metric == 5 :
125- params = 'average_distance_pts'
126-
127- params += ':radius1=%s' % self .getParameterValue (self .RADIUS_1 )
128- params += ':radius2=%s' % self .getParameterValue (self .RADIUS_2 )
129- params += ':angle=%s' % self .getParameterValue (self .ANGLE )
130- params += ':min_points=%s' % self .getParameterValue (self .MIN_POINTS )
131- params += ':nodata=%s' % self .getParameterValue (self .NODATA )
155+ params = self .metrics [self .parameterAsEnum (parameters , self .METRIC , context )][1 ]
156+ params += ':radius1={}' .format (self .parameterAsDouble (parameters , self .RADIUS_1 , context ))
157+ params += ':radius2={}' .format (self .parameterAsDouble (parameters , self .RADIUS_2 , context ))
158+ params += ':angle={}' .format (self .parameterAsDouble (parameters , self .ANGLE , context ))
159+ params += ':min_points={}' .format (self .parameterAsInt (parameters , self .MIN_POINTS , context ))
160+ params += ':nodata={}' .format (self .parameterAsDouble (parameters , self .NODATA , context ))
132161
133162 arguments .append ('-a' )
134163 arguments .append (params )
135164 arguments .append ('-ot' )
136- arguments .append (self .TYPE [self .getParameterValue (self .RTYPE )])
137- arguments .append (str (self .getParameterValue (self .INPUT )))
138- arguments .append (str (self .getOutputValue (self .OUTPUT )))
165+ arguments .append (self .TYPE [self .parameterAsEnum (parameters , self .DATA_TYPE , context )])
166+
167+ out = self .parameterAsOutputLayer (parameters , self .OUTPUT , context )
168+ arguments .append ('-of' )
169+ arguments .append (QgsRasterFileWriter .driverForExtension (os .path .splitext (out )[1 ]))
170+
171+ arguments .append (connectionString )
172+ arguments .append (out )
139173
140174 return ['gdal_grid' , GdalUtils .escapeAndJoin (arguments )]
0 commit comments