mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-18 00:03:05 -04:00
Resurrect OGR points along lines algorithm
This commit is contained in:
parent
ab079f9d92
commit
6301ff6606
@ -67,21 +67,21 @@ class GdalAlgorithm(QgsProcessingAlgorithm):
|
||||
|
||||
def processAlgorithm(self, parameters, context, feedback):
|
||||
commands = self.getConsoleCommands(parameters, context, feedback)
|
||||
layers = QgsProcessingUtils.compatibleVectorLayers(QgsProject.instance())
|
||||
supported = QgsVectorFileWriter.supportedFormatExtensions()
|
||||
for i, c in enumerate(commands):
|
||||
for layer in layers:
|
||||
if layer.source() in c:
|
||||
exported = dataobjects.exportVectorLayer(layer, supported)
|
||||
exportedFileName = os.path.splitext(os.path.split(exported)[1])[0]
|
||||
c = c.replace(layer.source(), exported)
|
||||
if os.path.isfile(layer.source()):
|
||||
fileName = os.path.splitext(os.path.split(layer.source())[1])[0]
|
||||
c = re.sub('[\s]{}[\s]'.format(fileName), ' ' + exportedFileName + ' ', c)
|
||||
c = re.sub('[\s]{}'.format(fileName), ' ' + exportedFileName, c)
|
||||
c = re.sub('["\']{}["\']'.format(fileName), "'" + exportedFileName + "'", c)
|
||||
#layers = QgsProcessingUtils.compatibleVectorLayers(QgsProject.instance())
|
||||
#supported = QgsVectorFileWriter.supportedFormatExtensions()
|
||||
#for i, c in enumerate(commands):
|
||||
# for layer in layers:
|
||||
# if layer.source() in c:
|
||||
# exported = dataobjects.exportVectorLayer(layer, supported)
|
||||
# exportedFileName = os.path.splitext(os.path.split(exported)[1])[0]
|
||||
# c = c.replace(layer.source(), exported)
|
||||
# if os.path.isfile(layer.source()):
|
||||
# fileName = os.path.splitext(os.path.split(layer.source())[1])[0]
|
||||
# c = re.sub('[\s]{}[\s]'.format(fileName), ' ' + exportedFileName + ' ', c)
|
||||
# c = re.sub('[\s]{}'.format(fileName), ' ' + exportedFileName, c)
|
||||
# c = re.sub('["\']{}["\']'.format(fileName), "'" + exportedFileName + "'", c)
|
||||
|
||||
commands[i] = c
|
||||
# commands[i] = c
|
||||
GdalUtils.runGdal(commands, feedback)
|
||||
|
||||
# auto generate outputs
|
||||
|
@ -75,7 +75,7 @@ from .warp import warp
|
||||
# from .ogr2ogrclipextent import Ogr2OgrClipExtent
|
||||
# from .ogr2ogrtopostgis import Ogr2OgrToPostGis
|
||||
# from .ogr2ogrtopostgislist import Ogr2OgrToPostGisList
|
||||
# from .ogr2ogrpointsonlines import Ogr2OgrPointsOnLines
|
||||
from .ogr2ogrpointsonlines import Ogr2OgrPointsOnLines
|
||||
# from .ogr2ogrbuffer import Ogr2OgrBuffer
|
||||
# from .ogr2ogrdissolve import Ogr2OgrDissolve
|
||||
# from .onesidebuffer import OneSideBuffer
|
||||
@ -182,7 +182,7 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
||||
# Ogr2OgrClipExtent(),
|
||||
# Ogr2OgrToPostGis(),
|
||||
# Ogr2OgrToPostGisList(),
|
||||
# Ogr2OgrPointsOnLines(),
|
||||
Ogr2OgrPointsOnLines(),
|
||||
# Ogr2OgrBuffer(),
|
||||
# Ogr2OgrDissolve(),
|
||||
# OneSideBuffer(),
|
||||
|
@ -26,6 +26,14 @@ __copyright__ = '(C) 2015, Giovanni Manghi'
|
||||
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
from qgis.core import (QgsProcessingParameterFeatureSource,
|
||||
QgsProcessingParameterString,
|
||||
QgsProcessingParameterNumber,
|
||||
QgsProcessingParameterVectorDestination,
|
||||
QgsProcessingOutputVectorLayer,
|
||||
QgsProcessing,
|
||||
QgsVectorFileWriter,
|
||||
QgsVectorLayer)
|
||||
from processing.core.parameters import ParameterVector
|
||||
from processing.core.parameters import ParameterString
|
||||
from processing.core.parameters import ParameterNumber
|
||||
@ -51,18 +59,19 @@ class Ogr2OgrPointsOnLines(GdalAlgorithm):
|
||||
super().__init__()
|
||||
|
||||
def initAlgorithm(self, config=None):
|
||||
self.addParameter(ParameterVector(self.INPUT_LAYER,
|
||||
self.tr('Input layer'), [dataobjects.TYPE_VECTOR_LINE], False))
|
||||
self.addParameter(ParameterString(self.GEOMETRY,
|
||||
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT_LAYER,
|
||||
self.tr('Input layer'), [QgsProcessing.TypeVectorLine], optional=False))
|
||||
self.addParameter(QgsProcessingParameterString(self.GEOMETRY,
|
||||
self.tr('Geometry column name ("geometry" for Shapefiles, may be different for other formats)'),
|
||||
'geometry', optional=False))
|
||||
self.addParameter(ParameterNumber(self.DISTANCE,
|
||||
self.tr('Distance from line start represented as fraction of line length'), 0, 1, 0.5))
|
||||
self.addParameter(ParameterString(self.OPTIONS,
|
||||
defaultValue='geometry', optional=False))
|
||||
self.addParameter(QgsProcessingParameterNumber(self.DISTANCE,
|
||||
self.tr('Distance from line start represented as fraction of line length'), type=QgsProcessingParameterNumber.Double, minValue=0, maxValue=1, defaultValue=0.5))
|
||||
self.addParameter(QgsProcessingParameterString(self.OPTIONS,
|
||||
self.tr('Additional creation options (see ogr2ogr manual)'),
|
||||
'', optional=True))
|
||||
defaultValue='', optional=True))
|
||||
|
||||
self.addOutput(OutputVector(self.OUTPUT_LAYER, self.tr('Points along lines'), datatype=[dataobjects.TYPE_VECTOR_POINT]))
|
||||
self.addParameter(QgsProcessingParameterVectorDestination(self.OUTPUT_LAYER, self.tr('Points along lines'), QgsProcessing.TypeVectorPoint))
|
||||
self.addOutput(QgsProcessingOutputVectorLayer(self.OUTPUT_LAYER, self.tr("Points along lines"), QgsProcessing.TypeVectorPoint))
|
||||
|
||||
def name(self):
|
||||
return 'createpointsalonglines'
|
||||
@ -74,17 +83,22 @@ class Ogr2OgrPointsOnLines(GdalAlgorithm):
|
||||
return self.tr('Vector geoprocessing')
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback):
|
||||
inLayer = self.getParameterValue(self.INPUT_LAYER)
|
||||
ogrLayer = ogrConnectionString(inLayer)[1:-1]
|
||||
inLayer = self.parameterAsVectorLayer(parameters, self.INPUT_LAYER, context)
|
||||
if inLayer is None or inLayer.dataProvider().name() == 'ogr':
|
||||
ogrLayer = self.parameterAsCompatibleSourceLayerPath(parameters, self.INPUT_LAYER, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback)
|
||||
if inLayer is None:
|
||||
inLayer = ogrLayer
|
||||
else:
|
||||
ogrLayer = ogrConnectionString(inLayer, context)[1:-1]
|
||||
|
||||
layername = "'" + ogrLayerName(inLayer) + "'"
|
||||
distance = str(self.getParameterValue(self.DISTANCE))
|
||||
geometry = str(self.getParameterValue(self.GEOMETRY))
|
||||
distance = str(self.parameterAsDouble(parameters, self.DISTANCE, context))
|
||||
geometry = str(self.parameterAsString(parameters, self.GEOMETRY, context))
|
||||
|
||||
output = self.getOutputFromName(self.OUTPUT_LAYER)
|
||||
outFile = output.value
|
||||
outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT_LAYER, context)
|
||||
|
||||
output = ogrConnectionString(outFile)
|
||||
options = str(self.getParameterValue(self.OPTIONS))
|
||||
output = ogrConnectionString(outFile, context)
|
||||
options = str(self.parameterAsString(parameters, self.OPTIONS, context))
|
||||
|
||||
arguments = []
|
||||
arguments.append(output)
|
||||
|
@ -90,19 +90,19 @@ tests:
|
||||
# geometry:
|
||||
# precision: 7
|
||||
#
|
||||
# - algorithm: gdal:createpointsalonglines
|
||||
# name: Points along lines
|
||||
# params:
|
||||
# DISTANCE: 0.25
|
||||
# GEOMETRY: geometry
|
||||
# INPUT_LAYER:
|
||||
# name: lines.gml
|
||||
# type: vector
|
||||
# results:
|
||||
# OUTPUT_LAYER:
|
||||
# name: expected/gdal/points_along_lines.gml
|
||||
# type: vector
|
||||
#
|
||||
- algorithm: gdal:createpointsalonglines
|
||||
name: Points along lines
|
||||
params:
|
||||
DISTANCE: 0.25
|
||||
GEOMETRY: geometry
|
||||
INPUT_LAYER:
|
||||
name: lines.gml
|
||||
type: vector
|
||||
results:
|
||||
OUTPUT_LAYER:
|
||||
name: expected/gdal/points_along_lines.gml
|
||||
type: vector
|
||||
|
||||
# - algorithm: gdal:offsetlinesforlines
|
||||
# name: Offset lines for lines (right-handed)
|
||||
# params:
|
||||
|
Loading…
x
Reference in New Issue
Block a user