shp から GeoJSON に変換

都道府県境界用のデータで取得したzipファイルを解凍すると、以下の7種類のファイルがアーカイブされています。

  1. ne_10m_admin_1_states_provinces.cpg
  2. ne_10m_admin_1_states_provinces.dbf
  3. ne_10m_admin_1_states_provinces.prj
  4. ne_10m_admin_1_states_provinces.README.html
  5. ne_10m_admin_1_states_provinces.shp
  6. ne_10m_admin_1_states_provinces.shx
  7. ne_10m_admin_1_states_provinces.VERSION.txt

この、shp を使用して GeoJSON に変換します。変換には、README、VERSION 以外のファイルも使われるので、このディレクトリの状態で変換する方が賢明です。

GeoJSON への変換には、GDAL ライブラリのogr2ogrを使用します。
単純に、shp → GeoJSON であれば次のコマンド形式で変換できます。

本来であれば、範囲を日本だけに絞りたいところですが、shp をエディタで見ることもできないので取り敢えず単純に変換します。

その結果、65MB程の大きなGeoJSON ファイルが出力されます(変換時にエラーが出ますが、ファイルが出力されていれば問題ありません)。

GeoJSON のファイルサイズが大きいので、エディタによっては読み込めないかもしれません。
私の場合は、Chrome アプリの JSON Editor を使用していますが、これが実に優れモノで JSON を使用する場合の必須アイテムですね。
閑話休題、このデータ内に admin と言う項目があり、そこに国名が入っているので、これで国を絞ることが出来そうです。
ogr2ogr には、sql 指定が可能なので、国名を指定して再実行してみます。今回は、出力を japan.geojson にします。

これで、出力ファイルは650KB程まで縮小します。

その中を、エディタや先程の JSON Editor で見ると、以下のような問題が見えて来ます。

  1. データの並びが都道府県順でない
  2. 不要なコードが多数ある(都道府県名の多国語表記など)
  3. データの欠落(静岡県が???表記になっている)

都道府県順出力は ORDER BY句を指定することで実現できそうです。
また、不要な項目を排し必要な項目だけを選択すれば、2と3の問題も解消できますので
先程のコマンドを次のように変更します。

各項目の内容は以下の通り。

項目名 内容
1 type GeoJSON 必須項目
2 iso_3166_2 都道府県コード:JP-XX の形式で記録
3 name_ja 都道府県名(任意)
4 latitude 都道府県庁の緯度(任意)
5 longitude 都道府県庁の経度(任意)

GeoJSON のプロパティには、ユニークな識別子を設定する必要があるとのことなので、iso_3166_2 がそれに該当します。

これで、見通しの良いすっきりした GeoJSON が作成できたと思います。

Googleドライブの画像表示

Googleドライブの共有可能なリンクを使用して、Wordpressに画像を表示してみます。

TopoJSON
世界地図

手順

  1. 「投稿の編集」かメディアを追加
  2. 左メニューのアクションの中から「URLから挿入」をクリック
  3. 「http://」で始まる入力ボックスに、共有可能なリンクを変換(*1)したURLを貼り付ける
  4. 後は好みに応じ、代替テキスト、キャプション等を入力して「投稿に挿入」する。

(*1) 共有可能なリンクの変換が分からない場合は、「Googleドライブの画像をブログに張付ける」を見てください。

Googleドライブの画像をブログに張付ける

Googleドライブにアップした画像をブログで使うと、ローカルからいちいちアップロードする必要もなくなるので便利かなと思い調べてみた。
調べた結果をすぐ忘れてしまうので、ここに備忘録として残しておく。

1. 何はともあれ Googleドライブを開く。
2. ブログ等に使用する画像やファイルなどを右クリックする。
3. コンテキストメニューの「共有可能なリンクを取得する」を選択。
4. ダイアログ「リンクを取得」の「リンクをコピー」を押下。

ここで得られたリンクは、次のようなフォーマットの何れかになっているはずなので、メモ帳などに張り付け確認する。

この形式のURLをそのまま使用できないので、次の形式に変換する必要がある。

テキストエディタで変換するのもよいが、毎回この文字列を思い出すのも面倒なので
変換用にプログラムを書いてみた。

共有可能なリンクの変換
http://memopad.bitter.jp/web/codepen/google-drive-url.html

一応入力形式のチェックも行っており、誤った形式のURLはエラーメッセージを表示するので安心して使えると思う。

都道府県境界用のデータ

都道府県境界を表す Geometry データはNatural Earthからダウンロードできます。
手順を以下に示します。

1. Large scale data, 1:10m の Cultural をクリック

データは、Large scale data, 1:10m が一番精度が高く(ファイルのサイズが大きい)、右に行くほど粗く(サイズが小さく)なるようです。

2. Admin 1 – States, Provinces の Download states and provinces をクリック

これでダウンロードが始まります。
内容は、日本に限らずアメリカの州や、中国の省なども含まれています。
解凍すると約30MB程のサイズになります。

display run-in に関するメモ

css において

のように、display の属性値として “run-in” の指定が可能だが
次の様に解説書には説明されている。

CSS3で指定可能な値です。その要素をラインボックスとして表示します。ラインボックスは、ブロックボックスが次に続く場合に、そのブロックボックスの内の先頭にインラインボックスとして配置されるボックスです。

分かり難いので、いろいろ調べた結果を次の図で説明する。

ここで、「One fish.、Two fish.」がインラインボックスで、それに続く”Pellentesque habitant morbi….” が後続するブロックボックスに該当する。
上に示した図を HTML で記述すれば、以下のようになる。
本来なら、”h3″ も “p” もブロック要素であり、そのまま表示すればこの要素間には改行が挿入されるはずだが、
“display : run-in”
の指定により “h3” と “p” を連結した形のインラインボックスを形成するようになる、というのがこの説明の意味するところ。

折角機能を調べたなら、確認してみたいのは当然の成り行き。
調べている過程で既に分かっていたのだが、FireFox は、噂ではこの仕様に不満で全くサポートしていない。
だが、Safari、Chrome、Opera、IE 8 はサポートしている。
とのことなので、このページを Chrome で開いてみる。
??? 機能しない。Edge、Vivaldi も(多分 Safariも)同様。
どういうことなんだろう。Chome もスペックダウンしたのか。

この “run-in” は、CSS2の仕様で定義されたが、CSS2.1で削除され、CSS3 で再度検討されているものとのこと。
そこで、ふと思いついたのが、Windows アクセサリに眠る錆びついた IE。
これを引っ張り出し、これで表示したところ、上の図と同じ内容が確認できた。
古いものでも、役に立つ場合があるんですね。

お疲れ!

参考:CSS Run-in Display Value

MySQL「MySQL shutdown unexpectedly」で動作停止

環境:windows10、xampp

自作のプログラムから、いつも通りデータを登録しようとしたら
登録済みのメッセージが返ってこない。
変に思い、xampp-control を立ち上げ確認したところ MySQL が
起動していない。
そのパネルから “start” しても、下記メッセージを吐きあえなくダウン。

雲をつかむようなメッセージで、手掛かりがないので
“Error: MySQL shutdown unexpectedly”
でググる。

有り難いもので、同じ問題に遭遇した方が、こちらに解決法を提示してくれていました。(感謝!)
内容は重複しますが、解決法は次の通りです。

解決法

(1) c:\xampp\mysql\data に移動
(2) 次のファイルを削除する
    ① ibdata1
    ② ib_logfile で始まる全ファイル
(3) xampp-control を開き、start ボタンをクリック
以上

私の場合には、これで解決できました。

AnacondaとMeCab

Ubuntu18.04のAnaconda3環境にMeCabをインストールしてみた。
MeCabとは、所謂分かち書き用のソフトで、案山子や茶筅と同種のもの。

インストールは、「ubuntu 18.10 に mecab をインストール」を参考にした。

UbuntuへのMeCabインストール

動作確認

前者は問題ないが、後者は「はくたか」と言う固有名詞が認識できていない。
そこで、次のインストールを行う。

mecab-ipadic-NEologdのインストール

NEologd(Neologism dictionary for MeCab)とは、MeCabのシステム辞書のこと。
詳細はGitHubを参照。

私の環境では、この最後の行で「curl not found」のようなエラーが発生した。
“which curl”とすると、”curl” 自体は存在しているが Anaconda の中。
原因がこれと思われるので、curl をシステムにインストールする。

その後、再度

これで、無事インストール完了。

辞書の変更

/etc/mecabrcの「dicdir」を次のように変更する。

動作確認

今度は、後者は問題ないが、前者の方は「すももももも」が固有名詞になっちゃいました。

NEologdのGitHubページに

「Web上の文書の解析をする際には、この辞書と標準のシステム辞書(ipadic)を併用することをオススメします。」

と書いてあるのは、こういうことなのかもしれない。
でも、どうすれば併用できるの?
これは、これからの課題としてとっておく!!

追記

この「併用」を、ipadic と Neologd を組み合わせて解析するものと解釈したのが大間違いでした。
「場合場合で辞書を使い分けなさい」というのが、この「併用」の意味するところのようで、つまり、
「前者なら iapdic を、後者なら Neologd を使いなさい。私達は、双方を満足するするような解析はできませんよ」
と言うことのようです。

Python3へMeCabインストール

いよいよ佳境に入ってきた。
まずは必要なパッケージをインストール
注:ここでは、swig インストール以外の操作は不要かもしれない。)

続いてPythonのMeCabパッケージをインストール。

「conda」ではなく「pip3」であることに注意!

import確認

簡単にターミナルから確認する。

pip3 によるインストール自体は正常終了したものの、Anacondaにはそれ相応の閉じた世界があるので、”pip3″ を使用してしまうと Anaconda Python の監視下にはインストールされないようだ。
いろいろググった挙句、行き着いたのはこのブログ
jupyter notebook から pip インストールせよとのこと。

早速 jupyter notebook を立ち上げ、次を実行

!pip であることに注意)

これにより、Python にMeCab が import可能になった。感謝!

サンプルプログラム

Qiita の例に倣って、次のサンプルプログラムを作成して確認する。

ま、まずい!
辞書の変更が反映されていない。
でも、一応動作確認はできたので、今日はここまでにしておこう。

追記

気を取り直して続きを書く。
Ubuntu のターミナルからは、前述の通り /etc/mecabrc を変更すれば辞書が切り替わるのだが、
Python からは MeCab.Tagger に -d オプションを指定して辞書のディレクトリを指定する必要がある。

これで、動的に辞書を切り替えられるという訳ですね。

なお、windows 上でのディレクトリ指定は次のようにする。
(C ドライブの直下に mecab-ipadic-neologd を作成し、そこに辞書をコピーしたものとする)

ディレクトリは windows の記法に則ることに注意願いたい。

おしまい!!

メモ

連想配列の要素展開

連想配列の要素展開がエラーになるので調べてみた。
例えば、次のような配列があったとする。

要素にアクセスするには、次のように key をシングルまたはダブルコーテーションで括る。

コーテーションで括らない場合はエラーになる。

以上を踏まえて変数の展開を行ってみる。
下の方法は、変数の展開を使用しない場合のものである。

.(ドット)演算子を間に挟むのが煩わしいので、できれば使用したくない。
そのため、変数展開を使用し次のように記述する

この場合「PHP Parse error」となる。
変数展開を使用する場合、key をコーテーションで括らず次の様に記述しなければならないとのこと。

PHP との付き合いは長いが、どうも基本を理解していないようだ!

PHP 7 への v-up と WordPress の2つの問題

wordpressを久し振りに開くと、最新のPHPへのバージョンアップ促すようなメッセージが表示されている。
これを機にバージョンアップを行ったのだが、問題点が2つ発生したので今後のためにこのメモを残す。
なお、レンタルサーバはロリポップを使用している。

1. PHP の v-up 後に WordPress が動作しない

「Wordpress から MySQL へ接続できない」というようなメッセージが表示され、動作しなくなる問題が発生。
対策が手に負えそうもないので、ロリポップへへルプのメールを送ると翌日には回答が届く。

データベースのパスワード再設定を行い、パスワード形式を「old_password形式」から「native_password形式」に変更する必要があるとのこと。手順は以下の通り。

  1. ユーザー専用ページの〔サーバーの管理・設定〕→〔データベース〕メニューにアクセスします
  2. 利用中のデータベースの〔パスワード確認〕をクリックし、現在のパスワードをメモしておきます
  3. 〔パスワードを再設定する〕をクリックします
  4. 2で確認したパスワードを入力し、〔パスワードを再設定する〕をクリックします
  5. 確認画面が表示されたら〔OK〕をクリックします

この操作で動作するようになりました。
問題に素早く対応して頂いたロリポップ担当者には感謝いたします。

2. 投稿記事の一部が表示されない

動くようになり安堵していると、投稿の一部がタイトルしか表示されず記事内容が全く表示されていないのに気付く。
苦労して書き上げたものもあるので蒼褪めてしまう!
しかし、ダッシュボードの投稿には記事が残っている。
ただ表示されないだけ。
ググってみると、様々ヒットしたなかで一番有力だったのが Crayon。

php7 にバージョンアップした結果、preg-replace でエラーが出るようになったのが原因とのこと。

wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php に次の修正を加えれば動くようになる模様。

(ハイフォンをエスケースするように変更するもの。php7 になってチェックが厳しく(?)なったような気がします。)

自信がない場合は、こちらのサイトを参考に、修正版を再インストールした方が賢明かもしれません。

XAMPP for WindowsのPHP 7からMongoDBを使用する

タイトルが長いけど致し方ない。
情報が錯綜し、これだけの条件を指定しないと
誤った設定を指定してしまうためだ!

Windows10にxamppおよびMongoDBをインストール済みで
php7からMongoDBに接続するまでがこのブログの課題。

ステップ1:
MongoDB PHP ドライバをpeclから「7.X Thread Safe (TS) x86.」をダウンロードする。
ステップ2:
ダウンロードしたzipファイルを展開し、その中の「php_mongodb.dll」を “/xampp/php/ext” にコピーし、”/xampp/php/php.ini” に次の行を追加する。

ステップ3:
xampp-control パネルから Apache を再起動。
ステップ4:
phpinfo を使用し、次の図のようにMongoDBの動作を確認する。

ステップ5:
次の php-mongo.php というファイルを作成し、PHP 7 から MongoDB に接続できるかテストする。

ブラウザに次のように表示されれば接続成功です!

【参考】

  1. 公式ドキュメント
  2. Configure MongoDB with PHP 7 for XAMPP on Windows