From dab3092139f6092e37c92d8e4bc4d97f5b470ee4 Mon Sep 17 00:00:00 2001 From: Giovanni Manghi Date: Sun, 1 Feb 2015 23:56:10 +0000 Subject: [PATCH 1/3] better and new fixes for processing/ogr import in postgis tools --- .../processing/algs/gdal/ogr2ogrtopostgis.py | 40 +++++++++++++++--- .../algs/gdal/ogr2ogrtopostgislist.py | 42 +++++++++++++++---- 2 files changed, 68 insertions(+), 14 deletions(-) diff --git a/python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py b/python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py index 6c0d14234b51..034496b89524 100644 --- a/python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py +++ b/python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py @@ -25,14 +25,22 @@ __revision__ = '$Format:%H$' +import os + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from qgis.core import * + from processing.core.parameters import ParameterVector from processing.core.parameters import ParameterString from processing.core.parameters import ParameterCrs from processing.core.parameters import ParameterSelection from processing.core.parameters import ParameterBoolean from processing.core.parameters import ParameterExtent +from processing.core.parameters import ParameterTableField -from processing.tools.system import isWindows +from processing.tools.system import * from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm from processing.algs.gdal.GdalUtils import GdalUtils @@ -53,6 +61,7 @@ class Ogr2OgrToPostGis(OgrAlgorithm): SCHEMA = 'SCHEMA' TABLE = 'TABLE' PK = 'PK' + PRIMARY_KEY = 'PRIMARY_KEY' GEOCOLUMN = 'GEOCOLUMN' DIM = 'DIM' DIMLIST = ['2','3'] @@ -68,6 +77,8 @@ class Ogr2OgrToPostGis(OgrAlgorithm): LAUNDER = 'LAUNDER' INDEX = 'INDEX' SKIPFAILURES = 'SKIPFAILURES' + PRECISION = 'PRECISION' + PROMOTETOMULTI = 'PROMOTETOMULTI' OPTIONS = 'OPTIONS' def defineCharacteristics(self): @@ -76,7 +87,7 @@ def defineCharacteristics(self): self.addParameter(ParameterVector(self.INPUT_LAYER, self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY], False)) self.addParameter(ParameterSelection(self.GTYPE, - self.tr('Output geometry type'), self.GEOMTYPE, 5)) + self.tr('Output geometry type'), self.GEOMTYPE, 0)) self.addParameter(ParameterCrs(self.A_SRS, self.tr('Assign an output CRS'), '')) self.addParameter(ParameterCrs(self.T_SRS, @@ -99,7 +110,9 @@ def defineCharacteristics(self): self.tr('Table name, leave blank to use input name'), '', optional=True)) self.addParameter(ParameterString(self.PK, - self.tr('Primary Key'), 'id', optional=True)) + self.tr('Primary key (new field)'), 'id', optional=True)) + self.addParameter(ParameterTableField(self.PRIMARY_KEY, + self.tr('Primary key (existing field, used if the above option is left empty)'), self.INPUT_LAYER, optional=True)) self.addParameter(ParameterString(self.GEOCOLUMN, self.tr('Geometry column name'), 'geom', optional=True)) self.addParameter(ParameterSelection(self.DIM, @@ -133,6 +146,12 @@ def defineCharacteristics(self): self.tr('Do not create spatial index'), False)) self.addParameter(ParameterBoolean(self.SKIPFAILURES, self.tr('Continue after a failure, skipping the failed feature'), False)) + self.addParameter(ParameterBoolean(self.PROMOTETOMULTI, + self.tr('Promote to Multipart'), + True)) + self.addParameter(ParameterBoolean(self.PRECISION, + self.tr('Keep width and precision of input attributes'), + True)) self.addParameter(ParameterString(self.OPTIONS, self.tr('Additional creation options'), '', optional=True)) @@ -152,6 +171,7 @@ def processAlgorithm(self, progress): table = unicode(self.getParameterValue(self.TABLE)) pk = unicode(self.getParameterValue(self.PK)) pkstring = "-lco FID="+pk + primary_key = self.getParameterValue(self.PRIMARY_KEY) geocolumn = unicode(self.getParameterValue(self.GEOCOLUMN)) geocolumnstring = "-lco GEOMETRY_NAME="+geocolumn dim = self.DIMLIST[self.getParameterValue(self.DIM)] @@ -172,6 +192,8 @@ def processAlgorithm(self, progress): index = self.getParameterValue(self.INDEX) indexstring = "-lco SPATIAL_INDEX=OFF" skipfailures = self.getParameterValue(self.SKIPFAILURES) + promotetomulti = self.getParameterValue(self.PROMOTETOMULTI) + precision = self.getParameterValue(self.PRECISION) options = unicode(self.getParameterValue(self.OPTIONS)) arguments = [] @@ -182,9 +204,9 @@ def processAlgorithm(self, progress): arguments.append('PG:"host='+host) arguments.append('port='+port) if len(dbname) > 0: - arguments.append('dbname='+dbname) + arguments.append('dbname='+dbname) if len(password) > 0: - arguments.append('password='+password) + arguments.append('password='+password) arguments.append('user='+user+'"') arguments.append(dimstring) arguments.append(ogrLayer) @@ -208,6 +230,8 @@ def processAlgorithm(self, progress): arguments.append(geocolumnstring) if len(pk) > 0: arguments.append(pkstring) + elif primary_key != None: + arguments.append("-lco FID="+primary_key) if len(table) > 0: arguments.append('-nln') arguments.append(table) @@ -242,6 +266,10 @@ def processAlgorithm(self, progress): if len(gt) > 0: arguments.append('-gt') arguments.append(gt) + if promotetomulti: + arguments.append('-nlt PROMOTE_TO_MULTI') + if precision is False: + arguments.append('-lco PRECISION=NO') if len(options) > 0: arguments.append(options) @@ -252,4 +280,4 @@ def processAlgorithm(self, progress): else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] - GdalUtils.runGdal(commands, progress) + GdalUtils.runGdal(commands, progress) \ No newline at end of file diff --git a/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py b/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py index 967c1ed02c1c..95b32ccc4862 100644 --- a/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py +++ b/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py @@ -25,7 +25,12 @@ __revision__ = '$Format:%H$' -from PyQt4.QtCore import QSettings +import os + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from qgis.core import * from processing.core.parameters import ParameterVector from processing.core.parameters import ParameterString @@ -33,8 +38,9 @@ from processing.core.parameters import ParameterSelection from processing.core.parameters import ParameterBoolean from processing.core.parameters import ParameterExtent +from processing.core.parameters import ParameterTableField -from processing.tools.system import isWindows +from processing.tools.system import * from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm from processing.algs.gdal.GdalUtils import GdalUtils @@ -56,6 +62,7 @@ class Ogr2OgrToPostGisList(OgrAlgorithm): SCHEMA = 'SCHEMA' TABLE = 'TABLE' PK = 'PK' + PRIMARY_KEY = 'PRIMARY_KEY' GEOCOLUMN = 'GEOCOLUMN' DIM = 'DIM' DIMLIST = ['2','3'] @@ -71,6 +78,8 @@ class Ogr2OgrToPostGisList(OgrAlgorithm): LAUNDER = 'LAUNDER' INDEX = 'INDEX' SKIPFAILURES = 'SKIPFAILURES' + PRECISION = 'PRECISION' + PROMOTETOMULTI = 'PROMOTETOMULTI' OPTIONS = 'OPTIONS' def dbConnectionNames(self): @@ -87,7 +96,7 @@ def defineCharacteristics(self): self.addParameter(ParameterVector(self.INPUT_LAYER, self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY], False)) self.addParameter(ParameterSelection(self.GTYPE, - self.tr('Output geometry type'), self.GEOMTYPE, 5)) + self.tr('Output geometry type'), self.GEOMTYPE, 0)) self.addParameter(ParameterCrs(self.A_SRS, self.tr('Assign an output CRS'), '')) self.addParameter(ParameterCrs(self.T_SRS, @@ -100,7 +109,9 @@ def defineCharacteristics(self): self.tr('Table name, leave blank to use input name'), '', optional=True)) self.addParameter(ParameterString(self.PK, - self.tr('Primary key'), 'id', optional=True)) + self.tr('Primary key (new field)'), 'id', optional=True)) + self.addParameter(ParameterTableField(self.PRIMARY_KEY, + self.tr('Primary key (existing field, used if the above option is left empty)'), self.INPUT_LAYER, optional=True)) self.addParameter(ParameterString(self.GEOCOLUMN, self.tr('Geometry column name'), 'geom', optional=True)) self.addParameter(ParameterSelection(self.DIM, @@ -135,6 +146,12 @@ def defineCharacteristics(self): self.addParameter(ParameterBoolean(self.SKIPFAILURES, self.tr('Continue after a failure, skipping the failed feature'), False)) + self.addParameter(ParameterBoolean(self.PROMOTETOMULTI, + self.tr('Promote to Multipart'), + True)) + self.addParameter(ParameterBoolean(self.PRECISION, + self.tr('Keep width and precision of input attributes'), + True)) self.addParameter(ParameterString(self.OPTIONS, self.tr('Additional creation options'), '', optional=True)) @@ -151,12 +168,13 @@ def processAlgorithm(self, progress): ogrLayer = self.ogrConnectionString(inLayer)[1:-1] ssrs = unicode(self.getParameterValue(self.S_SRS)) tsrs = unicode(self.getParameterValue(self.T_SRS)) - asrs = unicode(self.getParameterValue(self.A_SRS)) + asrs = unicode(self.getParameterValue(self.A_SRS)) schema = unicode(self.getParameterValue(self.SCHEMA)) schemastring = "-lco SCHEMA="+schema table = unicode(self.getParameterValue(self.TABLE)) pk = unicode(self.getParameterValue(self.PK)) pkstring = "-lco FID="+pk + primary_key = self.getParameterValue(self.PRIMARY_KEY) geocolumn = unicode(self.getParameterValue(self.GEOCOLUMN)) geocolumnstring = "-lco GEOMETRY_NAME="+geocolumn dim = self.DIMLIST[self.getParameterValue(self.DIM)] @@ -177,6 +195,8 @@ def processAlgorithm(self, progress): index = self.getParameterValue(self.INDEX) indexstring = "-lco SPATIAL_INDEX=OFF" skipfailures = self.getParameterValue(self.SKIPFAILURES) + promotetomulti = self.getParameterValue(self.PROMOTETOMULTI) + precision = self.getParameterValue(self.PRECISION) options = unicode(self.getParameterValue(self.OPTIONS)) arguments = [] @@ -187,9 +207,9 @@ def processAlgorithm(self, progress): arguments.append('PG:"host='+host) arguments.append('port='+port) if len(dbname) > 0: - arguments.append('dbname='+dbname) + arguments.append('dbname='+dbname) if len(password) > 0: - arguments.append('password='+password) + arguments.append('password='+password) arguments.append('user='+user+'"') arguments.append(dimstring) arguments.append(ogrLayer) @@ -213,6 +233,8 @@ def processAlgorithm(self, progress): arguments.append(geocolumnstring) if len(pk) > 0: arguments.append(pkstring) + elif primary_key != None: + arguments.append("-lco FID="+primary_key) if len(table) > 0: arguments.append('-nln') arguments.append(table) @@ -247,6 +269,10 @@ def processAlgorithm(self, progress): if len(gt) > 0: arguments.append('-gt') arguments.append(gt) + if promotetomulti: + arguments.append('-nlt PROMOTE_TO_MULTI') + if precision is False: + arguments.append('-lco PRECISION=NO') if len(options) > 0: arguments.append(options) @@ -257,4 +283,4 @@ def processAlgorithm(self, progress): else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] - GdalUtils.runGdal(commands, progress) + GdalUtils.runGdal(commands, progress) \ No newline at end of file From e3bd6acbacb2c664ba15bdac8a2a0fc4daca8f32 Mon Sep 17 00:00:00 2001 From: Giovanni Manghi Date: Mon, 2 Feb 2015 00:21:31 +0000 Subject: [PATCH 2/3] update to latest changes in master --- python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py | 9 +-------- .../plugins/processing/algs/gdal/ogr2ogrtopostgislist.py | 8 ++------ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py b/python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py index 034496b89524..d864abfd2f8e 100644 --- a/python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py +++ b/python/plugins/processing/algs/gdal/ogr2ogrtopostgis.py @@ -25,13 +25,6 @@ __revision__ = '$Format:%H$' -import os - -from PyQt4.QtCore import * -from PyQt4.QtGui import * - -from qgis.core import * - from processing.core.parameters import ParameterVector from processing.core.parameters import ParameterString from processing.core.parameters import ParameterCrs @@ -40,7 +33,7 @@ from processing.core.parameters import ParameterExtent from processing.core.parameters import ParameterTableField -from processing.tools.system import * +from processing.tools.system import isWindows from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm from processing.algs.gdal.GdalUtils import GdalUtils diff --git a/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py b/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py index 95b32ccc4862..0111c3b4ac33 100644 --- a/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py +++ b/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py @@ -25,12 +25,8 @@ __revision__ = '$Format:%H$' -import os -from PyQt4.QtCore import * -from PyQt4.QtGui import * - -from qgis.core import * +from PyQt4.QtCore import QSettings from processing.core.parameters import ParameterVector from processing.core.parameters import ParameterString @@ -40,7 +36,7 @@ from processing.core.parameters import ParameterExtent from processing.core.parameters import ParameterTableField -from processing.tools.system import * +from processing.tools.system import isWindows from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm from processing.algs.gdal.GdalUtils import GdalUtils From de2b3ea81ddeca6a660ab8c316d57ed31256b8f9 Mon Sep 17 00:00:00 2001 From: Giovanni Manghi Date: Mon, 2 Feb 2015 00:25:49 +0000 Subject: [PATCH 3/3] remove spaces --- python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py b/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py index 0111c3b4ac33..d95539ddc509 100644 --- a/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py +++ b/python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py @@ -164,7 +164,7 @@ def processAlgorithm(self, progress): ogrLayer = self.ogrConnectionString(inLayer)[1:-1] ssrs = unicode(self.getParameterValue(self.S_SRS)) tsrs = unicode(self.getParameterValue(self.T_SRS)) - asrs = unicode(self.getParameterValue(self.A_SRS)) + asrs = unicode(self.getParameterValue(self.A_SRS)) schema = unicode(self.getParameterValue(self.SCHEMA)) schemastring = "-lco SCHEMA="+schema table = unicode(self.getParameterValue(self.TABLE))