mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-18 00:03:05 -04:00
Faster command generation in gdal algorithm dialog, by skipping forced incompatible layer exports
This commit is contained in:
parent
96c7e6e0a6
commit
be962c7d8b
@ -100,7 +100,7 @@ class Buffer(GdalAlgorithm):
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
|
||||
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
|
||||
fieldName = self.parameterAsString(parameters, self.FIELD, context)
|
||||
|
@ -119,7 +119,7 @@ class ClipRasterByMask(GdalAlgorithm):
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context)
|
||||
|
||||
maskLayer, maskLayerName = self.getOgrCompatibleSource(self.MASK, parameters, context, feedback)
|
||||
maskLayer, maskLayerName = self.getOgrCompatibleSource(self.MASK, parameters, context, feedback, executing)
|
||||
|
||||
nodata = self.parameterAsDouble(parameters, self.NODATA, context)
|
||||
options = self.parameterAsString(parameters, self.OPTIONS, context)
|
||||
|
@ -75,7 +75,7 @@ class ClipVectorByExtent(GdalAlgorithm):
|
||||
return 'ogr2ogr'
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
source = self.parameterAsSource(parameters, self.INPUT, context)
|
||||
extent = self.parameterAsExtent(parameters, self.EXTENT, context, source.sourceCrs())
|
||||
options = self.parameterAsString(parameters, self.OPTIONS, context)
|
||||
|
@ -74,8 +74,8 @@ class ClipVectorByMask(GdalAlgorithm):
|
||||
return 'ogr2ogr'
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
inLayer, inLayerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
maskLayer, maskLayerName = self.getOgrCompatibleSource(self.MASK, parameters, context, feedback)
|
||||
inLayer, inLayerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
maskLayer, maskLayerName = self.getOgrCompatibleSource(self.MASK, parameters, context, feedback, executing)
|
||||
options = self.parameterAsString(parameters, self.OPTIONS, context)
|
||||
outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
|
||||
|
||||
|
@ -111,7 +111,7 @@ class Dissolve(GdalAlgorithm):
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
|
||||
fieldName = self.parameterAsString(parameters, self.FIELD, context)
|
||||
|
||||
|
@ -83,7 +83,7 @@ class ExecuteSql(GdalAlgorithm):
|
||||
return self.tr('Vector miscellaneous')
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
sql = self.parameterAsString(parameters, self.SQL, context)
|
||||
options = self.parameterAsString(parameters, self.OPTIONS, context)
|
||||
outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
|
||||
|
@ -62,27 +62,41 @@ class GdalAlgorithm(QgsProcessingAlgorithm):
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
return None
|
||||
|
||||
def getOgrCompatibleSource(self, parameter_name, parameters, context, feedback):
|
||||
def getOgrCompatibleSource(self, parameter_name, parameters, context, feedback, executing):
|
||||
"""
|
||||
Interprets a parameter as an OGR compatible source and layer name
|
||||
:param executing:
|
||||
"""
|
||||
input_layer = self.parameterAsVectorLayer(parameters, parameter_name, context)
|
||||
ogr_data_path = None
|
||||
ogr_layer_name = None
|
||||
if input_layer is None:
|
||||
if executing:
|
||||
# parameter is not a vector layer - try to convert to a source compatible with OGR
|
||||
# and extract selection if required
|
||||
ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context,
|
||||
QgsVectorFileWriter.supportedFormatExtensions(),
|
||||
feedback=feedback)
|
||||
ogr_layer_name = GdalUtils.ogrLayerName(ogr_data_path)
|
||||
else:
|
||||
#not executing - don't waste time converting incompatible sources, just return dummy strings
|
||||
#for the command preview (since the source isn't compatible with OGR, it has no meaning anyway and can't
|
||||
#be run directly in the command line)
|
||||
ogr_data_path = 'path_to_data_file'
|
||||
ogr_layer_name = 'layer_name'
|
||||
elif input_layer.dataProvider().name() == 'ogr':
|
||||
if executing:
|
||||
# parameter is a vector layer, with OGR data provider
|
||||
# so extract selection if required
|
||||
ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context,
|
||||
QgsVectorFileWriter.supportedFormatExtensions(),
|
||||
feedback=feedback)
|
||||
ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri())
|
||||
else:
|
||||
#not executing - don't worry about 'selected features only' handling. It has no meaning
|
||||
#for the command line preview since it has no meaning outside of a QGIS session!
|
||||
ogr_data_path = GdalUtils.ogrConnectionString(input_layer.dataProvider().dataSourceUri(), context)[1:-1]
|
||||
ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri())
|
||||
else:
|
||||
# vector layer, but not OGR - get OGR compatible path
|
||||
# TODO - handle "selected features only" mode!!
|
||||
|
@ -136,7 +136,7 @@ class GridAverage(GdalAlgorithm):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'grid.png'))
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
|
||||
arguments = ['-l']
|
||||
arguments.append(layerName)
|
||||
|
@ -150,7 +150,7 @@ class GridDataMetrics(GdalAlgorithm):
|
||||
return self.tr('Raster analysis')
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
|
||||
arguments = ['-l']
|
||||
arguments.append(layerName)
|
||||
|
@ -156,7 +156,7 @@ class GridInverseDistance(GdalAlgorithm):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'grid.png'))
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
|
||||
arguments = ['-l']
|
||||
arguments.append(layerName)
|
||||
|
@ -143,7 +143,7 @@ class GridInverseDistanceNearestNeighbor(GdalAlgorithm):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'grid.png'))
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
|
||||
arguments = ['-l']
|
||||
arguments.append(layerName)
|
||||
|
@ -118,7 +118,7 @@ class GridLinear(GdalAlgorithm):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'grid.png'))
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
|
||||
arguments = ['-l']
|
||||
arguments.append(layerName)
|
||||
|
@ -131,7 +131,7 @@ class GridNearestNeighbor(GdalAlgorithm):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'grid.png'))
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
|
||||
arguments = ['-l']
|
||||
arguments.append(layerName)
|
||||
|
@ -83,7 +83,7 @@ class OffsetCurve(GdalAlgorithm):
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
|
||||
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
|
||||
options = self.parameterAsString(parameters, self.OPTIONS, context)
|
||||
|
@ -186,7 +186,7 @@ class OgrToPostGis(GdalAlgorithm):
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
inLayer = self.parameterAsSource(parameters, self.INPUT, context)
|
||||
ogrLayer, layername = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layername = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
shapeEncoding = self.parameterAsString(parameters, self.SHAPE_ENCODING, context)
|
||||
ssrs = self.parameterAsCrs(parameters, self.S_SRS, context).authid()
|
||||
tsrs = self.parameterAsCrs(parameters, self.T_SRS, context).authid()
|
||||
|
@ -109,7 +109,7 @@ class OneSideBuffer(GdalAlgorithm):
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
|
||||
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
|
||||
side = self.parameterAsEnum(parameters, self.BUFFER_SIDE, context)
|
||||
|
@ -88,7 +88,7 @@ class PointsAlongLines(GdalAlgorithm):
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
|
||||
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
|
||||
outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
|
||||
|
@ -72,7 +72,7 @@ class ogr2ogr(GdalAlgorithm):
|
||||
return 'ogr2ogr'
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback, executing=True):
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
|
||||
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
|
||||
options = self.parameterAsString(parameters, self.OPTIONS, context)
|
||||
outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user