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 にアップロードできなかったのは,これが原因かもしれない.
2022年8月現在,北海道と茨城県の属性テーブルの構造については改修されているようである.
データ長の揺れ
属性のデータ長が揺れているのも気になる.
河川名 (W05-004) は別としても,水域系コード (W05-001) は 6 桁なのか 7 桁なのかはっきりしない.他にも流下方向判定 (W05-006) は 1 桁か 4 桁で揺れている.
河川始点 (W05-007), 河川終点 (W05-008), 流路始点 (W05-009), 流路終点 (W05-010) を示すコードのデータ長は 7 桁, 10 桁あるいは 13 桁で揺れている.7 桁は北海道,10 桁は四国地方,ほかは 13 桁である.
データ長の揺れに関しては2022年8月現在でも改修されていない.
とりあえず,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]」を選ぶ.
レイヤオプションで CREATE_CSVT を YES に変更
二番目,「ファイル名」にはファイルパス付きの名前を指定する.レイヤと同じ名前にしておいたほうがフォルダの中で迷子にならずに済むだろう.三番目の「座標参照系」はとりあえずそのままでいい.
「文字コード」は Windows 環境なら Shift_JIS にしておいたほうが良い.EXCEL で開いたときに文字化けしないためである.他のプラットフォームなら UTF8 でも良いかもしれない.
「エクスポートするフィールドとエクスポートオプションの選択」ではすべてのフィールドにチェックが入っており,そのままとする.ここではチェックをオン・オフする以外の変更はできない.
レイヤオプションの CREATE_CSVT は忘れずに YES にしておく.属性の順番を入れ替える,つまりテーブルの構造を変えようとしているので,このファイルも後でいじることになる.
EXCEL での操作
Power Query で csv ファイルを読み込む
できた csv ファイルをダブルクリックしてはいけない.必ず Power Query を使ってデータをインポートすること.
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 ファイルに保存する.
テキストエディタでの操作
メモ帳で CSVT ファイルを開く
次は CSVT ファイルの編集である.メモ帳で W05-09_01-g_Stream.csvt という名前のファイルを開く.5 番目と 6 番目のデータ型定義を選択する.
ヘッダー行の編集を行う
そのまま「切り取り」,最後に「貼り付け」する.
再度 QGIS に戻る
QGIS で CSV ファイルをレイヤとして追加する
今 EXCEL で出力した csv ファイルを QGIS でレイヤに追加する.「レイヤ」メニューの「レイヤを追加」「CSVテキストレイヤを追加…」と進む.
データソースマネージャでは文字コードを Shift_JIS に変更
データソースマネージャが開く.「ファイル名」で」ファイルパスをユーザーインターフェースで指定する.文字コードは Shift_JIS としておく.他の選択肢は自然に決まる.
CSVレイヤーをシェープファイルにエクスポートする
レイヤパネルに W05-09_01-g_Stream という名前のレイヤが追加されている.これは csv ファイルをデータソースとするベクタレイヤである.これをシェープファイルに変換するには,やはり「エクスポート」から「地物の保存…」と進む.
ところどころおかしい Linestring が出現している
結果を示す.ところどころ,南北に一直線に走る地物が出現している.目視で確認できる限り,5 本ある.5 万件近くあるテーブルなので,これを探し出すのは容易ではない.
csv テキストレイヤとシェープファイル変換後のレイヤのプロパティ
まとめ
国土交通省の国土数値情報の河川データの属性を調査したところ,北海道と茨城県に異常が見つかったため,北海道の属性データを修正した.北海道と茨城県の属性テーブルの構造の異常については2022年8月現在改修されているようである.
テーブル構造を変更するには属性テーブルをいったん csv ファイルにエクスポートする必要があった.
テーブル構造は修正できたが,その結果異常な地物が出現し,その特定と対処ができていない.これは今後の課題である.
“国土数値情報の河川データの属性テーブルを編集してみたが…” への2件の返信