벡터 레이어에 새로운 피쳐를 추가하는 코드는 다음과 같습니다.
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()