39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from qgis.core import QgsVectorLayer, QgsFeature, QgsGeometry, QgsPointXY, QgsFields, QgsField, QgsWkbTypes
|
|
from qgis.PyQt.QtCore import QVariant
|
|
|
|
layer = iface.activeLayer()
|
|
|
|
sum_x = 0
|
|
sum_y = 0
|
|
count = 0
|
|
|
|
for feature in layer.getFeatures():
|
|
geom = feature.geometry()
|
|
if geom.isMultipart():
|
|
points = geom.asMultiPoint()
|
|
else:
|
|
points = [geom.asPoint()]
|
|
for point in points:
|
|
sum_x += point.x()
|
|
sum_y += point.y()
|
|
count += 1
|
|
|
|
mean_x = sum_x / count
|
|
mean_y = sum_y / count
|
|
centroid_point = QgsGeometry.fromPointXY(QgsPointXY(mean_x, mean_y))
|
|
|
|
crs = layer.crs().authid()
|
|
new_layer = QgsVectorLayer(f"Point?crs={crs}", "Centroid Layer", "memory")
|
|
new_layer_data_provider = new_layer.dataProvider()
|
|
new_layer_data_provider.addAttributes([QgsField("id", QVariant.Int)])
|
|
new_layer.updateFields()
|
|
new_feature = QgsFeature()
|
|
new_feature.setGeometry(centroid_point)
|
|
new_feature.setAttributes([1])
|
|
new_layer_data_provider.addFeature(new_feature)
|
|
new_layer.updateExtents()
|
|
|
|
QgsProject.instance().addMapLayer(new_layer)
|
|
|
|
print(f"New layer 'Centroid Layer' created withcentroid at: ({mean_x}, {mean_y})")
|