waigani's diary

QGISを中心にFOSS4Gをいじくる

QGIS PythonコンソールからSEXTANTEその2

つづきです

QGIS PythonコンソールからSEXTANTEその1 に続いて、わざわざPythonコンソールからSEXTANTEを使ってみましょう。
前回は1つの解析機能を使ってみましたが、これではあまりSEXTANTEの有り難味はありません。複数の解析機能をつなげて使ってみます。
gdalでDEMをマージ→SAGAで陰影図作成の流れを行います。

SEXTANTEの便利クラス

SEXTANTEは解析機能を統一の手順で使えるようにしたフレームワークですが、その過程で用意された各種便利クラスも使用することが出来ます。
たとえば、開発版のQGISをOSGeo4Wでインストールしたとして、
C:\OSGeo4W\apps\qgis-dev\python\plugins\sextante\core\QGisLayers.py
を覗いてみましょう。
レイヤへのアクセスクラスなどが用意されていて、QGIS Python APIの使用方法としてとても参考になります。たとえば読み込み済みのラスタレイヤ一覧を得るmethodは、QGisLayersクラスに、

def getRasterLayers():
    layers = QGisLayers.iface.legendInterface().layers()
    raster = list()

    for layer in layers:
        if layer.type() == layer.RasterLayer:
            if layer.providerType() == 'gdal':#only gdal file-based layers
                raster.append(layer)
    return raster

のように用意されています。一度見てみることをおススメします。

DEMをマージして陰影図

DEMデータのGeoTIFF 2ファイルが読み込み済みとします。

画像マージの機能としてはgdalogr:mergeを使用することが出来ます。使用方法の詳細は省きますので、sextante.alghelp()でお調べください。
前回は入力ファイルとして、ファイル名を指定しましたが、入力はレイヤ(qgis.core.QgsRasterLayer or qgis.core.QgsVectorLayer)を指定することも可能です。sextante内の処理としては、レイヤが指定された場合は、レイヤの元になっているファイル名を取ってきた上で解析機能に渡しているようです。

import sextante
from sextante.core.QGisLayers import QGisLayers

layers = QGisLayers.getRasterLayers()
mergeResult = sextante.runalg("gdalogr:merge", layers, False, False, None)
output = sextante.runalg("saga:analyticalhillshading", mergeResult['OUTPUT'], 0, 315.0, 45.0, 4, None)
sextante.load(output['OUTPUT'])

上記の処理を行うと、DEMをマージした上で、陰影図作成、結果の読み込みまで行うことが出来ます。


用意されている解析機能が使えることはわかったとして

  • オリジナルの解析機能を間に挟んだり
  • SEXTANTEのScriptで利用したり

したいところですね。
その辺りは、また時間のある時に。