QGISで解析・積雪深マップの作成

北海道内の積雪深マップを作成しようとしました。どの地域が雪深いかを地図上で示すのです。データは国土交通省が提供している国土数値情報の気候データをダウンロードして使用しました。ダウンロードサイトは下記で、統一フォーマット(SHP・GML)のタブから気候値メッシュを選択(ボタンはずっと下のほう)します。

http://nlftp.mlit.go.jp/ksj/gmlold/index.html

このデータには、気温や降水量のデータも含まれています。今回は最深積雪深だけ使えればよいのですが、QGISで解析するときに使用データを絞り込みます。

SHPファイル(シェープファイル、シェイプファイル)とは、各メッシュの測定値がずらっと入っている表のようなものです。詳しくはわかりませんが、拡張子がshpというファイルをシェイプファイルといいつつ、結局はセットでdbfやshxというファイルもついてきます。だからシェイプファイルといっても、結局3つずつのファイルがセットになっているわけです。

もう一つ、ベクタ形式とラスタ形式という言葉もGIS解析のはじめにつまずきました。これらはGISで使用するデータの2つの形式を示しています。ベクタ形式というのは上のシェイプファイルが主ですが、特定の区域にデータが伴っているものです。たとえば今回使用する気候値メッシュは、全国をたくさんのメッシュに分けて、それぞれのメッシュごとに気候データが入ったものです。一方、ラスタ形式では、連続的な変化をもつデータ形式です。衛星画像とか、衛星から観測した標高データなどがあてはまります。GPSで観測したポイントとか、エクセルに入力した観測データはふつう、ベクタ形式のデータとして扱います。そんな風にベクタ形式とラスタ形式の分け方は重要ですが、解析の都合によって両者の形式はQGISの中で互いに変換もできます。

QGISでのベクタの読み込みメモ>

*気候値メッシュもそうですが、国土数値情報はJDS2000という日本独自の規格(地図作成上の規格)でつくられています。ファイル読み込みの際にはJDS2000のデータとして読み込まなければなりません。

*北海道全体の気候値データをダウンロードすると30くらいのフォルダにshpファイル、dbf,shx,xmlというファイルができます。このうちshp,dbf,shxというファイルを30セット、つまり90くらいのファイルを一つのフォルダにまとめて入れておきます。QGISの基本として、フォルダ名やファイル名は英小文字と数字のみにしておくと無難です。

*「ベクタ」→「データマネジメントツール」→「複数のシェープファイルを1つに結合する」と選択します。上記をひとつひとつ開いてあとで結合するよりこのほうが楽です。ブラウズでさきほどのフォルダを選択します。ふつう、選択したら選択したフォルダ内のファイルが画面に表示されると思いますが、なぜか出てきません。でも気にしないで続けます。するとフォルダ名は入力ディレクトリに表示されます。出力シェープファイルは何か名前をつけてください。たとえばsnow.shpとか。shpとつけておきましょう。

*「マップキャンパスに結果を追加する」の項にはチェックを。これでマップ画面に表示できます。OKを押すと空間参照システムの選択をしなければなりません。JDS2000/UTMzone54です。日本はだいたいこの範囲のようですね。ファイルの数分、これを繰り返し、最後に画面にギザギザの北海道がでてくればまずは成功です。

*北海道地図の左側に自分でつけたシェープファイル名があるはずです。これを選択して右クリックすると、そのなかに「属性テーブルを開く」という項目があります。「レイヤ」タブ内からでも選択できます。これで情報をみることができます。最深積雪深はG02_058の列です。

*この時点では北海道は真っ黒です。次に表示させるデータを選ばなければいけません。しかし、ここからトラップが用意されています。「数値情報なのにQGISに来たら、情報はみんな文字列になっているのです!!」これは3日間悩みました。このまま解析をしようとしても、一向に積雪深地図はできません。(だって文字列ですから!)文字列を数値にしなければなりません。

*この作業にはまず編集モードに切り替えます。属性テーブルを開いたときに画面上の左のほうにある鉛筆アイコンをクリックします。今度は属性テーブル上の右のほうにあるそろばんのアイコンをクリック。これで「フィールド計算機」というのが立ち上がります。新しいフィールドをつくると選択してsnowdepthとか適当な名前をつけます。このsnowdepthというフィールド(つまり列)にG02_058の情報を数値にして入れたいわけです。

*フィールド計算機は条件タブのcase(条件式をつくる)、変換タブのtoreal(実数にするもの)、フィールドと値タブからG02_058を使って次のような演算式をつくります。実はこのプロセスにもトラップがあって、文字列になった情報の中にはもともと文字列だった情報(たとえば”unknown”があり、それは変換しようとしても数値にできないのです。ですから、それは条件式で処理しなければなりません。よって・・・

CASE WHEN “G02_058” != 'unknown' THEN toreal( “G02_058” ) END

とします。

*演算が成功して数値に変換されたら、ふたたびsnowdepthを選択して「レイヤ」→「プロパティ」としてシンボルを「段階に分けられた」とすると5段階くらいに分けてくれます。画面上に表示できれば成功です。