26
26
27
27
__revision__ = '$Format:%H$'
28
28
29
- from processing .core .parameters import ParameterVector
30
- from processing .core .parameters import ParameterString
31
- from processing .core .parameters import ParameterCrs
32
- from processing .core .parameters import ParameterSelection
33
- from processing .core .parameters import ParameterBoolean
34
- from processing .core .parameters import ParameterExtent
35
- from processing .core .parameters import ParameterTableField
29
+ from qgis .core import (QgsProcessingParameterFeatureSource ,
30
+ QgsProcessingParameterString ,
31
+ QgsProcessingParameterEnum ,
32
+ QgsProcessingParameterCrs ,
33
+ QgsProcessingParameterField ,
34
+ QgsProcessingParameterExtent ,
35
+ QgsProcessingParameterBoolean ,
36
+ QgsProcessingUtils )
36
37
37
38
from processing .algs .gdal .GdalAlgorithm import GdalAlgorithm
38
39
from processing .algs .gdal .GdalUtils import GdalUtils
43
44
44
45
class Ogr2OgrToPostGis (GdalAlgorithm ):
45
46
46
- INPUT_LAYER = 'INPUT_LAYER '
47
+ INPUT = 'INPUT '
47
48
SHAPE_ENCODING = 'SHAPE_ENCODING'
48
49
GTYPE = 'GTYPE'
49
50
GEOMTYPE = ['' , 'NONE' , 'GEOMETRY' , 'POINT' , 'LINESTRING' , 'POLYGON' , 'GEOMETRYCOLLECTION' , 'MULTIPOINT' , 'MULTIPOLYGON' , 'MULTILINESTRING' ]
@@ -82,78 +83,78 @@ def __init__(self):
82
83
super ().__init__ ()
83
84
84
85
def initAlgorithm (self , config = None ):
85
- self .addParameter (ParameterVector (self .INPUT_LAYER ,
86
- self .tr ('Input layer' )))
87
- self .addParameter (ParameterString (self .SHAPE_ENCODING ,
88
- self .tr ('Shape encoding' ), "" , optional = True ))
89
- self .addParameter (ParameterSelection (self .GTYPE ,
90
- self .tr ('Output geometry type' ), self .GEOMTYPE , 0 ))
91
- self .addParameter (ParameterCrs (self .A_SRS ,
92
- self .tr ('Assign an output CRS' ), '' , optional = False ))
93
- self .addParameter (ParameterCrs (self .T_SRS ,
94
- self .tr ('Reproject to this CRS on output ' ), '' , optional = True ))
95
- self .addParameter (ParameterCrs (self .S_SRS ,
96
- self .tr ('Override source CRS' ), '' , optional = True ))
97
- self .addParameter (ParameterString (self .HOST ,
98
- self .tr ('Host' ), 'localhost' , optional = True ))
99
- self .addParameter (ParameterString (self .PORT ,
100
- self .tr ('Port' ), '5432' , optional = True ))
101
- self .addParameter (ParameterString (self .USER ,
102
- self .tr ('Username' ), '' , optional = True ))
103
- self .addParameter (ParameterString (self .DBNAME ,
104
- self .tr ('Database name' ), '' , optional = True ))
105
- self .addParameter (ParameterString (self .PASSWORD ,
106
- self .tr ('Password' ), '' , optional = True ))
107
- self .addParameter (ParameterString (self .SCHEMA ,
108
- self .tr ('Schema name' ), 'public' , optional = True ))
109
- self .addParameter (ParameterString (self .TABLE ,
110
- self .tr ('Table name, leave blank to use input name' ),
111
- '' , optional = True ))
112
- self .addParameter (ParameterString (self .PK ,
113
- self .tr ('Primary key (new field)' ), 'id' , optional = True ))
114
- self .addParameter (ParameterTableField (self .PRIMARY_KEY ,
115
- self .tr ('Primary key (existing field, used if the above option is left empty)' ), self .INPUT_LAYER , optional = True ))
116
- self .addParameter (ParameterString (self .GEOCOLUMN ,
117
- self .tr ('Geometry column name' ), 'geom' , optional = True ))
118
- self .addParameter (ParameterSelection (self .DIM ,
119
- self .tr ('Vector dimensions' ), self .DIMLIST , 0 ))
120
- self .addParameter (ParameterString (self .SIMPLIFY ,
121
- self .tr ('Distance tolerance for simplification' ),
122
- '' , optional = True ))
123
- self .addParameter (ParameterString (self .SEGMENTIZE ,
124
- self .tr ('Maximum distance between 2 nodes (densification)' ),
125
- '' , optional = True ))
126
- self .addParameter (ParameterExtent (self .SPAT ,
127
- self .tr ('Select features by extent (defined in input layer CRS)' )))
128
- self .addParameter (ParameterBoolean (self .CLIP ,
129
- self .tr ('Clip the input layer using the above (rectangle) extent' ),
130
- False ))
131
- self .addParameter (ParameterString (self .WHERE ,
132
- self .tr ('Select features using a SQL "WHERE" statement (Ex: column=\' value\' )' ),
133
- '' , optional = True ))
134
- self .addParameter (ParameterString (self .GT ,
135
- self .tr ('Group N features per transaction (Default: 20000)' ),
136
- '' , optional = True ))
137
- self .addParameter (ParameterBoolean (self .OVERWRITE ,
138
- self .tr ('Overwrite existing table' ), True ))
139
- self .addParameter (ParameterBoolean (self .APPEND ,
140
- self .tr ('Append to existing table' ), False ))
141
- self .addParameter (ParameterBoolean (self .ADDFIELDS ,
142
- self .tr ('Append and add new fields to existing table' ), False ))
143
- self .addParameter (ParameterBoolean (self .LAUNDER ,
144
- self .tr ('Do not launder columns/table names' ), False ))
145
- self .addParameter (ParameterBoolean (self .INDEX ,
146
- self .tr ('Do not create spatial index' ), False ))
147
- self .addParameter (ParameterBoolean (self .SKIPFAILURES ,
148
- self .tr ('Continue after a failure, skipping the failed feature' ), False ))
149
- self .addParameter (ParameterBoolean (self .PROMOTETOMULTI ,
150
- self .tr ('Promote to Multipart' ),
151
- True ))
152
- self .addParameter (ParameterBoolean (self .PRECISION ,
153
- self .tr ('Keep width and precision of input attributes' ),
154
- True ))
155
- self .addParameter (ParameterString (self .OPTIONS ,
156
- self .tr ('Additional creation options' ), '' , optional = True ))
86
+ self .addParameter (QgsProcessingParameterFeatureSource (self .INPUT ,
87
+ self .tr ('Input layer' )))
88
+ self .addParameter (QgsProcessingParameterString (self .SHAPE_ENCODING ,
89
+ self .tr ('Shape encoding' ), "" , optional = True ))
90
+ self .addParameter (QgsProcessingParameterEnum (self .GTYPE ,
91
+ self .tr ('Output geometry type' ), options = self .GEOMTYPE , defaultValue = 0 ))
92
+ self .addParameter (QgsProcessingParameterCrs (self .A_SRS ,
93
+ self .tr ('Assign an output CRS' ), defaultValue = '' , optional = False ))
94
+ self .addParameter (QgsProcessingParameterCrs (self .T_SRS ,
95
+ self .tr ('Reproject to this CRS on output ' ), defaultValue = '' , optional = True ))
96
+ self .addParameter (QgsProcessingParameterCrs (self .S_SRS ,
97
+ self .tr ('Override source CRS' ), defaultValue = '' , optional = True ))
98
+ self .addParameter (QgsProcessingParameterString (self .HOST ,
99
+ self .tr ('Host' ), defaultValue = 'localhost' , optional = True ))
100
+ self .addParameter (QgsProcessingParameterString (self .PORT ,
101
+ self .tr ('Port' ), defaultValue = '5432' , optional = True ))
102
+ self .addParameter (QgsProcessingParameterString (self .USER ,
103
+ self .tr ('Username' ), defaultValue = '' , optional = True ))
104
+ self .addParameter (QgsProcessingParameterString (self .DBNAME ,
105
+ self .tr ('Database name' ), defaultValue = '' , optional = True ))
106
+ self .addParameter (QgsProcessingParameterString (self .PASSWORD ,
107
+ self .tr ('Password' ), defaultValue = '' , optional = True ))
108
+ self .addParameter (QgsProcessingParameterString (self .SCHEMA ,
109
+ self .tr ('Schema name' ), defaultValue = 'public' , optional = True ))
110
+ self .addParameter (QgsProcessingParameterString (self .TABLE ,
111
+ self .tr ('Table name, leave blank to use input name' ),
112
+ defaultValue = '' , optional = True ))
113
+ self .addParameter (QgsProcessingParameterString (self .PK ,
114
+ self .tr ('Primary key (new field)' ), defaultValue = 'id' , optional = True ))
115
+ self .addParameter (QgsProcessingParameterField (self .PRIMARY_KEY ,
116
+ self .tr ('Primary key (existing field, used if the above option is left empty)' ), parentLayerParameterName = self .INPUT , optional = True ))
117
+ self .addParameter (QgsProcessingParameterString (self .GEOCOLUMN ,
118
+ self .tr ('Geometry column name' ), defaultValue = 'geom' , optional = True ))
119
+ self .addParameter (QgsProcessingParameterEnum (self .DIM ,
120
+ self .tr ('Vector dimensions' ), options = self .DIMLIST , defaultValue = 0 ))
121
+ self .addParameter (QgsProcessingParameterString (self .SIMPLIFY ,
122
+ self .tr ('Distance tolerance for simplification' ),
123
+ defaultValue = '' , optional = True ))
124
+ self .addParameter (QgsProcessingParameterString (self .SEGMENTIZE ,
125
+ self .tr ('Maximum distance between 2 nodes (densification)' ),
126
+ defaultValue = '' , optional = True ))
127
+ self .addParameter (QgsProcessingParameterExtent (self .SPAT ,
128
+ self .tr ('Select features by extent (defined in input layer CRS)' )))
129
+ self .addParameter (QgsProcessingParameterBoolean (self .CLIP ,
130
+ self .tr ('Clip the input layer using the above (rectangle) extent' ),
131
+ defaultValue = False ))
132
+ self .addParameter (QgsProcessingParameterString (self .WHERE ,
133
+ self .tr ('Select features using a SQL "WHERE" statement (Ex: column=\' value\' )' ),
134
+ defaultValue = '' , optional = True ))
135
+ self .addParameter (QgsProcessingParameterString (self .GT ,
136
+ self .tr ('Group N features per transaction (Default: 20000)' ),
137
+ defaultValue = '' , optional = True ))
138
+ self .addParameter (QgsProcessingParameterBoolean (self .OVERWRITE ,
139
+ self .tr ('Overwrite existing table' ), defaultValue = True ))
140
+ self .addParameter (QgsProcessingParameterBoolean (self .APPEND ,
141
+ self .tr ('Append to existing table' ), defaultValue = False ))
142
+ self .addParameter (QgsProcessingParameterBoolean (self .ADDFIELDS ,
143
+ self .tr ('Append and add new fields to existing table' ), defaultValue = False ))
144
+ self .addParameter (QgsProcessingParameterBoolean (self .LAUNDER ,
145
+ self .tr ('Do not launder columns/table names' ), defaultValue = False ))
146
+ self .addParameter (QgsProcessingParameterBoolean (self .INDEX ,
147
+ self .tr ('Do not create spatial index' ), defaultValue = False ))
148
+ self .addParameter (QgsProcessingParameterBoolean (self .SKIPFAILURES ,
149
+ self .tr ('Continue after a failure, skipping the failed feature' ), defaultValue = False ))
150
+ self .addParameter (QgsProcessingParameterBoolean (self .PROMOTETOMULTI ,
151
+ self .tr ('Promote to Multipart' ),
152
+ defaultValue = True ))
153
+ self .addParameter (QgsProcessingParameterBoolean (self .PRECISION ,
154
+ self .tr ('Keep width and precision of input attributes' ),
155
+ defaultValue = True ))
156
+ self .addParameter (QgsProcessingParameterString (self .OPTIONS ,
157
+ self .tr ('Additional creation options' ), defaultValue = '' , optional = True ))
157
158
158
159
def name (self ):
159
160
return 'importvectorintopostgisdatabasenewconnection'
@@ -164,13 +165,13 @@ def displayName(self):
164
165
def group (self ):
165
166
return self .tr ('Vector miscellaneous' )
166
167
167
- def getConnectionString (self , parameters ):
168
- host = self .getParameterValue ( self .HOST )
169
- port = self .getParameterValue ( self .PORT )
170
- user = self .getParameterValue ( self .USER )
171
- dbname = self .getParameterValue ( self .DBNAME )
172
- password = self .getParameterValue ( self .PASSWORD )
173
- schema = self .getParameterValue ( self .SCHEMA )
168
+ def getConnectionString (self , parameters , context ):
169
+ host = self .parameterAsString ( parameters , self .HOST , context )
170
+ port = self .parameterAsString ( parameters , self .PORT , context )
171
+ user = self .parameterAsString ( parameters , self .USER , context )
172
+ dbname = self .parameterAsString ( parameters , self .DBNAME , context )
173
+ password = self .parameterAsString ( parameters , self .PASSWORD , context )
174
+ schema = self .parameterAsString ( parameters , self .SCHEMA , context )
174
175
arguments = []
175
176
if host :
176
177
arguments .append ('host=' + host )
@@ -187,41 +188,41 @@ def getConnectionString(self, parameters):
187
188
return GdalUtils .escapeAndJoin (arguments )
188
189
189
190
def getConsoleCommands (self , parameters , context , feedback ):
190
- inLayer = self .getParameterValue ( self .INPUT_LAYER )
191
- ogrLayer = ogrConnectionString ( inLayer , context )[ 1 : - 1 ]
192
- shapeEncoding = self .getParameterValue ( self .SHAPE_ENCODING )
193
- ssrs = str ( self .getParameterValue ( self .S_SRS ) )
194
- tsrs = str ( self .getParameterValue ( self .T_SRS ) )
195
- asrs = str ( self .getParameterValue ( self .A_SRS ) )
196
- table = str ( self .getParameterValue ( self .TABLE ) )
197
- schema = str ( self .getParameterValue ( self .SCHEMA ) )
198
- pk = str ( self .getParameterValue ( self .PK ) )
191
+ inLayer = self .parameterAsSource ( parameters , self .INPUT , context )
192
+ ogrLayer , layername = self . getOgrCompatibleSource ( self . INPUT , parameters , context , feedback )
193
+ shapeEncoding = self .parameterAsString ( parameters , self .SHAPE_ENCODING , context )
194
+ ssrs = self .parameterAsCrs ( parameters , self .S_SRS , context )
195
+ tsrs = self .parameterAsCrs ( parameters , self .T_SRS , context )
196
+ asrs = self .parameterAsCrs ( parameters , self .A_SRS , context )
197
+ table = self .parameterAsString ( parameters , self .TABLE , context )
198
+ schema = self .parameterAsString ( parameters , self .SCHEMA , context )
199
+ pk = self .parameterAsString ( parameters , self .PK , context )
199
200
pkstring = "-lco FID=" + pk
200
- primary_key = self .getParameterValue ( self .PRIMARY_KEY )
201
- geocolumn = str ( self .getParameterValue ( self .GEOCOLUMN ) )
201
+ primary_key = self .parameterAsString ( parameters , self .PRIMARY_KEY , context )
202
+ geocolumn = self .parameterAsString ( parameters , self .GEOCOLUMN , context )
202
203
geocolumnstring = "-lco GEOMETRY_NAME=" + geocolumn
203
- dim = self .DIMLIST [self .getParameterValue ( self .DIM )]
204
+ dim = self .DIMLIST [self .parameterAsEnum ( parameters , self .DIM , context )]
204
205
dimstring = "-lco DIM=" + dim
205
- simplify = str ( self .getParameterValue ( self .SIMPLIFY ) )
206
- segmentize = str ( self .getParameterValue ( self .SEGMENTIZE ) )
207
- spat = self .getParameterValue ( self .SPAT )
208
- if not spat :
209
- spat = QgsProcessingUtils . combineLayerExtents ([ inLayer ] )
210
- clip = self .getParameterValue ( self .CLIP )
211
- where = str ( self .getParameterValue ( self .WHERE ) )
206
+ simplify = self .parameterAsString ( parameters , self .SIMPLIFY , context )
207
+ segmentize = self .parameterAsString ( parameters , self .SEGMENTIZE , context )
208
+ spat = self .parameterAsExtent ( parameters , self .SPAT , context )
209
+ if spat . isNull () :
210
+ spat = inLayer . sourceExtent ( )
211
+ clip = self .parameterAsBool ( parameters , self .CLIP , context )
212
+ where = self .parameterAsString ( parameters , self .WHERE , context )
212
213
wherestring = '-where "' + where + '"'
213
- gt = str ( self .getParameterValue ( self .GT ) )
214
- overwrite = self .getParameterValue ( self .OVERWRITE )
215
- append = self .getParameterValue ( self .APPEND )
216
- addfields = self .getParameterValue ( self .ADDFIELDS )
217
- launder = self .getParameterValue ( self .LAUNDER )
214
+ gt = self .parameterAsString ( parameters , self .GT , context )
215
+ overwrite = self .parameterAsBool ( parameters , self .OVERWRITE , context )
216
+ append = self .parameterAsBool ( parameters , self .APPEND , context )
217
+ addfields = self .parameterAsBool ( parameters , self .ADDFIELDS , context )
218
+ launder = self .parameterAsBool ( parameters , self .LAUNDER , context )
218
219
launderstring = "-lco LAUNDER=NO"
219
- index = self .getParameterValue ( self .INDEX )
220
+ index = self .parameterAsBool ( parameters , self .INDEX , context )
220
221
indexstring = "-lco SPATIAL_INDEX=OFF"
221
- skipfailures = self .getParameterValue ( self .SKIPFAILURES )
222
- promotetomulti = self .getParameterValue ( self .PROMOTETOMULTI )
223
- precision = self .getParameterValue ( self .PRECISION )
224
- options = str ( self .getParameterValue ( self .OPTIONS ) )
222
+ skipfailures = self .parameterAsBool ( parameters , self .SKIPFAILURES , context )
223
+ promotetomulti = self .parameterAsBool ( parameters , self .PROMOTETOMULTI , context )
224
+ precision = self .parameterAsBool ( parameters , self .PRECISION , context )
225
+ options = self .parameterAsString ( parameters , self .OPTIONS , context )
225
226
226
227
arguments = []
227
228
arguments .append ('-progress' )
@@ -233,7 +234,7 @@ def getConsoleCommands(self, parameters, context, feedback):
233
234
arguments .append ('-f' )
234
235
arguments .append ('PostgreSQL' )
235
236
arguments .append ('PG:"' )
236
- arguments .append (self .getConnectionString (parameters ))
237
+ arguments .append (self .getConnectionString (parameters , context ))
237
238
arguments .append ('"' )
238
239
arguments .append (dimstring )
239
240
arguments .append (ogrLayer )
@@ -248,9 +249,9 @@ def getConsoleCommands(self, parameters, context, feedback):
248
249
arguments .append ('-addfields' )
249
250
if overwrite :
250
251
arguments .append ('-overwrite' )
251
- if len (self .GEOMTYPE [self .getParameterValue ( self .GTYPE )]) > 0 :
252
+ if len (self .GEOMTYPE [self .parameterAsEnum ( parameters , self .GTYPE , context )]) > 0 :
252
253
arguments .append ('-nlt' )
253
- arguments .append (self .GEOMTYPE [self .getParameterValue ( self .GTYPE )])
254
+ arguments .append (self .GEOMTYPE [self .parameterAsEnum ( parameters , self .GTYPE , context )])
254
255
if len (geocolumn ) > 0 :
255
256
arguments .append (geocolumnstring )
256
257
if len (pk ) > 0 :
0 commit comments