行の長さを計算するための「QGIS GUIの方法」について説明しているこの記事を見つけました。http://www.qgistutorials.com/en/docs/calculating_line_lengths.html
Pythonコードを使用してベクターレイヤーの1行(フィーチャ)の長さを計算するにはどうすればよいですか?
例として、黄色の線の長さを知りたい。
行の長さを計算するための「QGIS GUIの方法」について説明しているこの記事を見つけました。http://www.qgistutorials.com/en/docs/calculating_line_lengths.html
Pythonコードを使用してベクターレイヤーの1行(フィーチャ)の長さを計算するにはどうすればよいですか?
例として、黄色の線の長さを知りたい。
回答:
QGISドキュメント:ジオメトリ処理は、あなたが任意の選択した行(複数可)の長さを取得するには、次のコードを使用することができます。
layer = qgis.utils.iface.activeLayer()
features = layer.selectedFeatures()
for f in features:
geom = f.geometry()
print "Length:", geom.length()
お役に立てれば!
for layer in QgsMapLayerRegistry.instance().mapLayers().values():
features = layer.getFeatures()
for f in features:
...
すばらしいコードですが、これは選択したレイヤーでのみ機能し、印刷するだけです。他の投稿とジョセフの助けを借りて、プロジェクトのすべてのレイヤーに長さの属性を追加するコードに変換しました。
from PyQt4.QtCore import QVariant
for layer in QgsMapLayerRegistry.instance().mapLayers().values():
features = layer.getFeatures()
for f in features:
geom = f.geometry()
leng = geom.length()
res = layer.dataProvider().addAttributes([QgsField("Length", QVariant.Int)])
layer.updateFields()
fieldIndex = layer.dataProvider().fieldNameIndex( "Length" )
attrFeatMap = {}
attrMap = { fieldIndex : leng }
for feature in layer.getFeatures():
attrFeatMap[ feature.id() ] = attrMap
layer.dataProvider().changeAttributeValues( attrFeatMap )