Страница 2 из 2

Re: Центроиды линий

Добавлено: 10 июн 2015, 12:18
Александр Мурый
Вот вариант предыдущего скрипта с копированием атрибутов.

Код: Выделить всё


from qgis.core import *
import qgis.utils

layer = qgis.utils.iface.mapCanvas().currentLayer()
iter = layer.getFeatures()

crs = layer.crs().toWkt()

out_name = layer.name() + '_centerpoints'
vl = QgsVectorLayer("Point?crs=" + crs, out_name, "memory")
pr = vl.dataProvider()

fet = QgsFeature()

fields = layer.dataProvider().fields().toList()
new_attr = []

for feature in iter:
geom = feature.geometry()
attr = feature.attributes()

for attrib in fields:
new_attr.append(QgsField(attrib.name(),attrib.type()))
pr.addAttributes(new_attr)
vl.updateFields()

length = geom.length()
mid = geom.interpolate(length/2)
fet.setGeometry(mid)
fet.setAttributes(attr)
pr.addFeatures([fet])

vl.commitChanges()

QgsMapLayerRegistry.instance().addMapLayer(vl)

center_points_pyqgis.py
(800 байт) 388 скачиваний
Замечание: не запускать на больших файлах (начинает сжирать всю опер.память и вешает QGIS намертво).

Re: Центроиды линий

Добавлено: 10 июн 2015, 12:39
Игорь Лебедь
Спасибо! Вопрос решён. Жаль, что такого казалось бы простого инструмента (или хотя бы опции в инструменте Convert geometry type) нет в стандартной поставке QGIS и NEXTGIS.