From e19e1dea9d14f94433ffc4d470ce64cf3e0c251f Mon Sep 17 00:00:00 2001 From: nirvn Date: Sat, 28 Jul 2018 10:49:06 +0700 Subject: [PATCH] [processing] be more flexible with multipoint layers, allow sampling for single part point --- .../processing/algs/qgis/RasterSampling.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/python/plugins/processing/algs/qgis/RasterSampling.py b/python/plugins/processing/algs/qgis/RasterSampling.py index ba4a219ae9f..272fd6af7e8 100644 --- a/python/plugins/processing/algs/qgis/RasterSampling.py +++ b/python/plugins/processing/algs/qgis/RasterSampling.py @@ -36,6 +36,7 @@ from qgis.core import (NULL, QgsField, QgsFeatureSink, QgsRaster, + QgsPointXY, QgsProcessing, QgsProcessingParameterRasterLayer, QgsProcessingParameterString, @@ -160,13 +161,18 @@ class RasterSampling(QgisAlgorithm): attrs = i.attributes() - if i.geometry().isMultipart(): - raise QgsProcessingException(self.tr('''Impossible to sample data - of a Multipart layer. Please use the Multipart to single part - algorithm to transform the layer.''')) + if i.geometry().isMultipart() and i.geometry().constGet().partCount() > 1: + sink.addFeature(i, QgsFeatureSink.FastInsert) + feedback.setProgress(int(n * total)) + feedback.reportError(self.tr('Impossible to sample data of multipart feature {}.').format(i.id())) + continue # get the feature geometry as point - point = i.geometry().asPoint() + point = QgsPointXY() + if i.geometry().isMultipart(): + point = i.geometry().asMultiPoint()[0] + else: + point = i.geometry().asPoint() # reproject to raster crs try: