#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%)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS