以前、同様の内容を記載していますが、先日、postgisをosxへinstallしたついでにgisデータのインポート手順を改めて書き留めておきます。
http://d.hatena.ne.jp/end0tknr/20080830/1220079398
公開されているGISデータ
GISデータは様々な所から入手できますが、今回は、国土交通省 国土計画局が提供している海岸線データをpostgisへインポートします。
国土交通省 国土計画局
http://nlftp.mlit.go.jp/ksj/index.html
http://nlftp.mlit.go.jp/ksj/jpgis/jpgis_tool.html shape形式への変換ツール
国土交通省 国土地理院
http://fgd.gsi.go.jp/download/
産業技術総合研究所(活断層データベース)
http://riodb02.ibase.aist.go.jp/activefault/index.html
政府統計の総合窓口
http://www.e-stat.go.jp/SG1/estat/eStatTopPortal.do
xml→shape形式への変換
http://nlftp.mlit.go.jp/ksj/jpgis/jpgis_tool.html
国土計画局ではxml形式でgisデータを公開していますが、shape形式への変換ツール(KsjTool)も提供しています。
KsjToolで先程の.xmlを変換すると、次の3個のファイルが作成されますが、これらのファイルをshape形式と言うようです。
ファイル名 | 内容 |
---|---|
.dbf | 図形の座標が保存 |
.shp | 属性の情報が保存 |
.shx | shpの図形とdbfの属性の対応関係が保存 |
※国土計画局では、「暫定処置として、KsjToolを提供」としているので、 KsjToolはダウンロードした上で、ローカル環境にバックアップした方が良いかもしれません。
shp2pgsql により、shape→sql変換
postgisへgisデータをインポートするには、更にshp2pgsqlでsqlに変換する必要があります。
まず、shp2pgsql -p でcreate table 文を作成してください。
$ /usr/local/pgsql/bin/shp2pgsql -p \ ~/tmp/kaigan_shp/C23-06_01_CP01 kaigan > ~/tmp/kaigan_sql/0.sql
create tableの内容
SET CLIENT_ENCODING TO UTF8; SET STANDARD_CONFORMING_STRINGS TO ON; BEGIN; CREATE TABLE "kaigan" (gid serial PRIMARY KEY, "aac" varchar(5), "sln" varchar(1), "asl" varchar(1), "can" varchar(4), "nca" varchar(26), "aca" varchar(1), "nac" varchar(10), "dca" varchar(1), "df1" varchar(1), "df2" varchar(1), "bbn" varchar(1), "rim" varchar(5)); SELECT AddGeometryColumn('','kaigan','the_geom','-1','MULTILINESTRING',2); COMMIT;
次にshp2pgsql -a でinsert 文を作成してください。
$ /usr/local/pgsql/bin/shp2pgsql -W cp932 -a \ ~/tmp/kaigan_shp/C23-06_01_CP01 kaigan > ~/tmp/kaigan_sql/1.sql
insert intoの内容(抜粋)
SET CLIENT_ENCODING TO UTF8; SET STANDARD_CONFORMING_STRINGS TO ON; BEGIN; INSERT INTO "kaigan" ("aac","sln","asl","can","nca","aca","nac","dca", "df1","df2","bbn","rim",the_geom) VALUES ('8202',NULL,'6',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'false', '0105000000010000000102000000240100005EEDCD14EF9661402869C975A558...
国土計画局で提供しているgisデータはshift jisで提供されていますが、shp2pgsql -a の際、エンコーディング(-W cp932)を指定しない場合、次のようなエラーが発生します。
$ /usr/local/pgsql/bin/shp2pgsql -a \ ~/tmp/kaigan_shp/C23-06_01_CP01 kaigan > ~/tmp/kaigan_sql/1.sql Shapefile type: Arc Postgis type: MULTILINESTRING[2] Unable to convert field value "?P?K???`?@?P?K??" to UTF-8: iconv reports "Illegal byte sequence"
gisデータのインポート実行
sql形式への変換まで完了すれば、後は次のようにpsqlコマンドでgisデータをインポートできます。
$ /usr/local/pgsql/bin/psql -U postgres kaigan < ~/tmp/kaigan_sql/0.sql $ /usr/local/pgsql/bin/psql -U postgres kaigan < ~/tmp/kaigan_sql/1.sql :
mapserverでインポート結果の確認
gisデータのインポート結果は、mapserverで作成した画像ファイルで確認すると簡単だと思います。
MAP SIZE 800 800 #画像size EXTENT 128 33 150 44 #出力範囲の座標 STATUS ON #地図を表示するか UNITS DD #地図の単位(DD は緯度経度) IMAGECOLOR 255 255 255 #背景色R G B IMAGETYPE PNG #地図画像を保存する形式 LAYER NAME "kaigan" CONNECTIONTYPE POSTGIS CONNECTION "user=postgres password='' dbname=kaigan host=localhost" DATA "the_geom FROM kaigan" #select文 TYPE LINE STATUS ON CLASS COLOR 0 0 0 END END END
mapfileを上記の様に記述し、mapserverのshp2imgを実行すると、次のpngファイルが作成されます。
$ ~/local/mapserver-5.6.3/shp2img -m kaigan.map -o kaigan.png