QGISでベクトルデータを表示してみる その2
ベクトルレイヤーを表示出来たとして、各featureへのアクセスを行いたい。
単純に考え付いたのがこれ。
feature数をfor文の条件にして、IDをキーにfeatureを持ってきて、属性の最初のカラムの内容を表示する。
l = qgis.utils.iface.activeLayer() for i in range(l.featureCount()): l.featureAtId(i,feat) att = feat.attributeMap() print att[0].toString()
これでも出来なくはないですが、途中でfeature数いじったりする場合は都合悪いですね。
PyQGIS Developer CookBookを見てても出てるのは下記みたいな方法です。
selectのところが肝でしょうか。下記では属性でもって全てのfeatureを対象とするようにしていますが、範囲なんかでも指定出来ます。
provider = l.dataProvider() feat = QgsFeature() allAttrs = provider.attributeIndexes() provider.select(allAttrs) while provider.nextFeature(feat): att = feat.attributeMap() print att[0].toString()
各featureにアクセス出来たとして、変更の方法がイマイチわかってにないです。
属性の変更については、IDとカラムを指定して書き換えれるようです。
l.startEditing() l.changeAttributeValue(0,0,"test") l.commitChanges()
編集モードに切り替わって、
属性を置き換えて、
編集モードを戻します。
startEditing()をしない状態で、属性の置き換えをしようとするとfalseが返ってきます。
とりあえずここまで。