とらりもんHOME  Index  Search  Changes  Login

数値地形モデル(GTOPO30)のダウンロードと読み込み

筑波大学農林工学系 奈佐原(西田)顕郎   2015/08/08 牧野 悠 加筆

はじめに

 GISの基本的な構造や使い方を学ぶ題材として、まずは数値地形モデルを用いる。数値地形モデル(Digital Elevation Model; DEM)とは、メッシュ上の標高値のあつまりで地形を表現したデータのことであり、最も基本的で重要な地理情報データでありながら、構造としてはシンプルなので練習にはもってこいである。

以下、GRASS:~>はGRASSのコマンドラインのプロンプトのしるしであり、ユーザーは打ち込む必要は無い。(その後を打ち込むこと)

GRASSの起動

   $ grass -text
Grass_open_latlon.png

ここで、前回の設定ができていれば、この画面で

   LOCATION .... latlon
   MAPSET ...... PERMANENT

のように、既になっているだろう。そこで, Escキー, ENTERキーを続けて押す。すると、前回の最後のような状態になって、コンソールにはGRASSのプロンプトが表示される:

   GRASS 6.4.1 (latlon):~ > 

以下の解説では、GRASSのプロンプトを、

   GRASS:~> 

であらわす。むろん、これはプロンプトだから、入力する必要はない。

データの取得

これから扱うデータは、GTOPO30(ジートポサーティー)という、フリーの、全世界の陸地における1kmメッシュの数値地形モデルの一部(日本を含む東アジア)である(参考: GTOPO30のページ)。

以下のコマンドで, 東アジアのGTOPO30データを取得しよう:

   GRASS:~> wget -c ftp://edcftp.cr.usgs.gov/data/gtopo30/global/e100n40.tar.gz

↑長いコマンドは, 打ち込みを助けてくれる便利な機能のコピーペーストを活用しよう!

※ 2015年8月8日現在、上はリンク切れしている。代わりにこちらからダウンロードする。Download Optionsのウィンドウが表示されたら、DEMを選択。

このデータを、解凍・展開しよう:

   GRASS:~>  tar zxvf e100n40.tar.gz
   E100N40.DEM ... 数値地形モデルの本体(バイナリ)
   E100N40.DMW 
   E100N40.GIF ... サンプル画像(バイナリ、gifフォーマット)
   E100N40.HDR ... データ構造に関する情報(テキスト)
   E100N40.PRJ ... 投影法に関する情報(テキスト)
   E100N40.SCH
   E100N40.SRC
   E100N40.STX

サンプル画像を表示してみよう:

   GRASS:~> display E100N40.GIF
E100N40.png

データの読みこみ(インポート)

続いて、GRASSにこの数値地形モデルのデータを読みこむ。GTOPO30は有名なデータセットなので、GRASSはGDALというインタフェースを介して、自動的に(いろんなパラメータを設定しなくても)読み込むことができる:

   GRASS:~> r.in.gdal input=E100N40.DEM output=GTOPO_E100N40 --o

すると、読みこみが始まって終了する。

r.in.gdalは、ラスターデータ(raster data)を、GDALというインタフェースを介して読み込む、というコマンド。有名どころのデータフォーマットは、だいたいサポートしている。"GTOPO_E100N40"は、GRASS内部でのラスターデータ("ラスターマップ"と呼ばれる)の名称。この名称でインポートすれば、以後、GRASSの上の様々な解析について、このラスターマップはこの名前で指定することになる。

1回インポートされたデータは、GRASSを終了しても保存される。

ラスターマップを削除したいときは、g.remove rast=ラスターマップの名前 というようなコマンドでできる。

データの表示

読みこんだデータをグラフィックスで表示してみよう。

   GRASS:~> d.mon start=x0     (まずグラフィックス画面を表示する)
   GRASS:~> d.rast GTOPO_E100N40     (GTOPO_E100N40というラスターマップを表示する)

※GRASS7.0.3では"x0"でなく"wx0"と打ち込むと上手くいきます。(追記:2018/02/08 菊島)

もしもうまく表示できないなら, 以下のコマンドを試してみよう:

   GRASS:~> g.region rast=GTOPO_E100N40
   GRASS:~> d.erase
   GRASS:~> d.rast GTOPO_E100N40

色使いをもっといいかんじにしよう:

   GRASS:~> r.colors map=GTOPO_E100N40 color=srtm
   GRASS:~> d.rast GTOPO_E100N40

次に、画像上で日本付近を拡大してみよう。まず, 以下のコマンドを打つ:

   GRASS:~> d.zoom

すると、以下のような表示が出る:

※GRASS7.0.3では"d.zoom"コマンドは無くなっている?模様です。(追記:2018/02/08 菊島)

   1 raster, 0 vector, 0 site file

   Buttons:
   Left:   1. corner
   Middle: Unzoom
   Right:  Quit

ここで、マウスを画像の上に移動し、拡大したい領域の一隅を左クリック。続けて、対角線上のもう一隅をこんどは中ボタンでクリック。すると、画像が拡大される。中ボタンを単独で押すと、縮小される。拡大縮小作業が終ったら、画像の上で右クリック。するとGRASSのプロンプトに戻る。

こんな画像ができただろうか:

GTOPO_E100N40_2.png

次に、各地点のピクセル値(標高)を調べてみよう:

   GRASS:~> d.what.rast GTOPO_E100N40

このコマンドを実行した上で、画像上の任意の場所をクリックすれば、その場所の位置情報とピクセル値が以下のようなかんじで表示される:

   135:32:43.366575E 34:58:48.670875N
   GTOPO_E100N40 in PERMANENT  (198)

この状態から抜けるには、画像を右クリックする。

位置の指定は、以下のようなコマンドを使えば、マウスを使うかわりに数値で行うこともできる:

   GRASS:~> r.what input=GTOPO_E100N40 east_north=138.7275,35.3608
   138.7275|35.3608||3690
   (富士山)

この指定法は、既に位置が判明している場所について多数のラスターマップの値を抜き出すときや、多数の位置についてラスターマップの値を抜き出すときに便利である。たとえば、ある稀少な動物(オオタカなど)の営巣地の位置のデータが数百箇所ぶんあったとして、その場所の標高の分布や樹種の分布などをラスターマップから抜き出す、など。

null値の設定

次回以降の処理のため, 以下のコマンドを実行しておこう:

   GRASS:~> r.null map=GTOPO_E100N40 setnull=55537

シェルスクリプト

以上の操作は、ほとんどコマンドで行ったので、本質的には以下のようなシェルスクリプトに集約できる:

   #!/bin/sh
   wget -c http://www1.gsi.go.jp/geowww/globalmap-gsi/gtopo30/data/global/e100n40.tar.gz
   tar zxvf e100n40.tar.gz
   r.in.gdal input=E100N40.DEM output=GTOPO_E100N40
   r.null map=GTOPO_E100N40 setnull=55537
   r.colors map=GTOPO_E100N40 rules=srtm
   d.mon start=x0
   d.rast GTOPO_E100N40

これを、DEM1.shというテキストファイルにして、以下のように実行してみよ:

   GRASS:~> sh DEM1.sh

GIS入門に戻る。