2017-03-16 12:30:26 +02:00
|
|
|
##Centroids=name
|
|
|
|
##Geometry=group
|
|
|
|
##INPUT_LAYER=vector
|
|
|
|
##OUTPUT_LAYER=output vector
|
|
|
|
|
2017-04-26 07:41:42 +10:00
|
|
|
from qgis.core import QgsWkbTypes, QgsGeometry, QgsProcessingUtils
|
2017-03-16 12:30:26 +02:00
|
|
|
|
2017-04-26 14:33:53 +10:00
|
|
|
from processing.tools.vector import createVectorWriter
|
2017-04-05 18:35:55 +10:00
|
|
|
from processing.tools import dataobjects
|
2017-03-16 12:30:26 +02:00
|
|
|
|
2017-05-01 17:40:47 +10:00
|
|
|
layer = dataobjects.QgsProcessingUtils.mapLayerFromString(INPUT_LAYER, context)
|
2017-03-16 12:30:26 +02:00
|
|
|
fields = layer.fields()
|
|
|
|
|
2017-04-26 14:33:53 +10:00
|
|
|
writer, writer_dest, writer_layer = createVectorWriter(OUTPUT_LAYER, 'utf-8', fields, QgsWkbTypes.Point, layer.crs(),
|
|
|
|
context)
|
2017-03-16 12:30:26 +02:00
|
|
|
|
2017-04-26 07:41:42 +10:00
|
|
|
features = QgsProcessingUtils.getFeatures(layer, context)
|
|
|
|
count = QgsProcessingUtils.featureCount(layer, context)
|
2017-03-16 12:30:26 +02:00
|
|
|
if count == 0:
|
|
|
|
raise GeoAlgorithmExecutionException('Input layer contains no features.')
|
|
|
|
|
2017-04-26 07:41:42 +10:00
|
|
|
total = 100.0 / count
|
2017-03-16 12:30:26 +02:00
|
|
|
|
|
|
|
for count, f in enumerate(features):
|
|
|
|
outputFeature = f
|
2017-03-16 17:18:52 +02:00
|
|
|
if f.hasGeometry():
|
2017-03-16 12:30:26 +02:00
|
|
|
outputGeometry = f.geometry().centroid()
|
|
|
|
outputFeature.setGeometry(outputGeometry)
|
|
|
|
|
|
|
|
writer.addFeature(outputFeature)
|
|
|
|
feedback.setProgress(int(count * total))
|