foss4g 2011 tokyo grassハンズオン
TRANSCRIPT
FOSS4G 2011 Tokyo ハンズオンセッション
GRASSを用いた衛星・GISデータ処理の基礎
OSGeo財団日本支部岩崎亘典
FOSS4G 2011 Tokyo ハンズオンセッション
はじめに● 本日の中身
● GRASSについて– 特徴や歴史など。日本におけるGRASS
● GRASSの基本的操作– データ構造について、インポート・エクスポート、
● GRASSを用いた衛星画像分析– 東日本大震災被災地域(主に福島~宮城)における
津波浸水域の推定
FOSS4G 2011 Tokyo ハンズオンセッション
GRASSとは?● 強力な解析機能を持った、オープンソースのデス
クトップFOSS4Gの代表格● デスクトップFOSS4Gの代表格
– もうすぐ30歳!– 現在は最新版が6.4.1。10/11に6.4.2RC
● 強力な解析機能– ラスタ、ベクタ、画像を問わない
● オープンソース– GPLで公開
2010
, Mar
kus
Net
eler
1987USA(GRASS 2.0, no Web!)
1995USA 1997,
Univ. ofHannover,Germany
2002ITC-irst Trento+ Baylor
GRASS: 25 28 years of GFOSS
2011/10/12
FOSS4G 2011 Tokyo ハンズオンセッション
解析機能について● ラスタ、ベクタ、イメージ、etc...
2010
, Mar
kus
Net
eler
Geostatistics with GRASS and R-statsR statistical software is run inside a GRASS session: R reads and writes data directly from/to GRASS
FOSS4G 2011 Tokyo ハンズオンセッション
日本におけるGRASS● 升本先生とベンカ先生
● この二人は外せない● 大阪市大と(株)オーク
ニーによる国際化● 現在も文科省の受託プロ
ジェクトでチュートリアル等を作成中● 配布したDVDに入っていま
す
FOSS4G 2011 Tokyo ハンズオンセッション
GRASSを使う上での基礎知識(1)● 基本はコマンドラインで行うプログラム
● GUIは有るけど、GUIを使ってコマンドを呼び出している
FOSS4G 2011 Tokyo ハンズオンセッション
代表的なコマンド例コマンド 動作内容
d.rast ラスターマップレイヤーを表示、またはオーバーレイ(重ね書き)する。
d.rgb 指定した3つのラスターマップレイヤーを赤色、緑色、青色にそれぞれ対応させ重ね合わせ表示する。
g.gisenv ユーザーの現在のGRASS変数を出力、または変更する。
g.region 対象とする地域の範囲や分解能を変更したり、標準に戻すなどの管理を行う。
r.contour ラスターマップレイヤーから、指定された高さの等高線マップを作り出す。
r.mapcalc ラスターマップレイヤーの数値演算を行う。
r.univar ラスターマップの非NULLセルから単変量統計を計算する。
v.info ベクトルマップの基本情報を出力する。
v.to.rast GRASSのバイナリーベクトルマップをGRASSのラスターマップへ変換する。
i.composite 指定した3つの画像バンドファイルからカラー合成画像を作る。
i.fft ラスター画像に対して高速フーリエ変換(FFT)を行う。
FOSS4G 2011 Tokyo ハンズオンセッション
GRASSを使う上での基礎知識(2)● 独自データベースを作成し、その中に格納
● 実際はディレクトリ構造で管理● 標準的なGISデータのファイルは使用可能
– v.in.ogrやr.in.gdalを使ってインポート● r.externalまたはv.externalで外部ファイルも使用可
● 階層的フォルダ構造● 上位から
– GISデータディレクトリ– ロケーション– マップセット
FOSS4G 2011 Tokyo ハンズオンセッション
データベースの説明
GISデータディレクトリ ロケーション マップセット ジオメトリ・属性データ
C:\GIS_DATA\GRASS localtion1
location2
PERMANENT
mapset1
mapset2
RASTER data
VECTOR data
Volume data
GISデータを格納しておくためのフォルダ特殊な機能は無し
重要!!測地系と座標系を定義異なるものは混在出来ない!
後で変更不可
(+解析範囲と解像度)
重要!!実際に作業をする単位PERMANENTには共通するデータを格納各mapsetに個別データを入れる
(用途別、形式別等)
実際のデータ中を見る機会はほとんど無い
FOSS4G 2011 Tokyo ハンズオンセッション
引用:国土交通大学(@geo80k氏)作成資料
FOSS4G 2011 Tokyo ハンズオンセッション
実習の流れ(1)● 目標:東北地方太平洋沖地震で発生した津波で、
浸水した範囲を推定● ロケーションとマップセットの作成
● 一番重要● データのインポート
● ラスタデータ(LANDSAT)● ベクタデータ(国土数値情報)
● データ表示の基礎● ラスタとベクタの表示のしかた
FOSS4G 2011 Tokyo ハンズオンセッション
実習の流れ(2)● NDWIの算出● 津波浸水域の推定
● 二時期の画像の差分– MASKの作成、Mapカルキュレータの使用法
FOSS4G 2011 Tokyo ハンズオンセッション
使用するデータ(衛星画像)● LANDSAT 5号(TM)および7号(ETM+)
● 津波浸水域の推定– 津波前(ETM+, 2002年4月)– 津波後(TM, 2011年4月)
● 撮影時期が同時期の方が望ましい
FOSS4G 2011 Tokyo ハンズオンセッション
今回の分析 ~画像の差分~
● 左が津波前、右が津波後の画像● この二つの画像で違う部分を抽出する
● 二時期の画像の差分を評価
FOSS4G 2011 Tokyo ハンズオンセッション
LANDSATデータのダウンロード● GLOVISもしくはEarthExplorerがおすすめ
● GLOVIS http://glovis.usgs.gov/
● EarthExplorer http://edcsns17.cr.usgs.gov/NewEarthExplorer/
● 見た目はEarthExplorer、使い勝手はGLOVIS
FOSS4G 2011 Tokyo ハンズオンセッション
FOSS4G 2011 Tokyo ハンズオンセッション
使用するデータ(国土数値情報)● 市町村境界線
● 対象は宮城県南部から福島県にかけて
FOSS4G 2011 Tokyo ハンズオンセッション
使用するデータ● 「GIS_DATA」以下にあります
● tifとshpフォルダ
FOSS4G 2011 Tokyo ハンズオンセッション
使用するGRASSのバージョン● GRASS 6.4SVN
● 文科省受託プロジェクト「FOSS4Gを活用した衛星データ活用のためのオープンリソースの開発」の成果品– http://www.osgeo.jp/foss4g-mext/
– チュートリアル等もあります
FOSS4G 2011 Tokyo ハンズオンセッション
GRASSのインストール
FOSS4G 2011 Tokyo ハンズオンセッション
インストール● コピーした「installer_v2.0.0」フォルダの中の「WinGRASS-6.4.SVN-r43346-1-Setup.exe」をダブルクリック● Vistaの場合は右クリック、「管理者として実行」
– あとは自動的に進む
FOSS4G 2011 Tokyo ハンズオンセッション
日本語化の実行● 「installer_v2.0.0\日本語化パッチ」の中の「日
本語化パッチの適用方法.txt」を参考に日本語化を実行● Vistaおよび7の場合、「Program Files」フォルダ
にコピーする際メッセージが出ますが、「続行」を押して下さい。
FOSS4G 2011 Tokyo ハンズオンセッション
GRASSの基本操作
FOSS4G 2011 Tokyo ハンズオンセッション
GRASSの起動● GRASS 6.4 SVNをダブルクリック● 右のような画面が出るはず
● ここで作業を行う– GISデータディレクトリ– ロケーション– マップセット
を規定する
FOSS4G 2011 Tokyo ハンズオンセッション
復習:データベースの説明
GISデータディレクトリ ロケーション マップセット ジオメトリ・属性データ
C:\GIS_DATA\GRASS localtion1
location2
PERMANENT
mapset1
mapset2
RASTER data
VECTOR data
Volume data
GISデータを格納しておくためのフォルダ特殊な機能は無し
重要!!測地系と座標系を定義異なるものは混在出来ない!
後で変更不可
(+解析範囲と解像度)
重要!!実際に作業をする単位PERMANENTには共通するデータを格納各mapsetに個別データを入れる
(用途別、形式別等)
実際のデータ中を見る機会はほとんど無い
FOSS4G 2011 Tokyo ハンズオンセッション
ロケーションの作成● GISデータディレクトリを「C:\GIS_DATA\GRASS」に設定
● ロケーションウィザードをクリック
FOSS4G 2011 Tokyo ハンズオンセッション
ロケーションの設定● ロケーション名は「TOHOKU_UTM54」● 「地理参照ファイルを選択」をクリック● 「GIS_DATA\tiff\L5_2011095」内の「L5_2011_0405_B30.TIF」を選択
FOSS4G 2011 Tokyo ハンズオンセッション
ロケーションの設定● 要約が出るので「終了」
をクリック● メッセージはOKをク
リック● 作成した「TOHOKU_UTM54」を選択、「PERMANENT」をクリックして「GRASSの起動」
FOSS4G 2011 Tokyo ハンズオンセッション
GRASSの画面の説明● GRASS GISレイヤーマネージャ
● 表示するデータや処理の選択● GRASS GIS Map Display
● データの表示
FOSS4G 2011 Tokyo ハンズオンセッション
ベクタファイルのインポート● 「ベクトルデータをインポートします」をクリック
● OGRデータソース名に「shp」の中の「ana_area.shp」を選択
● 出力するベクトルマップを「ana_area」して実行● 終了したら閉じる
FOSS4G 2011 Tokyo ハンズオンセッション
データの表示● 「レイヤマネージャのベクターマップレイヤーを追加」をクリック
● 「入力するベクトルマップ名」で「ana_area」を選択● 選択などで何を表示するか決める(areaにする)
FOSS4G 2011 Tokyo ハンズオンセッション
データの表示● このようにデータが表示される
● 四方向矢印で移動、虫眼鏡で拡大・縮小● コメント矢印で属性表示
– ここで一度終了。ファイル→終了で
FOSS4G 2011 Tokyo ハンズオンセッション
新しいマップセットの作成● 起動画面の「マップセットの作成」をクリック● 「LANDSAT」と入力。これを選択して起動
FOSS4G 2011 Tokyo ハンズオンセッション
ラスタのインポート● 「ラスタデータのバルクインポート」を選択
● 単独のものインポートする場合はその上● ソースタイプは「ディレクトリ」を選択
FOSS4G 2011 Tokyo ハンズオンセッション
ラスタのインポート● 「参照」ボタンをクリックしGIS_DATAの下の「L7_2002110」を選択
● 最後がB10~50と70を選択して「インポート」● 時間がかかります。お待ち下さい
FOSS4G 2011 Tokyo ハンズオンセッション
ちょっとした注意!● 新しいマップセットは、本来はGRASSを終了させ
ることなく作れます● が、Windows版では出来ません...
● GIS_LOCKというファイルが作られないため?● なので、マップセットの作成や変更の際には、一度GRASSを終了して下さい。● ごめんなさい・・・。
FOSS4G 2011 Tokyo ハンズオンセッション
ラスタデータの表示● ラスタデータの表示として二つ説明
● 単バンド画像– 白黒の画像
● RGB合成画像– R(赤)、G(緑)、B(青)に衛星データのバンド
を仮想的に割り当てるやり方
FOSS4G 2011 Tokyo ハンズオンセッション
衛星画像のバンドについて● 波長毎にデータを記録
している● LANDSATの場合は右
– その他はチュートリアルを参考
FOSS4G 2011 Tokyo ハンズオンセッション
単バンドデータの表示● 「ラスタマップの追加」をクリック● 「d.rast」で表示するマップを選択
● ここではB40を選択
FOSS4G 2011 Tokyo ハンズオンセッション
データの表示● ベクタデータと同様に表示される
● 移動、拡大、縮小等も同じ
FOSS4G 2011 Tokyo ハンズオンセッション
RGB合成バンド● 「ラスターマップレイヤーの追加」の「RGBレイヤー追加をクリック
FOSS4G 2011 Tokyo ハンズオンセッション
RGB合成バンド● 上から
● <red>にL7_2002_0420_B30@LANDSAT● <green>にL7_2002_0420_B40@LANDSAT● <blue>にL7_2002_0420_B20@LANDSAT
を設定
FOSS4G 2011 Tokyo ハンズオンセッション
RGB合成画像● カラーで表示される
● これはナチュラルカラーといわれる
FOSS4G 2011 Tokyo ハンズオンセッション
LANDSATの場合のカラー合成
● トゥルーカラー:R=band3, G=band2, B=band1● フォルスカラー:R=band4, G=band3, B=band2● ナチュラルカラー:R=band3, G=band4, B=band2● 中間赤外合成::R=band7, G=band5, B=band3
● サンプルは、チュートリアルで
FOSS4G 2011 Tokyo ハンズオンセッション
L5のデータのインポート● 「L5_2011095」のデータもインポート
● 「ラスタデータのバルクインポート」から● 「GIS_DATA\tiff\L5_2011095」を選択● L5_2011_0405_B20~B50をインポート
FOSS4G 2011 Tokyo ハンズオンセッション
ちなみに元のLANDSATデータの命名規則● フォルダ
LE71070342002110EDC00
● ファイル
● L71107034_03420020420_B10.TIF
● GLOVIS等からDLするとこれに準拠する● 今回はセンサー名、日付、バンド名に変えています
センサー名5号ならLT5
path row
年 DOY年始めから数えて何日目か
センサー名5号ならL5
path row
年 月日
row?
バンド名
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの算出
FOSS4G 2011 Tokyo ハンズオンセッション
実習の流れ(2)● NDWIの算出● 津波浸水域の推定
● 二時期の画像の差分– MASKの作成、Mapカルキュレータの使用法
FOSS4G 2011 Tokyo ハンズオンセッション
NDVIとNDWI● NDVI(正規化植生指数)←よく使われる
● 植物のバイオマスや生育状況を反映– 1~-1の値を取り、大きいほど植生が多い
NDWI(正規化水指数)←今回使う● 地表面の水の状態を反映
– 1~-1の値を取り、大きいほど水分が多い
NDVI=band4−band3band4+band3
NDWI=band3−band5band3+band5
FOSS4G 2011 Tokyo ハンズオンセッション
津波浸水域の評価
● 左が津波前、右が津波後の画像● この画像からNDWIを算出● 津波前にNDWIが小さく、津波後に大きい所を浸水域と定義
FOSS4G 2011 Tokyo ハンズオンセッション
新しいマップセットの作成● 「INDEX」というマップセットを新しく作成
● 一度GRASSを終了してから作成– NDWIの計算結果を保存するマップセット
FOSS4G 2011 Tokyo ハンズオンセッション
MASKとは● 解析範囲を限定するために使う
● 沿岸の市町村だけを対象とする– 全体を計算するのは時間がかかるため
● ラスターからしか作れない● 市町村境界のベクタからラスタを作成● 上記のラスタから作成
FOSS4G 2011 Tokyo ハンズオンセッション
マップタイプの変換● 「ベクトル→ラスター」をクリック● 「入力するベクトルマップ名」に「ana_area@PEARMANENT」
● 「出力するラスターマップ名」に「ana_area」
FOSS4G 2011 Tokyo ハンズオンセッション
マップタイプの変換● 「オプション」タブを選択
● ラスター値のソースを「val」● ラスター値を「1」
● 変換結果を表示して確認
FOSS4G 2011 Tokyo ハンズオンセッション
MASKの作成● 「ラスタ」→「マスク」をクリック● 「MASKを使用するためのラスターマップ」に先ほどの「ana_area」を選択して実行
FOSS4G 2011 Tokyo ハンズオンセッション
画面表示を更新● 画面の更新ボタンをクリック
● 右下に「マスク」と表示されていればOK
FOSS4G 2011 Tokyo ハンズオンセッション
異なるマップセットの利用● 現在のマップセットは「IDNEX」
● そのままでは他のマップセットは使えない● 「LANDSAT」のデータも使えるようにしたい
● NDWIの計算やデータの表示● 「マップセット作成」をクリック● 「LANDSAT」をチェック
FOSS4G 2011 Tokyo ハンズオンセッション
表示テスト● 合成カラー表示を行う● 「LANDSAT」の中のレイヤを選択
● 「L5_2011_0405」で、R=B30, G=B40, B=B20● 限られた範囲だけが表示
● MASKが設定されているため
FOSS4G 2011 Tokyo ハンズオンセッション
拡大してみる● 浸水域の確認できる
FOSS4G 2011 Tokyo ハンズオンセッション
地図と地図の演算● NDWI等の算出は「地図と地図の演算」
● 「同じ場所」にあるデータの計算をする– 単純な例は、下のような足し算
1
0
2
4
1
1
1 3 3
11
2
4
0
1
1
3
3
+ =
3 5 1
1 5
5 4
2
6
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの算出● MapCalculatorを使う
● 「ラスターマップカルキュレータ」をクリック
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算式● 計算式は下の通り
● 2002年4月のNDWIを計算● 「ラスターマップの名前」をNDWI_200204● 「関数を挿入」から「float(x)」を選択● 「float(x)」のxを消して、「マップを挿入」から「L7_2004_0420_B30@LANDSAT」を選択
NDWI=band3−band5band3+band5
FOSS4G 2011 Tokyo ハンズオンセッション
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算(2)● 括弧の中に「-」記号と「L7_2002_0420_B50@LANDSAT 」を追加
● 括弧の外に「/」を追加して分子の入力完了
FOSS4G 2011 Tokyo ハンズオンセッション
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算(3)● 計算式を選択してコピーし、「/」の後にペースト● 分母の括弧の中の「+」を「-」に変える
FOSS4G 2011 Tokyo ハンズオンセッション
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算(4)● 計算結果は小数型
● 整数の方が扱いやすい● 計算結果が整数になるように工夫
● 計算結果を1000倍● int(x)を加える
– float(x):ラスターを小数型にする関数– int(x):ラスターを整数型にする関数
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算(5)● 式全体を「()」でくくり、最後の「*1000」を加える
● 計算式の初めに「int(x)」を入れる● マップ演算の関数を挿入から「int(x)」を選択
● 「int(x)」の「x」を消して「)」を最後に移動● 実行をクリック
FOSS4G 2011 Tokyo ハンズオンセッション
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算(6)● 計算結果を表示
● ラスタマップの追加から
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算(7)● 2011年4月のNDWIを計算
● 中の計算式をコピー● メモ帳などのに貼り付け
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算(8)● 「L7_2002_0420」を「L5_2011_0405」に置換
● 置換したものをコピー
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの計算(9)● マップカリキュレータに貼り付け● 「新しく作成する・・・」を「NDWI_201104」に
して「実行」
FOSS4G 2011 Tokyo ハンズオンセッション
津波後のNDWI● 計算結果の表示
FOSS4G 2011 Tokyo ハンズオンセッション
間違えた場合● ファイル→マップ管理→削除
FOSS4G 2011 Tokyo ハンズオンセッション
津波前後のNDWIの比較
● 赤い所が高い値→水域
FOSS4G 2011 Tokyo ハンズオンセッション
浸水域の定義● 浸水後のNDWIから浸水前のNDWIを引いて、値
の高い所を「浸水域」と定義
FOSS4G 2011 Tokyo ハンズオンセッション
NDWIの差を計算● 出力ファイル名はDIFF_201104_200204● 式にはNDWI_201104@INDEX - NDWI_200204@INDEXと入力
FOSS4G 2011 Tokyo ハンズオンセッション
結果を表示● 実際の浸水域以外にも高く出る
● 2002年のNDWIが高い所は除外する● if(x, a, b)を使用
FOSS4G 2011 Tokyo ハンズオンセッション
if(x, a, b)の説明● 条件式xを満たした場合
● aという値を取る● それ以外はbという値をとる
● 「a」や「b」にif構文が入るのも可能● if (x, if(y, a, b), c)といった形
FOSS4G 2011 Tokyo ハンズオンセッション
浸水域の計算● ラスターマップ名に「FLOOD」● 関数として「if(x, a, b)」を選択
FOSS4G 2011 Tokyo ハンズオンセッション
浸水域の計算● さらに、「a」の所に「if (x, a, b)」を入れる
FOSS4G 2011 Tokyo ハンズオンセッション
浸水域の計算● 最初のxに「NDWI_200204@INDEX <=200」
● これで2002年の水面等を除外● 次のxに「DIFF_201104_200204@INDEX >=150」● これで浸水域を抽出
FOSS4G 2011 Tokyo ハンズオンセッション
浸水域の計算● aに「1」、bに「null()」といれる
● 条件を満たした場合は1,それ以外は値無し● そして、実行
FOSS4G 2011 Tokyo ハンズオンセッション
結果を表示してみる● これだけだとよく分からない
FOSS4G 2011 Tokyo ハンズオンセッション
衛星画像と重ね合わせる● おおよその浸水域(湛水域?)は把握出来ている
● 山地にエラーもある
FOSS4G 2011 Tokyo ハンズオンセッション
お疲れさまでした!!● 長丁場のハンズオン、お疲れさまでした● この実習はあくまで「練習」です
● 今回求めた面積等はあまり正確ではありません– エラーも多くある
● 時間の都合で、基礎的な説明をはしょっている部分があります● 特に「領域」(region)の概念● 衛星利用チュートリアルに詳しく説明してあるの
で、そちらをご参考に
FOSS4G 2011 Tokyo ハンズオンセッション
ご意見御質問などは● OSGeo.JPディスカスML
● http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
● アンケートにもご回答下さい