#author("2020-07-27T14:29:59+09:00","default:nobuoki","nobuoki") #author("2020-07-27T14:31:10+09:00","default:nobuoki","nobuoki") * はじめに [#d248f2a8] DPZの地図、とは [[地名の最後の一文字だけで地図をつくると地形が見える :: デイリーポータルZ>https://dailyportalz.jp/kiji/saigo-no-hitomoji-chizu]] のことです 過去にも何度かチャレンジしましたが、 -[[GISっ子/デイリーポータルZのあの地図を作りたい]] -[[GISっ子/「地名の最後の一文字」を取りそこねていたので訂正]] に続く第3弾です 今回は元ネタを総務省 e-Stat にある国勢調査データ(shapefile)を使ってみることにします 元ネタを国勢調査データ(shapefile)に変えて作成してみます * データ入手 [#g533143b] 茨城県を例にします [[政府統計の総合窓口>https://www.e-stat.go.jp/]] → [[統計GIS>https://www.e-stat.go.jp/gis]] → 境界データダウンロード → 小地域 → 国勢調査 → 2015年 - 小地域(町丁・字等別) → 世界測地系緯度経度・Shapefile → 08 茨城県 → 08000 茨城県全域 #ref(./estat01.PNG,50%) * dbf を csv に変換 [#mf153559] 属性データさえあれば良いので(区域のポリゴンは不要なので)手っ取り早く dbf ファイルから csv ファイルを手に入れます ここでは [[dbfコンバータをコンテナにする>GISっ子/dbfコンバータをコンテナにする]] を利用しています #prism(bash){{{ # e-Statからダウンロードしたファイルを解凍 $ unzip A002005212015DDSWC08.zip Archive: A002005212015DDSWC08.zip inflating: h27ka08.dbf inflating: h27ka08.prj inflating: h27ka08.shp inflating: h27ka08.shx # (事前確認)dbfconv のエイリアス $ command -v dbfconv alias dbfconv='podman run --rm -v .:/mnt kemasoft/dbfconv dbfconv' # dbfconvで変換 $ dbfconv h27ka08.dbf cp932encoding is correct. h27ka08.csv was wroted. All files were wroted. # csvファイルが出力されている $ ls A002005212015DDSWC08.zip h27ka08.csv h27ka08.dbf h27ka08.prj h27ka08.shp h27ka08.shx }}} * 地名の最後の一文字、緯度、経度を抽出 [#u79c6cb0] - 不要行、不要カラムの削除(必要なカラムのみ出力) - 地名の最後の一文字の抽出 を sed, awk でやります #prism(bash){{{ sed '1d;s/"//g' h27ka08.csv | awk -F, -v OFS=, 'a=$7{sub(/(町?[東西南北]?[0123456789]+丁目|[町村])$/, "", a);print $5,$6,$7,a,substr(a,length(a)),$33,$34}' >filtered.csv }}} 解説入り #prism(bash){{{ # 1行目(ヘッダ行)を削除、ダブルクォーテーションを全て削除 sed '1d;s/"//g' h27ka08.csv | \ # awk をカンマ区切りで入出力させる awk -F, -v OFS=, ' # 7 カラム目(S_NAME)が存在するときに以降の変換処理を行う a=$7{ # S_NAMEの末尾から余分な文字を削除(例:小川町北3丁目→小川) sub(/(町?[東西南北]?[0123456789]+丁目|[町村])$/, "", a); # (おまけで)都道府県、市区町村、町丁字等名称と、 # 町丁字等名称の最後の一文字、経度、緯度を出力 print $5,$6,$7,a,substr(a,length(a)),$33,$34} ' >filtered.csv # 結果をファイルに出力 }}} awk で使ったカラムは以下の通りです 詳しくは [[平成27年国勢調査町丁・字等別境界データ データベース定義書>https://www.e-stat.go.jp/gis/statmap-search/data?datatype=2&serveyId=A002005212015&downloadType=1]] を参照して下さい #pre(){{ 5 PREF_NAME 6 CITY_NAME 7 S_NAME 33 X_CODE 34 Y_CODE }} ** 余談 [#lfcd4f2a] 住所の数字部分はお役所の縦割り毎で表記ゆれがあるようです - 国土地理院:漢数字(一二三) - 総務省:全角数字(123) こういう基本的なところをまず合わせようよ、と思います * QGISで表示 [#x7b4b816] filtered.csvファイルをQGISで読み込ませます #ref(./estat02.PNG,50%) シンボロジとラベルを調整し、適当な背景を重ねれば完成です - シンボロジ:シンボルなし - ラベル:単一定義(single)、値「field_5」、配置「点からのオフセット」 #ref(./estat03.jpg,30%)