en en ko ko ko ja en en zh en pt ko en ko ko en ko ko nl ko ko ko ko en ko ko nl ko en ko ko ko en ko nl ko ko ko ko ko zh en en en en pt fr en en kn en sv fr en en en en en es fr en en en fr ja en en en en en en en en en fi en hu pt hbs_lat ru en en en en pl ko ko ko ko ko ko ko zh en en pt en en en uz en en fr eo sv en en en es en en en en en en ja en it hu ja eo en de en ko ko en en
PyQGIS에서 QgsFeature를 사용하여 속성 값을 변경하는 방법은 무엇입니까? = QgsMapLayerRegistry.instance().mapLayersByName(‘my_line’) layer = layers[0] dp =
기능의 한 속성을 업데이트하고 싶습니다. 그러나 기능 객체를 사용하여 업데이트하는 것을 모르겠습니다. 데이터 공급자를 사용하여 업데이트해야합니다.
layers = QgsMapLayerRegistry.instance().mapLayersByName('my_line') layer = layers[0] dp = layer.dataProvider() it = dp.getFeatures() for i in range(0, dp.featureCount()): feat = it.next() attrs = { 2 : 30 } layer.dataProvider().changeAttributeValues({ feat.id() : attrs })
QgsFeature객체를 사용하여 속성 값을 변경할 수 있습니까 ?
또한 반복자 객체를 사용하여 반복 할 수 있습니까?
두 가지 질문에 대한 답변 :
layer에 액세스 할 필요없이 객체 에서 기능 값을 변경할 수 있습니다 dataProvider().
예, 반복기에서 for루프를 사용할 수 있습니다 .
layers = QgsMapLayerRegistry.instance().mapLayersByName('my_line') layer = layers[0] it = layer.getFeatures() layer.startEditing() for feat in it: layer.changeAttributeValue(feat.id(), 2, 30) layer.commitChanges()
모든 레이어 피처에 대해 세 번째 (인덱스 2) 필드 값이 30으로 업데이트됩니다.
참고 : 지적한 바와 같이, 어떤 이유로 API가 할 수 있다고하더라도 QgsFeature 객체가 기능 값을 업데이트 할 수 없습니다.
예, 그러나 필드의 색인을 알아야합니다.
QgsFeature::setAttribute(int field,const QVariant & attr )
QgsFeature::fields원하는 QgsFeature::attribute(const QString & name )필드를 찾 거나 이름으로 필드 인덱스를 찾을 때까지 필드를 사용하여 필드 를 반복 할 수 있습니다 .
QVariant의 이유는 setAttribute가 Integer, Float, Date 및 Text 유형을 사용할 수 있기 때문입니다. QgsFeature.attribute (name)은 속성이 발견되면 int 유형과 변형이 발견되지 않으면 int 유형의 변형을 리턴합니다. 코드에서이를 인식하십시오. try..except 블록이 보증되면 int로 변환하고 type이 int가 아닌 경우를 제외하고 시도하십시오.
기능이이 방법을 지원하지 않을 수 있습니다. 내가 사용한 다른 방법은 QgsVectorLayer::changeAttributeValue다음과 같습니다.
레이어에 특정 기능 및 특정 속성을 업데이트하도록 지시합니다. 예제의 경우 값은 위젯에서 나옵니다.
이 글은 Gis 카테고리에 분류되었고 features, pyqgis, python, qgis 태그가 있으며 소장 마님에 의해 2022-09-18에 작성되었습니다.
두 IC간에 발진기 공유 클럭을 둘 수
Linux-특정 날짜 이후에 수정 된 모든 파일을 새 하드 드라이브로 전송 나에게 실패하기 시작했고 새로운 드라이브를 고스트 할
비싼 소프트웨어없이 Flash 게임을 개발하려면 어떻게해야합니까? [닫은] 사용하고있었습니다. FlashDevelop에 대해 알고 있지만
OGR / GDAL을 사용하여 래스터 배치를 리샘플링하는 방법은 무엇입니까? 찾고 있습니다. TIF 파일로 가득
Proudly powered by WordPress