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