++ 以下よりFOSS4Gアドベントカレンダー2013への投稿記事となります ++
最初からタイトル間違ったんじゃないかと疑いたくなる話題ですが
- >>FOSS4G 勉強会 in 函館
11/30-12/1 と2日間にわたり
FOSS4G 函館勉強会
(於 北海道大学函館キャンパス)
に参加してきました。
まずは会場の雰囲気をお届けしますね。
1日目の事例紹介セッションの様子です。
質問がよく出ていました。
これは 2日目 QGISハンズオン
の様子です。
主要な参加者は学生さんだったのですが
地元企業の方もいらっしゃっており
道南ユーザのよい顔合わせとなったのではと思います。
さて私は1日目の事例紹介セッションで
お話させて頂きました。
内容をどうしようかと考えた挙句
みんな QGIS QGIS ってチヤホヤしやがって・・・
との嫉妬心からGRASSの話にしました(ウソ)
- >>外部からGRASSの機能をつかおう
客層と内容が合致してなかった残念なプレゼンはさておき(さておくなよ)
発表の中ででもちょっとだけ紹介しました
外部からPythonを介してGRASSの機能を使用する
ことについて書きます。
ここでやっとタイトルの内容です。
エクストリームなpython使いの方には
いまさらな話だとおもいますが
取り組みだした当初、日本語で解説したサイトが見つからず
ちょっと苦労したこともあり、気にせず書くことにします。
以降
OSがWindows
OSGeo4W経由でGRASS6.4.3をインストール済み
ということを前提に進めていきますね。
内容まちがってる!てのにお気づきのかたは
ぜひぜひご指摘いただければと思います。
- >>システム環境変数
最初にシステム環境変数を追加・編集する必要があるので
それについて。
Pythonの環境変数PATHの設定がまだの場合は
以下の場所の情報を参考にして行ってみてください。
http://www.pythonweb.jp/install/setup/index1.html
なお上記の設定中に出てくるフォルダ
Python26はPython27と読み替えて設定願います。
インストールしているソフトウェアによっては
より下位のディレクトリにpython.exe
が入っていることもあります。
それに伴って設定するpathも変更してください。
さてシステム環境変数を
新規追加または既存のものを編集していきます。
以下より
変数名 変数値
の順番で書いていきます。
なお単一の変数名に対して変数値が複数にわたる場合は
セミコロンで区切って入力してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
GISBASE C:¥OSGeo4W¥apps¥grass¥grass-6.4.3 GISRC C:¥Users¥username¥AppData¥Roaming¥GRASS6¥grass6 LD_LIBRARY_PATH C:¥OSGeo4W¥apps¥grass¥grass-6.4.3¥lib PATH C:¥OSGeo4W¥apps¥grass¥grass-6.4.3¥etc C:¥OSGeo4W¥apps¥grass¥grass-6.4.3¥etc¥python C:¥OSGeo4W¥apps¥grass¥grass-6.4.3¥lib C:¥OSGeo4W¥apps¥grass¥grass-6.4.3¥bin C:¥OSGeo4W¥apps¥grass¥grass-6.4.3¥extralib C:¥OSGeo4W¥apps¥grass¥grass-6.4.3¥msys¥bin PYTHONLIB C:¥Python27 PYTHONPATH C:¥OSGeo4W¥apps¥grass¥grass-6.4.3¥etc¥python GRASS_SH C:¥OSGeo4W¥apps¥msys¥bin¥sh.exe |
こんなところです。
ちょっと多くて面倒ですね。
(マシンを換えるたびに あれ、どーやるんだっけ と思いメモを検索してます)
- >>スクリプトを書くよ
実際にスクリプトを書く際には
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
## モジュールのインポート import grass.script as grass import grass.script.setup as gsetup import os ## GRASSのデータベースのセットアップ # GRASSのプログラムが格納されているディレクトリを指定 gisbase = os.environ['GISBASE'] # GRASSのgisdatabase, location, mapsetを指定 # *GUIで使用する際に最初に指定する項目と一緒です gisdb = "C:/foss4ghakodate/grass" location = "hakodate" mapset = "srtm" gsetup.init(gisbase, gisdb, location, mapset) |
てなのを最初に書いておき
あとは自分の行いたい処理を書いていきます。
自分のあまりに具体的な処理を載せるのもアレですので
あっさりとした繰り返し処理のサンプルを書いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
## GRASSのコマンドを用いた処理 # 変数を定義 srtm = "hakodate_j2ku54N" stat = "variance" expdir = "C:/temp/" # 以下の処理を実行 # r.neighborsで近傍解析を行い # r.out.gdal でgeotif形式でエクスポート for diam in(3,5,7,11,13,15): outdata = "focal_dem_" + str(diam) + "x" + str(diam) + "_" + stat[0:3] expdata = expdir + outdata + ".tif" grass.run_command("r.neighbors", input = srtm, output = outdata, method = stat, size = diam) grass.run_command("r.out.gdal", input = outdata, output = expdata) print outdata print "finish" |
これでスケール間比較を行いたいから
複数(たくさんの)パターンのデータを作って欲しい
といういかにもありがちなリクエストにも
お答えできるやもしれません。