diff --git a/python/plugins/processing/algs/gdal/GdalUtils.py b/python/plugins/processing/algs/gdal/GdalUtils.py index 0013320a9a9..93a3c90d2af 100644 --- a/python/plugins/processing/algs/gdal/GdalUtils.py +++ b/python/plugins/processing/algs/gdal/GdalUtils.py @@ -138,10 +138,10 @@ class GdalUtils: def escapeAndJoin(strList): joined = '' for s in strList: - if s[0]!='-' and ' ' in s: + if s[0] != '-' and ' ' in s: escaped = '"' + s.replace('\\', '\\\\').replace('"', '\\"') \ + '"' else: escaped = s joined += escaped + ' ' - return joined.strip() \ No newline at end of file + return joined.strip() diff --git a/python/plugins/processing/algs/gdal/OgrAlgorithm.py b/python/plugins/processing/algs/gdal/OgrAlgorithm.py index e0742bc954f..2d160f68058 100644 --- a/python/plugins/processing/algs/gdal/OgrAlgorithm.py +++ b/python/plugins/processing/algs/gdal/OgrAlgorithm.py @@ -44,8 +44,6 @@ from processing.tools import dataobjects class OgrAlgorithm(GdalAlgorithm): - DB = 'DB' - def ogrConnectionString(self, uri): ogrstr = None diff --git a/python/plugins/processing/algs/gdal/information.py b/python/plugins/processing/algs/gdal/information.py index 8d1a2547c2c..19c87706da9 100644 --- a/python/plugins/processing/algs/gdal/information.py +++ b/python/plugins/processing/algs/gdal/information.py @@ -64,6 +64,8 @@ class information(GdalAlgorithm): progress) output = self.getOutputValue(information.OUTPUT) f = open(output, 'w') + f.write('
')
for s in GdalUtils.getConsoleOutput()[1:]:
- f.write('' + str(s) + '
')
+ f.write(unicode(s))
+ f.write('')
f.close()
diff --git a/python/plugins/processing/algs/gdal/ogr2ogr.py b/python/plugins/processing/algs/gdal/ogr2ogr.py
index 597fccff77f..80c75daaa9f 100644
--- a/python/plugins/processing/algs/gdal/ogr2ogr.py
+++ b/python/plugins/processing/algs/gdal/ogr2ogr.py
@@ -25,27 +25,22 @@ __copyright__ = '(C) 2012, Victor Olaya'
__revision__ = '$Format:%H$'
-
-try:
- from osgeo import gdal, ogr, osr
- gdalAvailable = True
-except:
- gdalAvailable = False
+import os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
+
from qgis.core import *
-from processing.core.GeoAlgorithmExecutionException import \
- GeoAlgorithmExecutionException
+
from processing.parameters.ParameterVector import ParameterVector
from processing.parameters.ParameterString import ParameterString
from processing.parameters.ParameterSelection import ParameterSelection
from processing.outputs.OutputVector import OutputVector
-from OgrAlgorithm import OgrAlgorithm
-from pyogr.ogr2ogr import *
+from processing.tools.system import *
-GeomOperation = Enum(['NONE', 'SEGMENTIZE', 'SIMPLIFY_PRESERVE_TOPOLOGY'])
+from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm
+from processing.algs.gdal.GdalUtils import GdalUtils
FORMATS = [
'ESRI Shapefile',
@@ -101,9 +96,8 @@ class Ogr2Ogr(OgrAlgorithm):
OUTPUT_LAYER = 'OUTPUT_LAYER'
INPUT_LAYER = 'INPUT_LAYER'
- DEST_DS = 'DEST_DS'
- DEST_FORMAT = 'DEST_FORMAT'
- DEST_DSCO = 'DEST_DSCO'
+ FORMAT = 'FORMAT'
+ OPTIONS = 'OPTIONS'
def defineCharacteristics(self):
self.name = 'Convert format'
@@ -111,137 +105,51 @@ class Ogr2Ogr(OgrAlgorithm):
self.addParameter(ParameterVector(self.INPUT_LAYER, 'Input layer',
[ParameterVector.VECTOR_TYPE_ANY], False))
- self.addParameter(ParameterSelection(self.DEST_FORMAT,
+ self.addParameter(ParameterSelection(self.FORMAT,
'Destination Format', FORMATS))
- self.addParameter(ParameterString(self.DEST_DSCO, 'Creation Options',
- ''))
+ self.addParameter(ParameterString(self.OPTIONS, 'Creation Options',
+ '', optional=True))
self.addOutput(OutputVector(self.OUTPUT_LAYER, 'Output layer'))
def commandLineName(self):
return "gdalogr:ogr2ogr"
-
def processAlgorithm(self, progress):
- if not gdalAvailable:
- raise GeoAlgorithmExecutionException(
- 'GDAL bindings not installed.')
-
- input = self.getParameterValue(self.INPUT_LAYER)
- ogrLayer = self.ogrConnectionString(input)
+ inLayer = self.getParameterValue(self.INPUT_LAYER)
+ ogrLayer = self.ogrConnectionString(inLayer)
output = self.getOutputFromName(self.OUTPUT_LAYER)
- outfile = output.value
-
- formatIdx = self.getParameterValue(self.DEST_FORMAT)
+ outFile = output.value
+ formatIdx = self.getParameterValue(self.FORMAT)
+ outFormat = FORMATS[formatIdx]
ext = EXTS[formatIdx]
- if not outfile.endswith(ext):
- outfile = outfile + ext
- output.value = outfile
+ if not outFile.endswith(ext):
+ outFile += ext
+ output.value = outFile
- dst_ds = self.ogrConnectionString(outfile)
- dst_format = FORMATS[formatIdx]
- ogr_dsco = [self.getParameterValue(self.DEST_DSCO)]
+ output = self.ogrConnectionString(outFile)
+ options = unicode(self.getParameterValue(self.OPTIONS))
- poDS = ogr.Open(ogrLayer, False)
- if poDS is None:
- raise GeoAlgorithmExecutionException(self.failure(ogrLayer))
+ if outFormat == 'SQLite' and os.path.isfile(output):
+ os.remove(output)
- if dst_format == 'SQLite' and os.path.isfile(dst_ds):
- os.remove(dst_ds)
- driver = ogr.GetDriverByName(str(dst_format))
- poDstDS = driver.CreateDataSource(dst_ds, options=ogr_dsco)
- if poDstDS is None:
- raise GeoAlgorithmExecutionException('Error creating %s' % dst_ds)
- return
- self.ogrtransform(poDS, poDstDS, bOverwrite=True)
+ arguments = []
+ arguments.append('-f')
+ arguments.append(outFormat)
+ if len(options) > 0:
+ arguments.append(options)
- def ogrtransform(
- self,
- poSrcDS,
- poDstDS,
- papszLayers=[],
- papszLCO=[],
- bTransform=False,
- bAppend=False,
- bUpdate=False,
- bOverwrite=False,
- poOutputSRS=None,
- poSourceSRS=None,
- pszNewLayerName=None,
- pszWHERE=None,
- papszSelFields=None,
- eGType=-2,
- eGeomOp=GeomOperation.NONE,
- dfGeomOpParam=0,
- papszFieldTypesToString=[],
- pfnProgress=None,
- pProgressData=None,
- nCountLayerFeatures=0,
- poClipSrc=None,
- poClipDst=None,
- bExplodeCollections=False,
- pszZField=None,
- ):
+ arguments.append(output)
+ arguments.append(ogrLayer)
- # Process each data source layer
- if len(papszLayers) == 0:
- nLayerCount = poSrcDS.GetLayerCount()
- papoLayers = [None for i in range(nLayerCount)]
- iLayer = 0
-
- for iLayer in range(nLayerCount):
- poLayer = poSrcDS.GetLayer(iLayer)
-
- if poLayer is None:
- raise GeoAlgorithmExecutionException(
- "FAILURE: Couldn't fetch advertised layer %d!"
- % iLayer)
-
- papoLayers[iLayer] = poLayer
- iLayer = iLayer + 1
+ commands = []
+ if isWindows():
+ commands = ['cmd.exe', '/C ', 'ogr2ogr.exe',
+ GdalUtils.escapeAndJoin(arguments)]
else:
- # Process specified data source layers
- nLayerCount = len(papszLayers)
- papoLayers = [None for i in range(nLayerCount)]
- iLayer = 0
+ commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
- for layername in papszLayers:
- poLayer = poSrcDS.GetLayerByName(layername)
+ GdalUtils.runGdal(commands, progress)
- if poLayer is None:
- raise GeoAlgorithmExecutionException(
- "FAILURE: Couldn't fetch advertised layer %s!"
- % layername)
-
- papoLayers[iLayer] = poLayer
- iLayer = iLayer + 1
-
- for poSrcLayer in papoLayers:
- ok = TranslateLayer(
- poSrcDS,
- poSrcLayer,
- poDstDS,
- papszLCO,
- pszNewLayerName,
- bTransform,
- poOutputSRS,
- poSourceSRS,
- papszSelFields,
- bAppend,
- eGType,
- bOverwrite,
- eGeomOp,
- dfGeomOpParam,
- papszFieldTypesToString,
- nCountLayerFeatures,
- poClipSrc,
- poClipDst,
- bExplodeCollections,
- pszZField,
- pszWHERE,
- pfnProgress,
- pProgressData,
- )
- return True
diff --git a/python/plugins/processing/algs/gdal/ogrinfo.py b/python/plugins/processing/algs/gdal/ogrinfo.py
index ec32d787117..8808cfec576 100644
--- a/python/plugins/processing/algs/gdal/ogrinfo.py
+++ b/python/plugins/processing/algs/gdal/ogrinfo.py
@@ -25,14 +25,6 @@ __copyright__ = '(C) 2012, Victor Olaya'
__revision__ = '$Format:%H$'
-import string
-import re
-
-try:
- from osgeo import ogr
- ogrAvailable = True
-except:
- ogrAvailable = False
from PyQt4.QtCore import *
from PyQt4.QtGui import *
@@ -40,144 +32,38 @@ from qgis.core import *
from processing.parameters.ParameterVector import ParameterVector
from processing.outputs.OutputHTML import OutputHTML
-from OgrAlgorithm import OgrAlgorithm
+
+from processing.algs.gdal.GdalUtils import GdalUtils
+from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm
class OgrInfo(OgrAlgorithm):
+ INPUT = 'INPUT'
OUTPUT = 'OUTPUT'
- INPUT_LAYER = 'INPUT_LAYER'
def defineCharacteristics(self):
self.name = 'Information'
self.group = '[OGR] Miscellaneous'
- self.addParameter(ParameterVector(self.INPUT_LAYER, 'Input layer',
+ self.addParameter(ParameterVector(self.INPUT, 'Input layer',
[ParameterVector.VECTOR_TYPE_ANY], False))
self.addOutput(OutputHTML(self.OUTPUT, 'Layer information'))
- def commandLineName(self):
- return "gdalogr:vectorinfo"
-
def processAlgorithm(self, progress):
-
- input = self.getParameterValue(self.INPUT_LAYER)
- ogrLayer = self.ogrConnectionString(input)
-
+ arguments = []
+ arguments.append('-al')
+ arguments.append('-so')
+ layer = self.getParameterValue(self.INPUT)
+ conn = self.ogrConnectionString(layer)
+ arguments.append(conn)
+ GdalUtils.runGdal(['ogrinfo', GdalUtils.escapeAndJoin(arguments)],
+ progress)
output = self.getOutputValue(self.OUTPUT)
-
- self.ogrinfo(ogrLayer)
-
f = open(output, 'w')
- f.write('' + self.info + '') + f.write('
')
+ for s in GdalUtils.getConsoleOutput()[1:]:
+ f.write(unicode(s))
+ f.write('')
f.close()
-
- def out(self, text):
- self.info = self.info + text + '\n'
-
- def ogrinfo(self, pszDataSource):
- bVerbose = True
- bSummaryOnly = True
- self.info = ''
-
- if not ogrAvailable:
- self.info = 'OGR bindings not installed'
- return
-
- qDebug("Opening data source '%s'" % pszDataSource)
- poDS = ogr.Open(pszDataSource, False)
-
- if poDS is None:
- self.info = self.failure(pszDataSource)
- return
-
- poDriver = poDS.GetDriver()
-
- if bVerbose:
- self.out("INFO: Open of `%s'\n using driver `%s' successful."
- % (pszDataSource, poDriver.GetName()))
-
- poDS_Name = poDS.GetName()
- if str(type(pszDataSource)) == "| ' + col + ' | ') - f.write('