waigani's diary

QGISを中心にFOSS4Gをいじくる

QGISでベクトルデータを表示してみる その5

引き続き、図形の座標変更してみます。

layer,dataProviderと持ってきてましたが、layerだけからでも出来ます。
並行移動の場合は、QgsVectorLayer::translateFeatureを追加います。
x方向、y方向の移動量と、対象図形のIDを指定します。

l = qgis.utils.iface.activeLayer()
l.startEditing()
l.translateFeature(0,-10000,0)
l.commitChanges()

移動前、

移動後、

続いて、各頂点の座標値を変更。
QgsVectorLayer::moveVertexを使用します。
変更後のX座標値、Y座標値、対象図形ID、対象頂点を指定します。
select()した後じゃないとダメな場合があったので入れています。どういうケースで指定が必須かは調べていません。

l.startEditing()
l.select(0)
l.moveVertex(-120000,-300000,0,0)
l.moveVertex(-100000,-300000,0,1)
l.moveVertex(-100000,-280000,0,2)
l.moveVertex(-120000,-280000,0,3)
l.commitChanges()

移動後

頂点を削除する場合は、QgsVectorLayer::deleteVertexを使用します。
対象図形ID、対象頂点を指定します。

l.startEditing()
l.select(0)
l.deleteVertex(0,0)
l.commitChanges()

削除後

頂点を追加する場合は、QgsVectorLayer::insertVertexを使用します。
追加する頂点のX座標値、Y座標値、対象図形ID、対象頂点を指定します。
最後に追加してみました。

l.startEditing()
l.select(0)
l.insertVertex(-120000,-300000,0,3)
l.commitChanges()