PostgreSQLやPostgisをMac OSXで利用する方法はいくつかあります。今回はPostgis本家が推奨するPostgre.appを使いました。
0.参考情報
- web写経開発 様 "国土交通省にあるGISデータをPostGISへインポート(改訂版)
- LANDHERE 様 "PostGISでよく使うSRIDまとめ"
- 'sproke 様 "Setting up postgres.app with PostGIS"
1.格納するデータの準備
テストデータとして、政府の統計窓口から千代田区の境界データを入手します。
▼千代田区の境界&人口データをダウンロード
平成22年国勢調査(小地域)から「男女別人口総数及び世帯総数」を選択
地域選択で千代田区を選び、境界データ「世界測地系平面直角座標系・Shape形式」をダウンロード
2.Postgres.appのインストール
▼Postgres.appのダウンロードと起動
私の場合、なぜかダウンロードフォルダにもこのファイルをおいておかないと、一部コマンドが使えませんでした。
▼Pathの設定
ターミナルからbashにパスを通します。username$ PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
.bash_profileに登録したのですが、エラーが出てしまうのでひとまずこちらで作業してます。
3.データベースの準備
今回、「test_pg」という名前でデータベースを作り、データを格納していきます。
▼データベースへの接続
psql -h localhost
▼データベースの作成とpostgisの拡張設定
CREATE DATABASE test_pg;
CREATE EXTENSION postgis;
一度、psqlを終了します。
4.データのインポート
Shape形式のファイルをPostgreSQLに読み込むためには、テーブルを作り、そのテーブルにデータをインポートする作業が必要です。そこで、shp2pgsqlを利用します。
▼shp2pgsqlでテーブルを作るSQL文を生成、postgreSQLで実行
username$ shp2pgsql -p (格納先ディレクトリ)/h22ka13101 kyokai_chiyoda | psql test_pg
-p はテーブルを作成するための引数
kyokai_chiyodaは作成するテーブル名
パイプを利用して、データベースtest_pgに向けてテーブルを作るSQL文を実行
▼shp2pgsqlでINSERTのSQL文を生成、postgreSQLでchiyodaテーブルにデータを格納
username$shp2pqsql -a -s 2451 -W cp932 (格納先ディレクトリ)/h22ka13101 kyokai_chiyoda | psql test_pg
-aはINSERTのための引数
-s 2451 は投影法を指定するためのSRIDです。今回のデータは平面直角座標で、東京近辺なので同座標の9系にあたる2451を指定
-W cp932は文字コードです。このデータはShift-JISですのでcp932
kyokai_chiyodaはデータをINSERTするテーブル
5.MapServerとの連動確認
MapServerで地図を生成してみます。
▼XY座標 両端の確認
username$ ogrinfo (格納場所ディレクトリ)/h22ka13101.shp -al | grep Extent
Extent: (-9363.292969, -36768.390625) - (-4566.155273, -32703.031250)
ogrinfoでShapeファイルの内容を覗き、grepでXY座標の両端を示すExtentの行だけ読み出します。
▼mapファイルの作成 (chiyoda.map)
MAP
SIZE 800 800 #画像size
EXTENT -9363 -36768 -4566 -32703 #出力範囲の座標
IMAGECOLOR 255 255 255 #背景色R G B
IMAGETYPE PNG #地図画像を保存する形式
LAYER
NAME "kyokai"
CONNECTIONTYPE POSTGIS
CONNECTION "user=(username) password='' dbname=test_pg host=localhost"
DATA "geom FROM kyokai_chiyoda" #select文
TYPE LINE
STATUS ON
CLASS
COLOR 0 0 0
END
END
END
EXTENTにはogrinfoで読み出した情報を入力しています。範囲は任意に設定できます。
▼地図画像の作成
username$ shp2img -m (格納場所ディレクトリ)/chiyoda.map -o chiyoda.png
shp2imgを利用して、作成したmapファイルを呼び出します。このマップファイルに指示された条件で、PostgreSQLがtest_pgデータベースから千代田区の地図情報を読み出し、MapServerが地図を生成します。
▼完成画像 (chiyoda.png)
![]() |
| 千代田区のマップが出力されました。 |

No comments:
Post a Comment