読者です 読者をやめる 読者になる 読者になる

/var/log/laughingman7743.log

I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?

PythonでPostGIS

Python PostGIS

GeoAlchemy2*1を使うと良さそう。
pipでPsycopg2*2、SQLAlchemy*3、GeoAlchemy2をインストールします。

PostgreSQLQGISが使える環境が必要なので作ります。
MacPostgreSQLQGISの環境を作るには、HomebrewCask*4で簡単に済ませてしまうのが良いです。 Posgre.app*5は手軽に使えて素敵です。もちろんPostGISも使えます。

Posgre.appはデフォルトでMacと同じユーザ名のユーザとデータベース(パスワードなしでログインできます)が作られています。
CLIツールやPgAdmin3でデータベースに繋ぎ、PostGISが使えるように以下のクエリを実行し、エクステンションを追加します。

CLIツールは以下のようにPostgre.appのパッケージにパスを通しておけば一通り使えます。

国土交通省が公開している行政区域のシェープファイルを使って逆ジオコーディングしてみます。
全国の行政区域データ(N03-140401_GML.zip)を以下からダウンロードしてきて、適当なディレクトリに展開します。

国土数値情報 行政区域データの詳細

ogr2ogrコマンドを使ってPostgreSQLシェープファイルを投入します。
publicスキーマのjp_cityというテーブルに投入する例です。文字コードはShiftJIS、測地系はJGD2000(SRID:4612)としています。

投入が終わったらQGISで確認してみます。以下の様な日本地図的なものが確認できます。

f:id:laughingman7743:20150517173557p:plain

属性テーブルを見てみると都道府県や都市の名前が確認できます。

f:id:laughingman7743:20150517173604p:plain

「日本のへそ」を逆ジオコーディングしてみます。
SQL文は以下です。

GeoAlchemy2を使うと以下のようなスクリプトでできます。

USの行政区域データ等は国勢調査のサイトで公開されていたりするので、日本以外のデータでも色々と面白い利用ができそうですね。

Enjoy!