2020/7/30 (木)

オープンデータの鮮度

以前、電子国土基本図(地名情報)「住居表示住所」 | 国土地理院 のデータを使って DPZのあの地図 を作ったところ、埼玉県越谷市付近がとてもヘンテコな地図になってしまい、おかしいなぁと思ってました

で、改めて電子国土基本図(地名情報)「住居表示住所」 | 国土地理院の更新履歴を見たところ、埼玉県越谷市は2012年のデータのままでした

国土交通省の 位置参照情報 ダウンロードサービス のほうが断然鮮度が高くて有用ですね

2020/7/29 (水)

裏窓/フォルダーの種類をデフォルト「全般」にする

はじめに

Windows10のエクスプローラでフォルダを開く際、フォルダに含まれるファイルの種類(拡張子)で自動的に画像アイコンで表示したり、音楽再生向けのカラム表示になったり、気が利いているようで厄介なのを、デフォルトで「全般」にする方法があります

Windows 10 フォルダの種類や列の表示を固定する にある「フォルダーの種類が変更されるのを無効にする」です

ここで紹介されている手順を簡略化するため、regファイルを作成してみました

使い方

  1. Folder-NotSpecified.reg をダウンロード(右クリック→名前を付けて保存)
  2. ダウンロードした Folder-NotSpecified.reg をダブルクリック

これだけです

regファイル

ポイント(How to add, modify, or delete registry subkeys and values by using a .reg file

ちなみに(今回は使ってないですが)値だけ削除するには、値の右辺に - (マイナス)を代入します

HKEY_LOCAL_MACHINE\Software\Test
"TestValue"=-

2020/7/28 (火)

GISっ子/e-stat国勢調査データからDPZの地図を作る

はじめに

DPZの地図、とは 地名の最後の一文字だけで地図をつくると地形が見える :: デイリーポータルZ のことです

過去にも何度かチャレンジしましたが、

今回は元ネタを総務省 e-Stat にある国勢調査データ(shapefile)を使ってみることにします

データ入手

茨城県を例にします

政府統計の総合窓口統計GIS → 境界データダウンロード
→ 小地域 → 国勢調査 → 2015年 - 小地域(町丁・字等別) → 世界測地系緯度経度・Shapefile → 08 茨城県 → 08000 茨城県全域

estat01.PNG

dbf を csv に変換

属性データさえあれば良いので(区域のポリゴンは不要なので)手っ取り早く dbf ファイルから csv ファイルを手に入れます
ここでは dbfコンバータをコンテナにする を利用しています

# 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

地名の最後の一文字、緯度、経度を抽出

を sed, awk でやります

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

解説入り

# 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年国勢調査町丁・字等別境界データ データベース定義書 を参照して下さい

     5  PREF_NAME
     6  CITY_NAME
     7  S_NAME
    33  X_CODE
    34  Y_CODE

余談

住所の数字部分はお役所の縦割り毎で表記ゆれがあるようです

こういう基本的なところをまず合わせようよ、と思います

QGISで表示

filtered.csvファイルをQGISで読み込ませます

estat02.PNG

シンボロジとラベルを調整し、適当な背景を重ねれば完成です

estat03.jpg

2020/7/27 (月)

裏窓/vbsファイルをスタートメニューにピン留めする

vbsファイルをスタートメニューから一発で起動したい、という時はありませんか?

vbs07.PNG

概ね2つのやり方があると思います

ここでは後者の手順を説明します

何もしない状態だと、vbsファイルは右クリックしても「スタートメニューにピン留めする」が出ないので・・・

vbs01.PNG

exeファイルのショートカットを作成し、ピン留めする作戦です。

手順

例として基盤地図情報 標高DEMデータ変換ツール | コンテンツ | 株式会社エコリスを利用しました

  1. wscript.exe のショートカットをお好きな場所(vbsファイルのフォルダなど)に作成する
    wscript.exe は C:\Windows\System32 フォルダにあります
    vbs02.PNG
     
  2. (次の作業で使うために)vbsファイルのパス名をダブルクォーテーション付きでクリップボードにコピーしておく
    vbsファイルを【SHIFTキーを押しながら】右クリックすると「パスのコピー(A)」が出るので選択します
    vbs03.PNG
     
  3. さきほど作成した wscript.exe のショートカットのプロパティを編集します
    • タブ「ショートカット」にある、「リンク先(T)」のところで、wscript.exe の後ろに1つ半角スペースを入れてから、vbsファイルのパスを貼り付けます(ダブルクォーテーション付きで)
    • 「作業フォルダー(S)」は、vbsファイルのフォルダに変更します(vbsファイルのパスをペーストして編集すると楽です)
    • (お好みで)アイコンを変えておきます
      vbs04.PNG
       
    • タブ「全般」で、ショートカットの名前をわかりやすいものに変えます(最終的に、スタートメニューに表示される名前になります)
      vbs05.PNG
       
  4. 編集したショートカットを右クリックし「スタートメニューにピン留めする」を選択します
    vbs06.PNG
     
  5. スタートメニューにピン留めされました
    vbs07.PNG

2020/7/24 (金)

コネタ/nkfで無理やり日本語をrot13してみる

例えば slack で言いづらいことを暗号化(難読化)して分かる奴だけに伝えたい時ってありますよね?
(だったらDMしろよ!という声が聞こえなくも無いですが・・・)

るあてっはでテムガに
らうのータニモはギカ
のえくづでそ

これは単に rev | fold しただけなのでバレバレですが、
もうちょっと簡単に難読化したいですよね?

嚮囑囈嘲嘛圄壓壙圉坡奢夥倬圄嗾唳囹壑埀奕囑圉囃囎嗔喙

何と nkf -r で出来ます!

$ echo 'そでづくえのカギはモニターのうらにガムテではってある' | nkf -r
嚮囑囈嘲嘛圄壓壙圉坡奢夥倬圄嗾唳囹壑埀奕囑圉囃囎嗔喙

$ echo 'そでづくえのカギはモニターのうらにガムテではってある' | nkf -r | nkf -r
そでづくえのカギはモニターのうらにガムテではってある

漢字は変換時に欠落することがあるので、ひらがな、カタナカのみがお勧めです
ぜひスラッシュコマンドに登録しておきましょう(←しない)

余談

rot13は普通 a-zA-Z の変換を指しますよね

# マルチバイト文字はそのまま
$ python -c 'import codecs; print(codecs.encode("海賊王にoreはなる!", "rot-13"))'
海賊王にberはなる!

で、たまたま ROT13 - Qiita を眺めてたところ
nkf -r と書いてあるのを見つけ、何このオプションと思ったら

$ man nkf | grep -wF -- -r
       -r  ROT13/47 の変換をする。

で、試しにやってみたら

$ echo "海賊王にoreはなる!" | nkf -r
瞋騾疸囹ber圉囮喙!

すげー!
と思ったのも束の間、

# 欠ける例
$ echo 袖机の鍵はモニターの裏にガムテで貼ってある | nkf -r | nkf -r
袖机の鍵はモニターのにガムテでってある

でもまぁ、ひらがな、カタカナがセーフならいいじゃん、と思いチェックしてみる

# utf-8 でひらがな全部
$ echo -e "\u30"{4..9}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}
぀ ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん ゔ ゕ ゖ ゗ ゘ ゙ ゚ ゛ ゜ ゝ ゞ ゟ

# 2回変換して元に戻るかチェック
$ diff -u \
<(echo -e "\u30"{4..9}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}| xargs -n1) \
<(echo -e "\u30"{4..9}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} | nkf -r | nkf -r | xargs -n1)

(出力無し)

割愛しますが、カタカナも元に戻りました

nkfのソースだとこの辺あたりのようです

$ git clone https://scm.osdn.net/gitroot/nkf/nkf.git
$ cd nkf/
$ grep -rinw rot13
(略)
nkf.c:4156:#define rot13(c)  ( \
nkf.c:4177:     c1 = rot13(c1);
(略)

nkf.c

4156 #define rot13(c)  ( \
4157                    ( c < 'A') ? c: \
4158                    (c <= 'M')  ? (c + 13): \
4159                    (c <= 'Z')  ? (c - 13): \
4160                    (c < 'a')   ? (c): \
4161                    (c <= 'm')  ? (c + 13): \
4162                    (c <= 'z')  ? (c - 13): \
4163                    (c) \
4164                   )
4165
4166 #define  rot47(c) ( \
4167                    ( c < '!') ? c: \
4168                    ( c <= 'O') ? (c + 47) : \
4169                    ( c <= '~') ?  (c - 47) : \
4170                    c \
4171                   )
4172
4173 static void
4174 rot_conv(nkf_char c2, nkf_char c1)
4175 {
4176     if (c2 == 0 || c2 == JIS_X_0201_1976_K || c2 == ISO_8859_1) {
4177         c1 = rot13(c1);
4178     } else if (c2) {
4179         c1 = rot47(c1);
4180         c2 = rot47(c2);
4181     }
4182     (*o_rot_conv)(c2,c1);
4183 }

マルチバイト文字を考慮しているのかは・・・(分からず/たまたまうまく動いている、と信じよう)


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS