国土数値情報の河川データの属性テーブルを編集してみたが…

 QGIS で国土数値情報の河川データの属性テーブルを覗いてみて,少し気になる点が見つかった.

国土数値情報の河川データには不備がある

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

 河川データの属性テーブルの構造は以下の表の通りである.詳細は製品仕様書に記載されている.

対応番号 属性名
W05-000 河川端点ID
W05-001 水域系
W05-002 河川コード
W05-003 区間種別
W05-004 河川名
W05-005 原典資料種別
W05-006 流下方向判定
W05-007 河川始点
W05-008 河川終点
W05-009 流路始点
W05-010 流路終点
W05-011 標高

 河川始点,河川終点,流路始点,流路終点の定義はよく理解しておく必要がある.河川には本川(ほんせん),派川(はせん),支川(しせん)の3種類がある.本川から分岐するのが派川,本川に合流するのが支川である.

 河川始点と河川終点には値がないこともある.

テーブル構造の不一致

 QGIS でレイヤのプロパティを確認すると,レイヤによって属性テーブルの構造が微妙に異なっているのが分かる.

 北海道 (W05-09_01) はどうも属性の順番が他のレイヤと違っているようだ.おそらく,最後に来るべき流路始点 (W05-009) と流路終点 (W05-010) が,河川名 (W05-004) と原典資料種別 (W05-005) の間に来ている.

 また,他の県ではフィールド名は W05_001 というような半角英数字で表現されているが,北海道だけは日本語で表現されている.

国土数値情報の河川データのうち北海道の属性テーブルの属性
国土数値情報の河川データのうち北海道の属性テーブルの属性

 茨城県 (W05-08_08) に至っては,11番目に length というデータ長 4 の属性が勝手に付加されている.

国土数値情報の河川データのうち茨城県の属性テーブルの属性
国土数値情報の河川データのうち茨城県の属性テーブルの属性

 国土数値情報の河川データをダウンロードして SQL Server 2008 R2 にアップロードできなかったのは,これが原因かもしれない.

データ長の揺れ

 属性のデータ長が揺れているのも気になる.

 河川名 (W05-004) は別としても,水域系コード (W05-001) は 6 桁なのか 7 桁なのかはっきりしない.他にも流下方向判定 (W05-006) は 1 桁か 4 桁で揺れている.

 河川始点 (W05-007), 河川終点 (W05-008), 流路始点 (W05-009), 流路終点 (W05-010) を示すコードのデータ長は 7 桁, 10 桁あるいは 13 桁で揺れている.7 桁は北海道,10 桁は四国地方,ほかは 13 桁である.

 とりあえず,QGIS のレイヤプロパティから属性テーブルの構造を列記してみた.

Name Size 地物数 1 2 3 4 5 6 7 8 9 10
W05-09_01-g_Stream.shp 65002332 49157 6 10 1 40 7 7 13 4 7 7
W05-07_02-g_Stream.shp 6045620 5390 6 10 1 14 1 4 13 13 13 13
W05-07_03-g_Stream.shp 8980188 7597 6 10 1 14 1 4 13 13 13 13
W05-07_04-g_Stream.shp 4709380 4216 6 10 1 14 1 4 13 13 13 13
W05-07_05-g_Stream.shp 8300524 8051 6 10 1 14 1 4 13 13 13 13
W05-07_06-g_Stream.shp 6576524 6433 6 10 1 14 1 4 13 13 13 13
W05-07_07-g_Stream.shp 9375660 9221 6 10 1 14 1 4 13 13 13 13
W05-08_08-g_Stream.shp 2322420 2174 6 10 1 18 1 4 13 13 13 13
W05-08_09-g_Stream.shp 3901772 3467 6 10 1 18 1 4 13 13 13 13
W05-08_10-g_Stream.shp 4975204 5368 6 10 1 18 1 4 13 13 13 13
W05-08_11-g_Stream.shp 3311892 5244 6 10 1 22 1 4 13 13 13 13
W05-08_12-g_Stream.shp 2593972 3404 6 10 1 22 1 4 13 13 13 13
W05-08_13-g_Stream.shp 1141860 1388 6 10 1 22 1 4 13 13 13 13
W05-08_14-g_Stream.shp 1645180 2305 6 10 1 22 1 4 13 13 13 13
W05-07_15-g_Stream.shp 9773044 11370 6 10 1 18 1 4 13 13 13 13
W05-07_16-g_Stream.shp 3047972 4174 6 10 1 18 1 4 13 13 13 13
W05-07_17-g_Stream.shp 2495476 2588 6 10 1 18 1 4 13 13 13 13
W05-07_18-g_Stream.shp 2375836 3287 6 10 1 18 1 4 13 13 13 13
W05-08_19-g_Stream.shp 3175820 3839 6 10 1 12 1 1 13 13 13 13
W05-08_20-g_Stream.shp 9272588 11467 6 10 1 18 1 1 13 13 13 13
W05-08_21-g_Stream.shp 6759868 9785 6 10 1 20 1 1 13 13 13 13
W05-08_22-g_Stream.shp 5994068 8048 6 10 1 22 1 4 13 13 13 13
W05-08_23-g_Stream.shp 3963780 5962 6 10 1 20 1 1 13 13 13 13
W05-08_24-g_Stream.shp 4751996 7527 6 10 1 20 1 1 13 13 13 13
W05-09_25-g_Stream.shp 2493428 3958 7 10 1 34 1 4 13 13 13 13
W05-09_26-g_Stream.shp 3872844 5151 7 10 1 34 1 4 13 13 13 13
W05-09_27-g_Stream.shp 1273324 2125 7 10 1 34 1 4 13 13 13 13
W05-09_28-g_Stream.shp 5625388 7953 7 10 1 34 1 4 13 13 13 13
W05-09_29-g_Stream.shp 2838572 3601 7 10 1 34 1 4 13 13 13 13
W05-09_30-g_Stream.shp 4381852 4873 7 10 1 34 1 4 13 13 13 13
W05-08_31-g_Stream.shp 2390828 3571 6 10 1 20 1 1 13 13 13 13
W05-08_32-g_Stream.shp 4764988 7347 7 10 1 22 1 4 13 13 13 13
W05-08_33-g_Stream.shp 4372284 6553 7 10 1 22 1 4 13 13 13 13
W05-08_34-g_Stream.shp 4612172 4925 7 10 1 22 1 4 13 13 13 13
W05-08_35-g_Stream.shp 4091812 4502 7 10 1 26 1 4 13 13 13 13
W05-06_36-g_Stream.shp 2570524 4311 6 10 1 14 1 1 10 10 10 10
W05-06_37-g_Stream.shp 1107428 1852 6 10 1 14 1 1 10 10 10 10
W05-06_38-g_Stream.shp 3099212 5141 6 10 1 14 1 1 10 10 10 10
W05-06_39-g_Stream.shp 4736508 5987 6 10 1 14 1 1 10 10 10 10
W05-07_40-g_Stream.shp 3387332 4462 6 10 1 18 1 4 13 13 13 13
W05-07_41-g_Stream.shp 1892140 2713 6 10 1 18 1 4 13 13 13 13
W05-07_42-g_Stream.shp 2208540 2631 6 10 1 18 1 4 13 13 13 13
W05-07_43-g_Stream.shp 5895100 6517 6 10 1 18 1 4 13 13 13 13
W05-07_44-g_Stream.shp 5631620 5020 6 10 1 18 1 4 13 13 13 13
W05-07_45-g_Stream.shp 5359412 5742 6 10 1 18 1 4 13 13 13 13
W05-07_46-g_Stream.shp 5153100 4735 6 10 1 18 1 4 13 13 13 13
W05-07_47-g_Stream.shp 1146636 1305 6 10 1 18 1 4 13 13 13 13

河川端点のデータ長の違いはコード体系の違い

 河川始点,河川終点,流路始点,流路終点はいずれも河川端点を示す.実質的な識別子は最後の 7 桁部分にあり,10 桁や 13 桁の ID の先頭には #t- または #gb03_ という接頭辞 3 文字または 6 文字があてられている.検索したがその点について言及しているページは存在しなかった.そういうことなら検索置換で改修はできそうだが,本来ならコード体系は統一しておくのが筋ではないだろうか?

 ついでながら,河川端点 ID の先頭には # は記述されておらず,こちらも流路と端点のテーブル結合に支障がある.

dbf ファイルの編集

 dbf ファイルの編集は難しいようだ.EXCEL 2003 までは対応できていたが,最近のバージョンではできなくなっている.有志のフリーソフトには DBFファイル編集などといったものもあるが,最新バージョンの Office には対応できていないようである.

 国土交通省の責任で,何とかしてほしいと思う.

いったん csv ファイルにエクスポートすれば,EXCEL で何とかなるのでは?

 と考えてやってみた.今回の記事の対象は,北海道に該当する W05-09_01-g_Stream.shp という名前のファイルである.

QGISからレイヤのエクスポート

 QGIS のレイヤから右クリックして「エクスポート」「地物の保存…」と進む.

「エクスポート」「地物の保存...」
「エクスポート」「地物の保存…」

 「ベクタレイヤを名前を付けて保存…」ダイアログが開く.

ベクタレイヤを名前を付けて保存...
ベクタレイヤを名前を付けて保存…

 一番上にある「形式」をプレスするとファイル形式が列挙されるので,一番下の「カンマで区切られた値[CSV]」を選ぶ.

「形式」から「カンマで区切られた値[CSV]」
「形式」から「カンマで区切られた値[CSV]」

レイヤオプションで CREATE_CSVT を YES に変更

 二番目,「ファイル名」にはファイルパス付きの名前を指定する.レイヤと同じ名前にしておいたほうがフォルダの中で迷子にならずに済むだろう.三番目の「座標参照系」はとりあえずそのままでいい.

 「文字コード」は Windows 環境なら Shift_JIS にしておいたほうが良い.EXCEL で開いたときに文字化けしないためである.他のプラットフォームなら UTF8 でも良いかもしれない.

 「エクスポートするフィールドとエクスポートオプションの選択」ではすべてのフィールドにチェックが入っており,そのままとする.ここではチェックをオン・オフする以外の変更はできない.

 レイヤオプションの CREATE_CSVT は忘れずに YES にしておく.属性の順番を入れ替える,つまりテーブルの構造を変えようとしているので,このファイルも後でいじることになる.

ベクタレイヤを名前を付けて保存...
ベクタレイヤを名前を付けて保存…

EXCEL での操作

Power Query で csv ファイルを読み込む

 できた csv ファイルをダブルクリックしてはいけない.必ず Power Query を使ってデータをインポートすること.

PowerQueryでデータ変換
PowerQueryでデータ変換

 1列目は WKT という列名であり,MULTILINESTRING で始まる座標の組み合わせが続く.WKT とは Well-Known Text の略である.

 2列目以降が属性であり,dbf ファイルの内容が読み込まれている.

 ここでおかしかったのは本来最後に来るべき流路始点 (W05-009) および流路終点 (W05-010) が河川名 (W05-004) の次に来てしまっていることである.Power Query エディタで列を入れ替える.然る後,W05-001, W05-002, …, W05-010 という具合にヘッダー名を変更する.

CSV(コンマ区切り)(*.csv) で保存

 閉じて読み込むとテーブルに展開されるので,これを一旦保存する.さらに「別名で保存…」で csv ファイルに保存する.

CSV形式で保存
CSV形式で保存

テキストエディタでの操作

メモ帳で CSVT ファイルを開く

 次は CSVT ファイルの編集である.メモ帳で W05-09_01-g_Stream.csvt という名前のファイルを開く.5 番目と 6 番目のデータ型定義を選択する.

CSVTファイルの編集前
CSVTファイルの編集前

ヘッダー行の編集を行う

 そのまま「切り取り」,最後に「貼り付け」する.

CSVTファイルの編集後
CSVTファイルの編集後

再度 QGIS に戻る

QGIS で CSV ファイルをレイヤとして追加する

 今 EXCEL で出力した csv ファイルを QGIS でレイヤに追加する.「レイヤ」メニューの「レイヤを追加」「CSVテキストレイヤを追加…」と進む.

「レイヤ」「レイヤを追加」「CSVテキストレイヤを追加...」
「レイヤ」「レイヤを追加」「CSVテキストレイヤを追加…」

データソースマネージャでは文字コードを Shift_JIS に変更

 データソースマネージャが開く.「ファイル名」で」ファイルパスをユーザーインターフェースで指定する.文字コードは Shift_JIS としておく.他の選択肢は自然に決まる.

データソースマネージャ|CSVテキスト
データソースマネージャ|CSVテキスト

CSVレイヤーをシェープファイルにエクスポートする

 レイヤパネルに W05-09_01-g_Stream という名前のレイヤが追加されている.これは csv ファイルをデータソースとするベクタレイヤである.これをシェープファイルに変換するには,やはり「エクスポート」から「地物の保存…」と進む.

レイヤを右クリックして「エクスポート」「地物の保存...」
レイヤを右クリックして「エクスポート」「地物の保存…」

ところどころおかしい Linestring が出現している

 結果を示す.ところどころ,南北に一直線に走る地物が出現している.目視で確認できる限り,5 本ある.5 万件近くあるテーブルなので,これを探し出すのは容易ではない.

csvファイルからshpファイルに変換後
csvファイルからshpファイルに変換後

csv テキストレイヤとシェープファイル変換後のレイヤのプロパティ

csvテキストレイヤのプロパティの属性
csvテキストレイヤのプロパティの属性
csvからshpファイルに変換後のレイヤのプロパティの属性
csvからシェープファイルに変換後のレイヤのプロパティの属性

まとめ

 国土交通省の国土数値情報の河川データの属性を調査したところ,北海道と茨城県に異常が見つかったため,北海道の属性データを修正した.

 テーブル構造を変更するには属性テーブルをいったん csv ファイルにエクスポートする必要があった.

 テーブル構造は修正できたが,その結果異常な地物が出現し,その特定と対処ができていない.これは今後の課題である.

 

“国土数値情報の河川データの属性テーブルを編集してみたが…” への2件の返信

コメントを残す

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

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