Come trasformare una funzione multipart selezionata in funzionalità single part durante la modifica in QGIS?


9

Esistono diverse domande e le rispettive risposte su come creare una funzionalità multiparte Il livello in una funzionalità monocomponente utilizza uno usando QGIS:

Ma tutte le soluzioni che ho visto creano un livello completamente nuovo e trasformerebbero TUTTE le geometrie multipart in singole.

Quindi la domanda è: come si può, durante una sessione di modifica, trasformare selettivamente una funzione multipart in una funzione single part, senza la necessità di creare nuovi layer?

Sarebbe l'opposto dello strumento "Unisci funzionalità selezionate" e sarebbe simile a esplodere in ArcGIS.

C'è qualche plugin che lo fa? Come è possibile farlo utilizzando la console Python?

Risposte:


18

Ispirato da questa domanda e risposta come esempio di come "facilmente" si possano realizzare le proprie soluzioni quando si utilizza Open Source, ho provato a creare il mio codice per "sfruttare" selettivamente le funzionalità multipart durante una sessione di modifica.

Ho esplorato l' API QGIS 1.8 per la prima volta e sono uscito con questo pezzo di codice che giunge a fare il lavoro:

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)    

Non sono un programmatore esperto, quindi il codice potrebbe non essere il più efficiente.

Il prossimo ripido sarà farne un plugin ... O almeno, provaci!

AGGIORNAMENTO:
sono stato in grado di creare il plugin. Si chiama Multipart Split e può essere trovato nel repository ufficiale QGIS.


1
Sarebbe possibile lavorare con questa conversione multipart -> singlepart senza QGIS? C'è un modo per farlo con Standalone Python? @Alexandre Neto
Akhil,

Si noti che questa soluzione si basa sulla selezione di parte delle funzioni di un livello durante la modifica nell'area di disegno della mappa. Per convertire tutte le funzionalità di un layer (ad esempio shapefile) in feature a parte singola, penso che tu possa usare la libreria OGR. Dai un'occhiata a questo link .
Alexandre Neto,

Saluti! Aiuta .. !!
Akhil,

Voglio prendere un livello che è un poligono multipart e convertirlo in una singola parte - non riesco a trovare il codice Python per farlo in qgis. Vedo che c'è un comando sotto il vettore - strumenti geometria - Multipart to Singleparts. questo è quello che voglio, ho solo bisogno della sintassi di Python
kflaw

@AlexandreNeto ottimo plugin!
DPSSpatial,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.