Как преобразовать выбранный многокомпонентный объект в однокомпонентный объект при редактировании в QGIS?

9

Существует несколько вопросов и соответствующих ответов о том, как превратить многоэлементный слой объектов в единый слой объектов с помощью QGIS:

Но все решения, которые я видел, создают совершенно новый слой и преобразуют ВСЕ составные геометрии в единые.

Таким образом, возникает вопрос: как можно во время сеанса редактирования выборочно преобразовать многокомпонентный элемент в однокомпонентный, без необходимости создавать новые слои?

Это было бы противоположно инструменту «объединить выбранные объекты» и аналогично взрыву в ArcGIS.

Есть ли плагин, делающий это? Как это можно сделать с помощью консоли Python?

Александр Нето
источник

Ответы:

18

Вдохновленный этим вопросом и ответом в качестве примера того, как «легко» можно создавать свои собственные решения при использовании Open Source, я попытался создать свой собственный код для выборочного «взрыва» многокомпонентных функций во время сеанса редактирования.

Я впервые исследовал API QGIS 1.8 и вышел с этим фрагментом кода, который можно использовать для выполнения этой работы:

layer = qgis.utils.iface.mapCanvas().currentLayer()
remove_list = []

for feature in layer.selectedFeatures():
    geom = feature.geometry()
    # check if feature geometry is multipart
    if geom.isMultipart():
        remove_list.append(feature.id())
        new_features = []
        temp_feature = QgsFeature(feature)
        # create a new feature using the geometry of each part
        for part in geom.asGeometryCollection ():
            temp_feature.setGeometry(part)
            new_features.append(QgsFeature(temp_feature))
        # add new features to layer
        layer.addFeatures(new_features, False)

# remove the original (multipart) features from layer
if len(remove_list) > 0:
    for id in remove_list:
        layer.deleteFeature (id)    

Я не опытный программист, поэтому код может быть не самым эффективным.

Следующий крутой шаг - сделать из него плагин ... Или, по крайней мере, попытаться!

ОБНОВЛЕНИЕ:
я смог создать плагин. Он называется Multipart Split и может быть найден в официальном репозитории QGIS.

Александр Нето
источник
1
Будет ли возможно работать это Multipart -> Singlepart преобразование без QGIS? Есть ли способ сделать это с помощью автономного Python? @ Александр Нето
Ахил
Обратите внимание, что это решение основывается на выборе части объектов слоя во время редактирования на холсте карты. Чтобы преобразовать все элементы слоя (скажем, шейп-файл) в отдельные элементы, я думаю, вы можете использовать библиотеку OGR. Посмотрите по этой ссылке .
Александр Нето
Ура! Помогает .. !!
Ахил
Я хочу взять слой, состоящий из одного многоугольника и преобразовать его в одну часть - я не могу найти код Python для этого в qgis. Я вижу, есть команда под вектором - инструменты геометрии - Multiparts to Singleparts. это то, что я хочу, мне просто нужен синтаксис python
kflaw
@AlexandreNeto отличный плагин!
DPSSpatial