19
19
__date__ = 'January 2016'
20
20
__copyright__ = '(C) 2016, Hugo Mercier'
21
21
22
- from qgis .core import (QgsVirtualLayerDefinition ,
22
+ from qgis .core import (Qgis ,
23
+ QgsVirtualLayerDefinition ,
23
24
QgsVectorLayer ,
24
25
QgsWkbTypes ,
25
26
QgsProcessingAlgorithm ,
@@ -76,6 +77,16 @@ def groupId(self):
76
77
def __init__ (self ):
77
78
super ().__init__ ()
78
79
80
+ self .geometry_types = [
81
+ (None , self .tr ('Autodetect' )),
82
+ (Qgis .WkbType .NoGeometry , self .tr ('No geometry' )),
83
+ (Qgis .WkbType .Point , self .tr ('Point' )),
84
+ (Qgis .WkbType .LineString , self .tr ('LineString' )),
85
+ (Qgis .WkbType .Polygon , self .tr ('Polygon' )),
86
+ (Qgis .WkbType .MultiPoint , self .tr ('MultiPoint' )),
87
+ (Qgis .WkbType .MultiLineString , self .tr ('MultiLineString' )),
88
+ (Qgis .WkbType .MultiPolygon , self .tr ('MultiPolygon' ))]
89
+
79
90
def flags (self ):
80
91
return super ().flags () | QgsProcessingAlgorithm .FlagNoThreading
81
92
@@ -92,17 +103,10 @@ def initAlgorithm(self, config=None):
92
103
self .addParameter (QgsProcessingParameterString (name = self .INPUT_GEOMETRY_FIELD ,
93
104
description = self .tr ('Geometry field' ), optional = True ))
94
105
95
- self .geometryTypes = [
96
- self .tr ('Autodetect' ),
97
- self .tr ('No geometry' ),
98
- 'Point' ,
99
- 'LineString' ,
100
- 'Polygon' ,
101
- 'MultiPoint' ,
102
- 'MultiLineString' ,
103
- 'MultiPolygon' ]
104
106
self .addParameter (QgsProcessingParameterEnum (self .INPUT_GEOMETRY_TYPE ,
105
- self .tr ('Geometry type' ), options = self .geometryTypes , defaultValue = 0 ))
107
+ self .tr ('Geometry type' ),
108
+ options = [t [1 ] for t in self .geometry_types ],
109
+ defaultValue = 0 ))
106
110
107
111
self .addParameter (QgsProcessingParameterCrs (self .INPUT_GEOMETRY_CRS ,
108
112
self .tr ('CRS' ), optional = True ))
@@ -120,7 +124,9 @@ def processAlgorithm(self, parameters, context, feedback):
120
124
query = self .parameterAsString (parameters , self .INPUT_QUERY , context )
121
125
uid_field = self .parameterAsString (parameters , self .INPUT_UID_FIELD , context )
122
126
geometry_field = self .parameterAsString (parameters , self .INPUT_GEOMETRY_FIELD , context )
123
- geometry_type = self .parameterAsEnum (parameters , self .INPUT_GEOMETRY_TYPE , context )
127
+ geometry_type = self .geometry_types [
128
+ self .parameterAsEnum (parameters , self .INPUT_GEOMETRY_TYPE , context )
129
+ ][0 ]
124
130
geometry_crs = self .parameterAsCrs (parameters , self .INPUT_GEOMETRY_CRS , context )
125
131
126
132
df = QgsVirtualLayerDefinition ()
@@ -150,13 +156,13 @@ def processAlgorithm(self, parameters, context, feedback):
150
156
if uid_field :
151
157
df .setUid (uid_field )
152
158
153
- if geometry_type == 1 : # no geometry
154
- df .setGeometryWkbType (QgsWkbTypes .NoGeometry )
159
+ if geometry_type == Qgis . WkbType . NoGeometry :
160
+ df .setGeometryWkbType (Qgis . WkbType .NoGeometry )
155
161
else :
156
162
if geometry_field :
157
163
df .setGeometryField (geometry_field )
158
- if geometry_type > 1 :
159
- df .setGeometryWkbType (geometry_type - 1 )
164
+ if geometry_type is not None :
165
+ df .setGeometryWkbType (geometry_type )
160
166
if geometry_crs .isValid ():
161
167
df .setGeometrySrid (geometry_crs .postgisSrid ())
162
168
@@ -167,8 +173,12 @@ def processAlgorithm(self, parameters, context, feedback):
167
173
if vLayer .wkbType () == QgsWkbTypes .Unknown :
168
174
raise QgsProcessingException (self .tr ("Cannot find geometry field" ))
169
175
170
- (sink , dest_id ) = self .parameterAsSink (parameters , self .OUTPUT , context ,
171
- vLayer .fields (), vLayer .wkbType () if geometry_type != 1 else 1 , vLayer .crs ())
176
+ (sink , dest_id ) = self .parameterAsSink (parameters ,
177
+ self .OUTPUT ,
178
+ context ,
179
+ vLayer .fields (),
180
+ vLayer .wkbType (),
181
+ vLayer .crs ())
172
182
if sink is None :
173
183
raise QgsProcessingException (self .invalidSinkError (parameters , self .OUTPUT ))
174
184
0 commit comments