Skip to content

Commit d45215e

Browse files
committedAug 13, 2017
Cleanup conversion of input layers to OGR compatible sources
1 parent 6301ff6 commit d45215e

File tree

2 files changed

+31
-23
lines changed

2 files changed

+31
-23
lines changed
 

‎python/plugins/processing/algs/gdal/GdalAlgorithm.py

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
from processing.core.GeoAlgorithm import GeoAlgorithm
4040
from processing.algs.gdal.GdalAlgorithmDialog import GdalAlgorithmDialog
4141
from processing.algs.gdal.GdalUtils import GdalUtils
42+
from processing.tools.vector import ogrConnectionString, ogrLayerName
43+
4244
from processing.tools import dataobjects
4345

4446
pluginPath = os.path.normpath(os.path.join(
@@ -65,23 +67,36 @@ def createCustomParametersWidget(self, parent):
6567
def getConsoleCommands(self, parameters, context, feedback):
6668
return None
6769

70+
def getOgrCompatibleSource(self, parameter_name, parameters, context, feedback):
71+
"""
72+
Interprets a parameter as an OGR compatible source and layer name
73+
"""
74+
input_layer = self.parameterAsVectorLayer(parameters, parameter_name, context)
75+
ogr_data_path = None
76+
ogr_layer_name = None
77+
if input_layer is None:
78+
# parameter is not a vector layer - try to convert to a source compatible with OGR
79+
# and extract selection if required
80+
ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context,
81+
QgsVectorFileWriter.supportedFormatExtensions(),
82+
feedback=feedback)
83+
ogr_layer_name = ogrLayerName(ogr_data_path)
84+
elif input_layer.dataProvider().name() == 'ogr':
85+
# parameter is a vector layer, with OGR data provider
86+
# so extract selection if required
87+
ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context,
88+
QgsVectorFileWriter.supportedFormatExtensions(),
89+
feedback=feedback)
90+
ogr_layer_name = ogrLayerName(input_layer.dataProvider().dataSourceUri())
91+
else:
92+
# vector layer, but not OGR - get OGR compatible path
93+
# TODO - handle "selected features only" mode!!
94+
ogr_data_path = ogrConnectionString(input_layer.dataProvider().dataSourceUri(), context)[1:-1]
95+
ogr_layer_name = ogrLayerName(input_layer.dataProvider().dataSourceUri())
96+
return ogr_data_path, ogr_layer_name
97+
6898
def processAlgorithm(self, parameters, context, feedback):
6999
commands = self.getConsoleCommands(parameters, context, feedback)
70-
#layers = QgsProcessingUtils.compatibleVectorLayers(QgsProject.instance())
71-
#supported = QgsVectorFileWriter.supportedFormatExtensions()
72-
#for i, c in enumerate(commands):
73-
# for layer in layers:
74-
# if layer.source() in c:
75-
# exported = dataobjects.exportVectorLayer(layer, supported)
76-
# exportedFileName = os.path.splitext(os.path.split(exported)[1])[0]
77-
# c = c.replace(layer.source(), exported)
78-
# if os.path.isfile(layer.source()):
79-
# fileName = os.path.splitext(os.path.split(layer.source())[1])[0]
80-
# c = re.sub('[\s]{}[\s]'.format(fileName), ' ' + exportedFileName + ' ', c)
81-
# c = re.sub('[\s]{}'.format(fileName), ' ' + exportedFileName, c)
82-
# c = re.sub('["\']{}["\']'.format(fileName), "'" + exportedFileName + "'", c)
83-
84-
# commands[i] = c
85100
GdalUtils.runGdal(commands, feedback)
86101

87102
# auto generate outputs

‎python/plugins/processing/algs/gdal/ogr2ogrpointsonlines.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,8 @@ def group(self):
8383
return self.tr('Vector geoprocessing')
8484

8585
def getConsoleCommands(self, parameters, context, feedback):
86-
inLayer = self.parameterAsVectorLayer(parameters, self.INPUT_LAYER, context)
87-
if inLayer is None or inLayer.dataProvider().name() == 'ogr':
88-
ogrLayer = self.parameterAsCompatibleSourceLayerPath(parameters, self.INPUT_LAYER, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback)
89-
if inLayer is None:
90-
inLayer = ogrLayer
91-
else:
92-
ogrLayer = ogrConnectionString(inLayer, context)[1:-1]
86+
ogrLayer, layername = self.getOgrCompatibleSource(self.INPUT_LAYER, parameters, context, feedback)
9387

94-
layername = "'" + ogrLayerName(inLayer) + "'"
9588
distance = str(self.parameterAsDouble(parameters, self.DISTANCE, context))
9689
geometry = str(self.parameterAsString(parameters, self.GEOMETRY, context))
9790

0 commit comments

Comments
 (0)
Please sign in to comment.