Comment transformer une fonctionnalité multipartie sélectionnée en fonctionnalités à partie unique lors de la modification dans QGIS?

9

Il existe plusieurs questions et réponses respectives sur la façon de transformer une couche d'entités multiparties en une couche d'entités à partie unique à l'aide de QGIS:

Mais toutes les solutions que j'ai vues créaient une couche entièrement nouvelle et transformeraient TOUTES les géométries en plusieurs parties en une seule.

Ainsi , les questions, comment pourrait - on, lors d' une session d'édition, de manière sélective transformer une caractéristique en multipart une caractéristique de singlepart, sans qu'il soit nécessaire de créer de nouvelles couches?

Ce serait l'opposé de l'outil "fusionner les entités sélectionnées", et similaire à exploser dans ArcGIS.

Y a-t-il un plugin qui fait ça? Comment cela pourrait-il être fait en utilisant la console python?

Alexandre Neto
la source

Réponses:

18

Inspiré par cette question et réponse comme un exemple de la façon dont "facilement" peut-on faire ses propres solutions lors de l'utilisation de l'Open Source, j'ai essayé de créer mon propre code pour "exploser" sélectivement les fonctionnalités en plusieurs parties pendant une session d'édition.

J'ai exploré l' API QGIS 1.8 pour la première fois et je suis sorti avec ce morceau de code qui semble faire le travail:

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)    

Je ne suis pas un programmeur expérimenté, donc le code n'est peut-être pas le plus efficace.

La prochaine étape sera d'en faire un plugin ... Ou du moins, essayez!

MISE À JOUR:
J'ai pu créer le plugin. Il s'appelle Multipart Split et se trouve dans le référentiel officiel QGIS.

Alexandre Neto
la source
1
Serait-il possible de travailler cette Multipart -> Singlepart conversion sans QGIS? Existe-t-il un moyen de le faire avec Standalone Python? @Alexandre Neto
Akhil
Notez que cette solution repose sur la sélection d'une partie des entités d'une couche lors de la modification dans le canevas de carte. Pour convertir toutes les fonctionnalités d'une couche (par exemple, le fichier de formes) en fonctionnalités à une seule pièce, je pense que vous pouvez utiliser la bibliothèque OGR. Jetez un oeil dans ce lien .
Alexandre Neto
À votre santé! Aide .. !!
Akhil
Je veux prendre une couche qui est un polygone multipartie et la convertir en une seule partie - je n'arrive pas à trouver le code python pour le faire dans qgis. Je vois qu'il y a une commande sous vector - outils de géométrie - Multiparts to Singleparts. c'est ce que je veux j'ai juste besoin de la syntaxe python
kflaw
@AlexandreNeto super plugin!
DPSSpatial