国土数値情報の河川データを水域系別にQGISで色分けする

 河川データの水域系別の色分けは以前からの課題であった.今回ヒントが得られたのでQGISの操作をあわせて紹介する.

河川データのダウンロード

 河川データは国土数値情報の河川データが一部直っていた件で紹介した.流路のシェープファイルを1つのフォルダーにまとめておく.

QGISでの処理

ベクタレイヤの追加

 「レイヤ」メニューの「レイヤを追加」から「ベクタレイヤを追加…」を選ぶ.

「レイヤ」「レイヤを追加」「ベクタレイヤを追加...」
「レイヤ」「レイヤを追加」「ベクタレイヤを追加…」

 「データソースマネージャ」の「ソース」右端の「…」ボタンをクリックする.

「データソースマネージャ」の「ソース」
「データソースマネージャ」の「ソース」

 「QGISがサポートするベクタデータセットを開く」ダイアログでシェープファイルを全て選択し「開く」ボタンをクリックする.

QGISがサポートするベクタデータセットを開く
QGISがサポートするベクタデータセットを開く

 データソースマネージャで「追加」ボタンをクリックして「閉じる」ボタンをクリックする.

データソースマネージャで「追加」して「閉じる」
データソースマネージャで「追加」して「閉じる」

 都道府県ごとに色分けされた状態である.

都道府県ごとに色分けされた状態
都道府県ごとに色分けされた状態

プロパティ

 レイヤパネルに47個のレイヤが表示されている.ここから1つずつプロパティを変更していく.その前に河川データの属性テーブルの構造をおさらいする.

河川データの属性テーブルの構造

 河川データの属性テーブルの構造は以前示した.ここで使いたいのは水域系コードであるW05-001である.これを識別子として計算のシードとする.

単一の数値から3種類の数値を計算する

 水域系コードW05-001は1つの数値である.この数値から3種類の異なる数値を計算で導出したい.いくつか方法はあると思われるが,ここでは単純な計算を用いることにする.計算結果には制約があり,それは「0から255までの整数である」というものである.

  • W05-001を128で除した余り
  • 上記を255から引いた差
  • さらに上記を引いた差

としてみる.

レイヤのプロパティを開く

 「レイヤ」パネルのレイヤを右クリックして「プロパティ」を選ぶ.

「レイヤ」パネルのレイヤを右クリックして「プロパティ」
「レイヤ」パネルのレイヤを右クリックして「プロパティ」

 「レイヤプロパティ」の「シンボロジ」を選んだところである.

「レイヤプロパティ」の「シンボロジ」
「レイヤプロパティ」の「シンボロジ」

 デフォルトでは「単一定義」となっているが,これを「カテゴリ値による定義」に変更する.

「カテゴリ値による定義」に変更
「カテゴリ値による定義」に変更

 「値(Value)」右端の「式ダイアログ」ボタンをクリックする.

「値(Value)」右端の「式エディタ」ボタンをクリック
「値(Value)」右端の「式ダイアログ」ボタンをクリック

 「式ダイアログ」で「色」「color_rgb」を選ぶ.ここで先述した3つの数値を指定することになる.

「式ダイアログ」で「色」「color_rgb」を選ぶ
「式ダイアログ」で「色」「color_rgb」を選ぶ

 一旦キャンセルしてプロパティに戻る.「値(Value)」をプルダウンすると使用可能な変数が表示されるので,W05-001を選ぶ.

「値(Value)」をプルダウンすると使用可能な変数が表示される
「値(Value)」をプルダウンすると使用可能な変数が表示される

 続けてキーボードから「 % 128」とタイプする.イタリック体となり計算が成立していることが分かる.%は剰余を計算する演算子である.ここで式ダイアログに入る.

変数を選び,剰余を算出する式が入った状態
変数を選び,剰余を算出する式が入った状態

 式ダイアログに変数が入った状態である.ここから中央に配置してある関数を選んでいくことになる.

式エディタに変数が入った状態
式ダイアログに変数が入った状態

 式が完成した状態である.OKをクリックして式ダイアログを抜ける.

式が完成した状態
式が完成した状態

 「値(Value)」に関数を用いた式が入力された状態である.

「値(Value)」に関数を用いた式が入力された状態
「値(Value)」に関数を用いた式が入力された状態

 「分類」をクリックするとW05-001の値ごとにシンボルが振り分けられる.「適用」「OK」をクリックする.

「分類」をクリックするとW05-001の値ごとにシンボルが振り分けられる
「分類」をクリックするとW05-001の値ごとにシンボルが振り分けられる

 上記の作業を47回繰り返すと下図のような水域系ごとに色分けされた河川の図が得られる.

水域系ごとに色分けされた河川
水域系ごとに色分けされた河川

 これで完成かと思われたが,よく見てみると利根川水系など,都道府県の境界で色が異なるのが分かる.カラーランプにrandom colorsを指定しているのが原因かもしれないと考え,特定のカラーランプに変更してみたが,結果は思わしくなかった.これではだめである.

 カテゴリ値による定義から単一定義に変更して,下図のように式を少し変更してみた.

式ダイアログで式を変更
式ダイアログで式を変更

 結果はかえって良くないものであった.元のシードとしてのW05-001が近い水域は似たような色になってしまうことが原因である.

直接color_rgb関数に式を指定した場合
直接color_rgb関数に式を指定した場合

レイヤをマージしてみる

 単一定義では隣接する水域系の色も酷似する.カテゴリ値による定義に戻したほうが良さそうである.かと言って都道府県ごとにレイヤが分かれていると配色が一致しない.ならばレイヤをマージすれば良い,と考えてマージしてみた.

 しかし下図のようなエラーが発生し,マージできない.以前の記事ではマージできたのだが.

原因不明のエラーに見舞われる
原因不明のエラーに見舞われる

 おそらくレイヤごとのデータ長の不一致が原因だろうと踏んで,属性のリファクタリングで不要な属性を削除することにした.

「属性のリファクタリング」で不要な列を削除
「属性のリファクタリング」で不要な列を削除

 その後ベクタレイヤのマージを行うと,成功した.

「ベクタレイヤのマージ」に成功する
「ベクタレイヤのマージ」に成功する

レイヤプロパティ

 「レイヤプロパティ」で「単一定義」から「カテゴリ値による定義」に変更する.

「レイヤプロパティ」で値(Value)を「カテゴリ値による定義」に変更
「レイヤプロパティ」で「単一定義」から「カテゴリ値による定義」に変更

 値(Value)にW05-001 % 255と記述する.% は剰余を求める演算子であり,任意の数値を 0 から 255 に量子化する処理である.

値(Value)にW05-001 % 255と記述
値(Value)にW05-001 % 255と記述

 「分類」「適用」「OK」をクリックする.

「分類」「適用」「OK」をクリックする
「分類」「適用」「OK」をクリックする

結果

 水域系により色分けされた河川が表示される.

水域系により色分けされた河川
水域系により色分けされた河川

 別のデータから色分けした河川を示す.国土交通省の国土数値情報より加工したものと,若干異なる.原因は分かっていない.

HydroRIVERS v10より
HydroRIVERS v10より

まとめ

 国土数値情報の河川データをダウンロードし,水域系ごとに河川を色分けした.ベクタレイヤのマージが必要であり,配色はある程度ソフトウェアに委ねる必要があった.

“国土数値情報の河川データを水域系別にQGISで色分けする” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください