QGIS에서 편집하는 동안 선택한 멀티 파트 피처를 단일 파트 피처로 변환하는 방법은 무엇입니까?


9

QGIS를 사용하여 멀티 파트 피처 레이어를 단일 파트 피처로 만드는 방법에 대한 몇 가지 질문과 대답이 있습니다.

그러나 내가 본 모든 솔루션은 완전히 새로운 레이어를 만들고 모든 멀티 파트 형상을 단일 레이어로 변환합니다.

문제는 편집 세션 중에 어떻게 새로운 레이어를 만들지 않고도 멀티 파트 피처를 단일 파트 피처로 선택적으로 변환 할 수 있는가하는 것입니다.

"선택된 기능 병합"도구와 반대 이며 ArcGIS 에서 분해 되는 것과 유사합니다 .

이 작업을 수행하는 플러그인이 있습니까? 파이썬 콘솔을 사용하여 어떻게 이것을 할 수 있습니까?

답변:


18

오픈 소스를 사용할 때 어떻게 "쉽게"자체 솔루션을 만들 수 있는지에 대한 예 로써이 질문과 답변에서 영감을 받아 편집 세션 중에 멀티 파트 기능을 선택적으로 "폭발"하는 자체 코드를 만들려고했습니다.

QGIS 1.8 API 를 처음으로 살펴 보았고 작업을 수행하기 위해 이음새가있는이 코드를 만들었습니다.

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
QGIS없이이 멀티 파트-> 싱글 파트 변환을 수행 할 수 있습니까? 독립형 Python으로 수행 할 수있는 방법이 있습니까? @Alexandre Neto
Akhil

이 솔루션은 맵 캔버스에서 편집하는 동안 레이어 기능의 일부를 선택하는 것에 의존합니다. 레이어의 모든 피쳐 (예 : shapefile)를 단일 파트 피쳐로 변환하려면 OGR 라이브러리를 사용할 수 있다고 생각합니다. 이 링크를 살펴보십시오 .
Alexandre Neto

건배! 도움이됩니다 .. !!
Akhil

하나의 다중 부분 다각형 인 레이어를 가져 와서 단일 부분으로 변환하고 싶습니다 .qgis 에서이 작업을 수행하는 Python 코드를 찾을 수없는 것 같습니다. 벡터-지오메트리 도구-Multiparts to Singleparts 명령이 있습니다. 이것은 내가 원하는 것입니다. 파이썬 문법이 필요합니다
kflaw

@AlexandreNeto 훌륭한 플러그인!
DPSSpatial
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.