39
39
from processing .core .GeoAlgorithm import GeoAlgorithm
40
40
from processing .algs .gdal .GdalAlgorithmDialog import GdalAlgorithmDialog
41
41
from processing .algs .gdal .GdalUtils import GdalUtils
42
+ from processing .tools .vector import ogrConnectionString , ogrLayerName
43
+
42
44
from processing .tools import dataobjects
43
45
44
46
pluginPath = os .path .normpath (os .path .join (
@@ -65,23 +67,36 @@ def createCustomParametersWidget(self, parent):
65
67
def getConsoleCommands (self , parameters , context , feedback ):
66
68
return None
67
69
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
+
68
98
def processAlgorithm (self , parameters , context , feedback ):
69
99
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
85
100
GdalUtils .runGdal (commands , feedback )
86
101
87
102
# auto generate outputs
0 commit comments