Files
bachelorthesis/python-scripts/center_of_points.py
T

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})")