Jak przekształcić wybraną funkcję wieloczęściową w funkcje jednoosobowe podczas edycji w QGIS?

9

Istnieje kilka pytań i odpowiedzi na temat tworzenia wieloczęściowych elementów Warstwa w jednoelementowe elementy za pomocą QGIS:

Ale wszystkie rozwiązania, które widziałem, tworzą zupełnie nową warstwę i przekształcałyby WSZYSTKIE geometrie wieloczęściowe w pojedyncze.

Pytanie brzmi: w jaki sposób można podczas sesji edycji selektywnie przekształcić element wieloczęściowy w element pojedynczego elementu bez potrzeby tworzenia nowych warstw?

Byłoby to przeciwieństwo narzędzia „scal wybrane elementy” i podobne do eksplozji w ArcGIS.

Czy robi to jakaś wtyczka? Jak można to zrobić za pomocą konsoli python?

Alexandre Neto
źródło

Odpowiedzi:

18

Zainspirowany tym pytaniem i odpowiedzią jako przykładem tego, jak „łatwo” można tworzyć własne rozwiązania, korzystając z Open Source, próbowałem stworzyć własny kod, aby selektywnie „eksplodować” funkcje wieloczęściowe podczas sesji edytorskiej.

Po raz pierwszy zbadałem interfejs API QGIS 1.8 i wyszedłem z tym fragmentem kodu, który wydaje się wykonywać tę pracę:

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)    

Nie jestem doświadczonym programistą, więc kod może nie być najbardziej wydajny.

Następnym krokiem będzie zrobienie z niego wtyczki ... A przynajmniej spróbuj!

AKTUALIZACJA:
Byłem w stanie stworzyć wtyczkę. Nazywa się Multipart Split i można go znaleźć w oficjalnym repozytorium QGIS.

Alexandre Neto
źródło
1
Czy byłoby możliwe działanie tej konwersji Multipart -> Singlepart bez QGIS? Czy można to zrobić w Standalone Python? @Alexandre Neto
Akhil
Zauważ, że to rozwiązanie polega na wybraniu części funkcji warstwy podczas edycji w kanwie mapy. Aby przekonwertować wszystkie funkcje warstwy (powiedzmy shapefile) na obiekty jednoczęściowe, myślę, że można użyć biblioteki OGR. Spójrz w ten link .
Alexandre Neto,
Twoje zdrowie! Pomaga .. !!
Achil
Chcę wziąć warstwę, która jest jednym wieloczęściowym wielokątem i przekonwertować ją na jedną część - nie mogę znaleźć kodu Pythona, aby to zrobić w qgis. Widzę, że pod wektorem - narzędzia geometrii istnieje polecenie - Multiparts do Singleparts. właśnie tego chcę Potrzebuję tylko składni Pythona
kflaw
@AlexandreNeto świetna wtyczka!
DPSSpatial