河川データを都道府県別ではなく,水域別に抽出したい.そんな動機から QGIS と EXCEL の間を行ったり来たりしている.QGISで都道府県ごとの河川データをマージするではかなり無謀なことをやった.今回はもう少し丁寧にデータを扱ってみたい.
QGIS での作業
レイヤの「エクスポート」「地物の保存…」
すでに国土数値情報の河川データはレイヤとして取り込んであるものとする.国土数値情報の河川データの属性テーブルを編集してみたで書いたが,北海道のデータも訂正済みであるとする.47 個あるレイヤを一つずつ右クリックして「エクスポート」「地物の保存…」と進む.
「ベクタレイヤを名前を付けて保存」ダイアログでの注意点
「ベクタレイヤを名前を付けて保存…」ダイアログでは文字コード,レイヤオプションの CREATE_CSVT および GEOMTRY に注意する.
Windows 環境では文字コードを Shift_JIS にしておくのが無難である.
レイヤオプションの CREATE_CSVT は YES にしておく.最も重要な点だが, GEOMETRY を <Default> のままにしておくと,最も重要な座標情報がエクスポートされず,属性テーブルだけがエクスポートされてしまう.必ず AS_WKT など具体的なものを選択すること.
AS_WKT の他,AS_YX, AS_XY, AS_XYZ などの選択肢があるが,調べていない.
エクスポート先は別のフォルダ 1 個にまとめる
何度も書いている気がするが,エクスポート先は一つにまとめておく方が後で楽である.ファイル名にも規則性を持たせるべきだ.Power Query での一括インポートを念頭に置いている.
EXCEL での作業
EXCEL の Power Query でデータの取得
ここからは EXCEL での作業となる.新規ブックの「データ」メニューから「データの取得」「ファイルから」「フォルダーから」と進む.
フォルダーパスを聞かれるのでユーザーインターフェースで指定する.
ファイル名をフィルター
いきなり読み込むのではなく「データの変換」をクリックして Power Query エディタを起動する.
フォルダー内のファイル名がまず並ぶと思う.筆者の環境ではフォルダ内に他の種類のファイルがあるため,ファイル名にフィルターをかけて目的のファイルのみ抽出している.
具体的なフィルター条件は各自の環境で異なるだろう.規則的なファイル名という先程の記述がここで生きている.
カスタム列の追加
カスタム列を追加し,「カスタム列の式」に csv とタイプするとインテリセンスが働いて候補の関数がポップアップする.Csv.Document を選択する.
さらに続けて ([ とタイプすると引数の候補がポップアップするので,[Content] を選ぶ.
カスタム列の列名の右側に左右に開く矢印のアイコンが見える.これをクリックすると下図のようにテーブルの内容が展開される.ここまで来れば,カスタム列から展開した列以外の列は全て削除して構わない.
ここでは省略しているが,さらに「1行目をヘッダーとして使用」して「閉じて読み込む」.結果は 286483 件.
フォルダーからの一括インポートでは文字化けする?
しかしながら,なぜか河川名が文字化けしてしまう.csv ファイルを一つずつインポートすると文字化けしないため,どうもフォルダーからの一括インポートのタイミングで文字化けが発生するらしい.Microsoft には何とかしてもらいたい.
この後,ブックを保存し,さらに「別名で保存」で csv ファイルとして保存する.
再び QGIS に戻る
QGIS でレイヤを追加
QGIS でその csv テキストファイルをベクタレイヤとして読み込み,レイヤのプロパティを確認してみる.下図の通り,データ長が 0 のままである.よく考えてみると CSVT ファイルを作成していない.シェープファイルに変換するとデータ長が明確になるのはそのためかもしれない.
CSVテキストレイヤをベクタレイヤとして追加した結果である.北海道と九州で明らかにおかしいデータがあるが,特定と対処法はまだ分からない.