[OSGeoJapan-discuss] QGISのpythonコンソールで面積を計算してその結果を列に加える方法

Hayato IIJIMA hayato.iijima @ gmail.com
2015年 5月 20日 (水) 16:48:19 PDT


OSGeoメーリングリストの皆様

山梨県の飯島と申します。このたびはお世話になります。

QGISのpythonコンソールで、SHPファイル(添付したようなファイル)のポリゴンごとの面積を計算する方法をご存知でしたら、ご教示いただければと思います。

ファイルが1つであればSHPファイルを開き、「属性テーブルを開く」→「フィールド計算機」で新しい列を作りその値として計算した面積を入れればいい話です。しかし、このようなファイルが多数ある場合、GUIによる作業は時間がかかるため、pythonで一気に処理できないかと思っています。

ネット上でQGISのpythonでの処理方法をいろいろ調べてみて、面積を計算して単に表示するとか、新しい列を作るといったことはできるのですが、面積を計算してその結果を新しい列に加えるということがどうしてもできないのです。

from PyQt4.QtCore import *
from qgis.analysis import *
input_dir="C:/..." #作業するSHPファイルまでのパス
import os
import glob
import processing
files = glob.glob(os.path.join(input_dir, r'*.shp'))

#面積を「表示」
for i in range(0, len(files)):
vlayer = QgsVectorLayer(files[i], "temp", "ogr")
#Gmail上でタブによる字下げがうまくいきませんが、実際にはタブで行頭を字下げしています(以下同様)。
for f in vlayer.getFeatures():
print f.geometry().area()

#新しい列を加える
#カラムを加える(試行錯誤)
for i in range(0, len(files)):
vlayer = QgsVectorLayer(files[i], "temp", "ogr")
#Gmail上でタブによる字下げがうまくいきませんが、実際にはタブで行頭を字下げしています(以下同様)。
caps = vlayer.dataProvider().capabilities()
if caps & QgsVectorDataProvider.AddFeatures:
res = vlayer.dataProvider().addAttributes([QgsField("AREA",  QVariant.Double)])

これらを合わせるとうまくいきそうな気もしますが、今のところできていません。
ちなみに、作業環境は以下のようです。

OS: Win7 64 bit
QGIS: 2.8

調査に出ているためご教示いただいた後の返事が遅くなるかもしれませんが、よろしくお願い致します。


-- 
**********************************************************
山梨県森林総合研究所 森林研究部 森林保護科

研究員  飯島 勇人(いいじま はやと)

〒400-0502
山梨県南巨摩郡富士川町最勝寺2290-1
TEL:0556-22-8005(直)8001(代)
HP: http://www.pref.yamanashi.jp/shinsouken/
E-mail: hayato.iijima @ gmail.com
**********************************************************

**********************************************************
Hayato Iijima (Ph.D.)

Yamanashi Forest Research Institute

2290-1, Saishoji, Fujikawa, Yamanashi 400-0502, Japan
TEL:0556-22-8001
HP: http://www.pref.yamanashi.jp/shinsouken/
E-mail: hayato.iijima @ gmail.com
**********************************************************
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: sample.dbf
$B7?(B:         application/octet-stream
$B%5%$%:(B:     145317 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20150521/17cf6927/attachment-0005.obj>
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: sample.prj
$B7?(B:         application/octet-stream
$B%5%$%:(B:     406 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20150521/17cf6927/attachment-0006.obj>
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: sample.qpj
$B7?(B:         application/octet-stream
$B%5%$%:(B:     617 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20150521/17cf6927/attachment-0007.obj>
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: sample.shp
$B7?(B:         application/octet-stream
$B%5%$%:(B:     336552 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20150521/17cf6927/attachment-0008.obj>
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: sample.shx
$B7?(B:         application/octet-stream
$B%5%$%:(B:     4340 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20150521/17cf6927/attachment-0009.obj>


OSGeoJapan-discuss メーリングリストの案内