pyQGIS를 이용한 벡터 데이터 처리 7 : 새 피쳐 추가하기, 피쳐 제거하기

벡터 레이어에 새로운 피쳐를 추가하는 코드는 다음과 같습니다.

QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])

caps = layer.dataProvider().capabilities()
if caps & QgsVectorDataProvider.AddFeatures:
    feat = QgsFeature(layer.fields())
    feat.setAttribute("RN", "테스트로") # feat.setAttributes([.., .., .., ...])
    geom = QgsGeometry.fromWkt("MULTILINESTRING((968963 1820821, 993152 1819742, 993567 1844387))")
    feat.setGeometry(geom)
    result, outFeature = layer.dataProvider().addFeatures([feat])
    print(result, outFeature)

다음은 피쳐를 삭제하는 코드입니다.

QgsProject.instance().removeAllMapLayers()
layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr")
QgsProject.instance().addMapLayers([layer])

caps = layer.dataProvider().capabilities()
fids = []

if caps & QgsVectorDataProvider.DeleteFeatures:
    features = layer.getFeatures()
    for feat in features:
        if feat["RN"] == "테스트로":
            fids.append(feat.id())
    res = layer.dataProvider().deleteFeatures(fids)
    print(res, len(fids))            
    
#layer.triggerRepaint()

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다