Skip to content

Commit 4820216

Browse files
committed
Port build virtual vector alg to new API
1 parent f2d2777 commit 4820216

File tree

2 files changed

+48
-32
lines changed

2 files changed

+48
-32
lines changed

python/plugins/processing/algs/qgis/Datasources2Vrt.py

+45-30
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,20 @@
3131

3232
from osgeo import ogr
3333
from qgis.core import (QgsProcessingFeedback,
34-
QgsApplication)
35-
from processing.tools import dataobjects
34+
QgsProcessingParameterMultipleLayers,
35+
QgsProcessingParameterBoolean,
36+
QgsProcessing,
37+
QgsProcessingParameterVectorDestination,
38+
QgsProcessingOutputString,
39+
QgsProcessingException)
3640
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
37-
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
38-
from processing.core.parameters import ParameterMultipleInput
39-
from processing.core.parameters import ParameterBoolean
40-
from processing.core.outputs import OutputFile
41-
from processing.core.outputs import OutputString
4241

4342

4443
class Datasources2Vrt(QgisAlgorithm):
45-
DATASOURCES = 'DATASOURCES'
44+
INPUT = 'INPUT'
4645
UNIONED = 'UNIONED'
4746

48-
VRT_FILE = 'VRT_FILE'
47+
OUTPUT = 'OUTPUT'
4948
VRT_STRING = 'VRT_STRING'
5049

5150
def group(self):
@@ -55,17 +54,32 @@ def __init__(self):
5554
super().__init__()
5655

5756
def initAlgorithm(self, config=None):
58-
self.addParameter(ParameterMultipleInput(self.DATASOURCES,
59-
self.tr('Input datasources'),
60-
dataobjects.TYPE_TABLE))
61-
self.addParameter(ParameterBoolean(self.UNIONED,
62-
self.tr('Create "unioned" VRT'),
63-
default=False))
64-
65-
self.addOutput(OutputFile(self.VRT_FILE,
66-
self.tr('Virtual vector'), ext='vrt'))
67-
self.addOutput(OutputString(self.VRT_STRING,
68-
self.tr('Virtual string')))
57+
self.addParameter(QgsProcessingParameterMultipleLayers(self.INPUT,
58+
self.tr('Input datasources'),
59+
QgsProcessing.TypeTable))
60+
self.addParameter(QgsProcessingParameterBoolean(self.UNIONED,
61+
self.tr('Create "unioned" VRT'),
62+
defaultValue=False))
63+
64+
class ParameterVectorVrtDestination(QgsProcessingParameterVectorDestination):
65+
66+
def __init__(self, name, description):
67+
super().__init__(name, description)
68+
69+
def clone(self):
70+
copy = ParameterVectorVrtDestination(self.name(), self.description())
71+
return copy
72+
73+
def type(self):
74+
return 'vrt_vector_destination'
75+
76+
def defaultFileExtension(self):
77+
return 'vrt'
78+
79+
self.addParameter(ParameterVectorVrtDestination(self.OUTPUT,
80+
self.tr('Virtual vector')))
81+
self.addOutput(QgsProcessingOutputString(self.VRT_STRING,
82+
self.tr('Virtual string')))
6983

7084
def name(self):
7185
return 'buildvirtualvector'
@@ -74,20 +88,17 @@ def displayName(self):
7488
return self.tr('Build virtual vector')
7589

7690
def processAlgorithm(self, parameters, context, feedback):
77-
input_layers = self.getParameterValue(self.DATASOURCES)
78-
unioned = self.getParameterValue(self.UNIONED)
79-
vrtPath = self.getOutputValue(self.VRT_FILE)
80-
81-
layers = input_layers.split(';')
91+
input_layers = self.parameterAsLayerList(parameters, self.INPUT, context)
92+
unioned = self.parameterAsBool(parameters, self.UNIONED, context)
93+
vrtPath = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
8294

83-
vrtString = self.mergeDataSources2Vrt(layers,
95+
vrtString = self.mergeDataSources2Vrt(input_layers,
8496
vrtPath,
8597
union=unioned,
8698
relative=False,
8799
schema=False,
88100
feedback=feedback)
89-
90-
self.setOutputValue(self.VRT_STRING, vrtString)
101+
return {self.OUTPUT: vrtPath, self.VRT_STRING: vrtString}
91102

92103
def mergeDataSources2Vrt(self, dataSources, outFile, union=False, relative=False,
93104
schema=False, feedback=None):
@@ -107,12 +118,16 @@ def mergeDataSources2Vrt(self, dataSources, outFile, union=False, relative=False
107118
vrt += '<OGRVRTUnionLayer name="UnionedLayer">'
108119

109120
total = 100.0 / len(dataSources) if dataSources else 1
110-
for current, inFile in enumerate(dataSources):
121+
for current, layer in enumerate(dataSources):
122+
if feedback.isCanceled():
123+
break
124+
111125
feedback.setProgress(int(current * total))
112126

127+
inFile = layer.source()
113128
srcDS = ogr.Open(inFile, 0)
114129
if srcDS is None:
115-
raise GeoAlgorithmExecutionException(
130+
raise QgsProcessingException(
116131
self.tr('Invalid datasource: {}'.format(inFile)))
117132

118133
if schema:

python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from .ConvexHull import ConvexHull
5353
from .CreateAttributeIndex import CreateAttributeIndex
5454
from .CreateConstantRaster import CreateConstantRaster
55+
from .Datasources2Vrt import Datasources2Vrt
5556
from .Delaunay import Delaunay
5657
from .DeleteColumn import DeleteColumn
5758
from .DeleteDuplicateGeometries import DeleteDuplicateGeometries
@@ -164,7 +165,6 @@
164165
# from .FieldsCalculator import FieldsCalculator
165166
# from .FieldPyculator import FieldsPyculator
166167
# from .SelectByAttributeSum import SelectByAttributeSum
167-
# from .Datasources2Vrt import Datasources2Vrt
168168
# from .DefineProjection import DefineProjection
169169
# from .RectanglesOvalsDiamondsVariable import RectanglesOvalsDiamondsVariable
170170
# from .RectanglesOvalsDiamondsFixed import RectanglesOvalsDiamondsFixed
@@ -192,7 +192,7 @@ def getAlgs(self):
192192
# SpatialJoin(),
193193
# GeometryConvert(), FieldsCalculator(),
194194
# FieldsPyculator(),
195-
# FieldsMapper(), SelectByAttributeSum(), Datasources2Vrt(),
195+
# FieldsMapper(), SelectByAttributeSum()
196196
# DefineProjection(),
197197
# RectanglesOvalsDiamondsVariable(),
198198
# RectanglesOvalsDiamondsFixed(),
@@ -212,6 +212,7 @@ def getAlgs(self):
212212
ConvexHull(),
213213
CreateAttributeIndex(),
214214
CreateConstantRaster(),
215+
Datasources2Vrt(),
215216
Delaunay(),
216217
DeleteColumn(),
217218
DeleteDuplicateGeometries(),

0 commit comments

Comments
 (0)