PostGISインストール

2010/06/24

WEB+DBの記事を参考にPostGISをインストール

# aptitude search postgis # aptitude install postgresql-8.3-postgis

■template作成

# su postgres postgres$ createdb postgistemplate postgres$ createlang plpgsql postgistemplate

予めSQLが用意されてるので実行する。 ※WEB+DBだとlwpostgis_upgrade.sqlの取り込みがないが、2010/6/24現時点では必要

postgres$ psql -d postgistemplate -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql postgres$ psql -d postgistemplate -f /usr/share/postgresql-8.3-postgis/lwpostgis_upgrade.sql postgres$ psql -d postgistemplate -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql

ん?何か、spatial_ref_sys.sqlで「transaction block」エラーが出てるぽいよ(_)

どうやらPostgreSQL8.1の混在が悪さしてるらしいので、PostgreSQL関連を全て削除して再インストールしたら うまくいきました。

■gisユーザの作成 WEB+DBにはgisユーザを作れと書いてあるけど、煩わしいのでpostgresユーザでw

■DB作成 テンプレートをpostgistemplate 、エンコードはUTF-8でDBを作成する。

postgres@colinux:~$ createdb -T postgistemplate -E UNICODE gisdb postgres@colinux:~$ psql -l List of databases Name | Owner | Encoding -----------------+----------+----------- gisdb | postgres | UTF8 postgistemplate | postgres | UTF8 postgres | postgres | SQL_ASCII template0 | postgres | SQL_ASCII template1 | postgres | SQL_ASCII

■データダウンロード 国土地理院基盤地図情報の閲覧・ダウンロードからJPGIS2.0形式をダウンロードできます。 ▽基盤地図情報(縮尺レベル25000) ら全都道府県を全部開いて「行政区画の境界線及び代表点」を一つずつ 選択してダウンロード(苦)

てか、47 x 2クリック・・・何だこの使いにくさは!>国交省w

▽基盤地図情報閲覧コンバートソフト JPGIS形式をPostGISに変換するコンバータをダウンロード

■基盤地図情報閲覧コンバートソフト (1) 新規プロジェクト作成 (2) 読み込むファイルにダウンロードしたzipファイルを選択して読み込み (3) コンバート > シェープファイルへの出力を選択 (4) 「行政区間25000」「直交座標系にして変換」にチェックし「9系」を選択して書き出し (5) AdmArea.shpが書き出される

■SQL変換・実行 AdmArea.shpをSJISでareas.sqlに変換し、areas.sqlをUTF-8に変換してから実行する。

postgres$ shp2pgsql -W "SJIS" -s 2451 AdmArea.shp areas > areas.sql postgres$ nkf -w --overwrite areas.sql postgres$ psql -d gisdb < areas.sql

■座標の変換

ALTER TABLE areas ADD COLUMN wgs_geom GEOMETRY; UPDATE areas SET wgs_geom = TRANSFORM(the_geom, 4326); CREATE INDEX areas_gist on areas USING GIST(wgs_geom GIST_GEOMETRY_OPS);

■実行例 ▽世田谷区に隣接した市区町村を取得 ST_INTERSECTSというストアドプロシジャが用意されている。

SELECT 行政コード,名称 FROM areas WHERE ST_INTERSECTS ( the_geom, (SELECT the_geom FROM areas WHERE 行政コード = 13112) );

すげぇw これは位置ゲームに使えそう!