Skip to content

Commit 9143bd7

Browse files
committed
Merge pull request #1874 from gioman/fix_processing_ogr_postgis_import_2
new fixes for processing/ogr import in postgis tools
2 parents db89a04 + de2b3ea commit 9143bd7

File tree

2 files changed

+53
-10
lines changed

2 files changed

+53
-10
lines changed

python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py

+26-5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from processing.core.parameters import ParameterSelection
3232
from processing.core.parameters import ParameterBoolean
3333
from processing.core.parameters import ParameterExtent
34+
from processing.core.parameters import ParameterTableField
3435

3536
from processing.tools.system import isWindows
3637

@@ -53,6 +54,7 @@ class Ogr2OgrToPostGis(OgrAlgorithm):
5354
SCHEMA = 'SCHEMA'
5455
TABLE = 'TABLE'
5556
PK = 'PK'
57+
PRIMARY_KEY = 'PRIMARY_KEY'
5658
GEOCOLUMN = 'GEOCOLUMN'
5759
DIM = 'DIM'
5860
DIMLIST = ['2','3']
@@ -68,6 +70,8 @@ class Ogr2OgrToPostGis(OgrAlgorithm):
6870
LAUNDER = 'LAUNDER'
6971
INDEX = 'INDEX'
7072
SKIPFAILURES = 'SKIPFAILURES'
73+
PRECISION = 'PRECISION'
74+
PROMOTETOMULTI = 'PROMOTETOMULTI'
7175
OPTIONS = 'OPTIONS'
7276

7377
def defineCharacteristics(self):
@@ -76,7 +80,7 @@ def defineCharacteristics(self):
7680
self.addParameter(ParameterVector(self.INPUT_LAYER,
7781
self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY], False))
7882
self.addParameter(ParameterSelection(self.GTYPE,
79-
self.tr('Output geometry type'), self.GEOMTYPE, 5))
83+
self.tr('Output geometry type'), self.GEOMTYPE, 0))
8084
self.addParameter(ParameterCrs(self.A_SRS,
8185
self.tr('Assign an output CRS'), ''))
8286
self.addParameter(ParameterCrs(self.T_SRS,
@@ -99,7 +103,9 @@ def defineCharacteristics(self):
99103
self.tr('Table name, leave blank to use input name'),
100104
'', optional=True))
101105
self.addParameter(ParameterString(self.PK,
102-
self.tr('Primary Key'), 'id', optional=True))
106+
self.tr('Primary key (new field)'), 'id', optional=True))
107+
self.addParameter(ParameterTableField(self.PRIMARY_KEY,
108+
self.tr('Primary key (existing field, used if the above option is left empty)'), self.INPUT_LAYER, optional=True))
103109
self.addParameter(ParameterString(self.GEOCOLUMN,
104110
self.tr('Geometry column name'), 'geom', optional=True))
105111
self.addParameter(ParameterSelection(self.DIM,
@@ -133,6 +139,12 @@ def defineCharacteristics(self):
133139
self.tr('Do not create spatial index'), False))
134140
self.addParameter(ParameterBoolean(self.SKIPFAILURES,
135141
self.tr('Continue after a failure, skipping the failed feature'), False))
142+
self.addParameter(ParameterBoolean(self.PROMOTETOMULTI,
143+
self.tr('Promote to Multipart'),
144+
True))
145+
self.addParameter(ParameterBoolean(self.PRECISION,
146+
self.tr('Keep width and precision of input attributes'),
147+
True))
136148
self.addParameter(ParameterString(self.OPTIONS,
137149
self.tr('Additional creation options'), '', optional=True))
138150

@@ -152,6 +164,7 @@ def processAlgorithm(self, progress):
152164
table = unicode(self.getParameterValue(self.TABLE))
153165
pk = unicode(self.getParameterValue(self.PK))
154166
pkstring = "-lco FID="+pk
167+
primary_key = self.getParameterValue(self.PRIMARY_KEY)
155168
geocolumn = unicode(self.getParameterValue(self.GEOCOLUMN))
156169
geocolumnstring = "-lco GEOMETRY_NAME="+geocolumn
157170
dim = self.DIMLIST[self.getParameterValue(self.DIM)]
@@ -172,6 +185,8 @@ def processAlgorithm(self, progress):
172185
index = self.getParameterValue(self.INDEX)
173186
indexstring = "-lco SPATIAL_INDEX=OFF"
174187
skipfailures = self.getParameterValue(self.SKIPFAILURES)
188+
promotetomulti = self.getParameterValue(self.PROMOTETOMULTI)
189+
precision = self.getParameterValue(self.PRECISION)
175190
options = unicode(self.getParameterValue(self.OPTIONS))
176191

177192
arguments = []
@@ -182,9 +197,9 @@ def processAlgorithm(self, progress):
182197
arguments.append('PG:"host='+host)
183198
arguments.append('port='+port)
184199
if len(dbname) > 0:
185-
arguments.append('dbname='+dbname)
200+
arguments.append('dbname='+dbname)
186201
if len(password) > 0:
187-
arguments.append('password='+password)
202+
arguments.append('password='+password)
188203
arguments.append('user='+user+'"')
189204
arguments.append(dimstring)
190205
arguments.append(ogrLayer)
@@ -208,6 +223,8 @@ def processAlgorithm(self, progress):
208223
arguments.append(geocolumnstring)
209224
if len(pk) > 0:
210225
arguments.append(pkstring)
226+
elif primary_key != None:
227+
arguments.append("-lco FID="+primary_key)
211228
if len(table) > 0:
212229
arguments.append('-nln')
213230
arguments.append(table)
@@ -242,6 +259,10 @@ def processAlgorithm(self, progress):
242259
if len(gt) > 0:
243260
arguments.append('-gt')
244261
arguments.append(gt)
262+
if promotetomulti:
263+
arguments.append('-nlt PROMOTE_TO_MULTI')
264+
if precision is False:
265+
arguments.append('-lco PRECISION=NO')
245266
if len(options) > 0:
246267
arguments.append(options)
247268

@@ -252,4 +273,4 @@ def processAlgorithm(self, progress):
252273
else:
253274
commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
254275

255-
GdalUtils.runGdal(commands, progress)
276+
GdalUtils.runGdal(commands, progress)

python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py

+27-5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28+
2829
from PyQt4.QtCore import QSettings
2930

3031
from processing.core.parameters import ParameterVector
@@ -33,6 +34,7 @@
3334
from processing.core.parameters import ParameterSelection
3435
from processing.core.parameters import ParameterBoolean
3536
from processing.core.parameters import ParameterExtent
37+
from processing.core.parameters import ParameterTableField
3638

3739
from processing.tools.system import isWindows
3840

@@ -56,6 +58,7 @@ class Ogr2OgrToPostGisList(OgrAlgorithm):
5658
SCHEMA = 'SCHEMA'
5759
TABLE = 'TABLE'
5860
PK = 'PK'
61+
PRIMARY_KEY = 'PRIMARY_KEY'
5962
GEOCOLUMN = 'GEOCOLUMN'
6063
DIM = 'DIM'
6164
DIMLIST = ['2','3']
@@ -71,6 +74,8 @@ class Ogr2OgrToPostGisList(OgrAlgorithm):
7174
LAUNDER = 'LAUNDER'
7275
INDEX = 'INDEX'
7376
SKIPFAILURES = 'SKIPFAILURES'
77+
PRECISION = 'PRECISION'
78+
PROMOTETOMULTI = 'PROMOTETOMULTI'
7479
OPTIONS = 'OPTIONS'
7580

7681
def dbConnectionNames(self):
@@ -87,7 +92,7 @@ def defineCharacteristics(self):
8792
self.addParameter(ParameterVector(self.INPUT_LAYER,
8893
self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY], False))
8994
self.addParameter(ParameterSelection(self.GTYPE,
90-
self.tr('Output geometry type'), self.GEOMTYPE, 5))
95+
self.tr('Output geometry type'), self.GEOMTYPE, 0))
9196
self.addParameter(ParameterCrs(self.A_SRS,
9297
self.tr('Assign an output CRS'), ''))
9398
self.addParameter(ParameterCrs(self.T_SRS,
@@ -100,7 +105,9 @@ def defineCharacteristics(self):
100105
self.tr('Table name, leave blank to use input name'),
101106
'', optional=True))
102107
self.addParameter(ParameterString(self.PK,
103-
self.tr('Primary key'), 'id', optional=True))
108+
self.tr('Primary key (new field)'), 'id', optional=True))
109+
self.addParameter(ParameterTableField(self.PRIMARY_KEY,
110+
self.tr('Primary key (existing field, used if the above option is left empty)'), self.INPUT_LAYER, optional=True))
104111
self.addParameter(ParameterString(self.GEOCOLUMN,
105112
self.tr('Geometry column name'), 'geom', optional=True))
106113
self.addParameter(ParameterSelection(self.DIM,
@@ -135,6 +142,12 @@ def defineCharacteristics(self):
135142
self.addParameter(ParameterBoolean(self.SKIPFAILURES,
136143
self.tr('Continue after a failure, skipping the failed feature'),
137144
False))
145+
self.addParameter(ParameterBoolean(self.PROMOTETOMULTI,
146+
self.tr('Promote to Multipart'),
147+
True))
148+
self.addParameter(ParameterBoolean(self.PRECISION,
149+
self.tr('Keep width and precision of input attributes'),
150+
True))
138151
self.addParameter(ParameterString(self.OPTIONS,
139152
self.tr('Additional creation options'), '', optional=True))
140153

@@ -157,6 +170,7 @@ def processAlgorithm(self, progress):
157170
table = unicode(self.getParameterValue(self.TABLE))
158171
pk = unicode(self.getParameterValue(self.PK))
159172
pkstring = "-lco FID="+pk
173+
primary_key = self.getParameterValue(self.PRIMARY_KEY)
160174
geocolumn = unicode(self.getParameterValue(self.GEOCOLUMN))
161175
geocolumnstring = "-lco GEOMETRY_NAME="+geocolumn
162176
dim = self.DIMLIST[self.getParameterValue(self.DIM)]
@@ -177,6 +191,8 @@ def processAlgorithm(self, progress):
177191
index = self.getParameterValue(self.INDEX)
178192
indexstring = "-lco SPATIAL_INDEX=OFF"
179193
skipfailures = self.getParameterValue(self.SKIPFAILURES)
194+
promotetomulti = self.getParameterValue(self.PROMOTETOMULTI)
195+
precision = self.getParameterValue(self.PRECISION)
180196
options = unicode(self.getParameterValue(self.OPTIONS))
181197

182198
arguments = []
@@ -187,9 +203,9 @@ def processAlgorithm(self, progress):
187203
arguments.append('PG:"host='+host)
188204
arguments.append('port='+port)
189205
if len(dbname) > 0:
190-
arguments.append('dbname='+dbname)
206+
arguments.append('dbname='+dbname)
191207
if len(password) > 0:
192-
arguments.append('password='+password)
208+
arguments.append('password='+password)
193209
arguments.append('user='+user+'"')
194210
arguments.append(dimstring)
195211
arguments.append(ogrLayer)
@@ -213,6 +229,8 @@ def processAlgorithm(self, progress):
213229
arguments.append(geocolumnstring)
214230
if len(pk) > 0:
215231
arguments.append(pkstring)
232+
elif primary_key != None:
233+
arguments.append("-lco FID="+primary_key)
216234
if len(table) > 0:
217235
arguments.append('-nln')
218236
arguments.append(table)
@@ -247,6 +265,10 @@ def processAlgorithm(self, progress):
247265
if len(gt) > 0:
248266
arguments.append('-gt')
249267
arguments.append(gt)
268+
if promotetomulti:
269+
arguments.append('-nlt PROMOTE_TO_MULTI')
270+
if precision is False:
271+
arguments.append('-lco PRECISION=NO')
250272
if len(options) > 0:
251273
arguments.append(options)
252274

@@ -257,4 +279,4 @@ def processAlgorithm(self, progress):
257279
else:
258280
commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
259281

260-
GdalUtils.runGdal(commands, progress)
282+
GdalUtils.runGdal(commands, progress)

0 commit comments

Comments
 (0)