PostGISでGeoなINSERT

PostGISで地物をINSERTしてみます。

準備

テスト用にデータベースを用意しておきます。
詳細はこちら

1
2
3
$ sudo su - postgres
$ createdb test
$ psql -d test
1
2
3
4
5
6
7
8
test=# create extension Postgis;
CREATE EXTENSION
test=# SELECT Postgis_full_version() ;
postgis_full_version
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="2.1.5 r13152" GEOS="3.4.2-CAPI-1.8.2 r3921" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.9.2, released 2012/10/08" LIBXML="2.7.6" LIBJSON="UNKNOWN" RASTER
(1 row)

TABLE作成

TABLEを作成します。

GEOMETRYの種類は点・線・面の3種類なので、3つテーブルを用意します。

図形タイプと、SRIDを指定します。
SRIDについてはこちらを参照

今回は 4326(WGS84、地理座標系)にします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
test=# CREATE TABLE sample_point (
test(# id SERIAL PRIMARY KEY
test(# , name text
test(# , geom GEOMETRY (POINT , 4326)
test(# );
CREATE TABLE
test=#
test=#
test=# CREATE TABLE sample_line (
test(# id SERIAL PRIMARY KEY
test(# , name TEXT
test(# , geom GEOMETRY (LINESTRING , 4326)
test(# );
CREATE TABLE
test=#
test=#
test=# CREATE TABLE sample_polygon (
test(# id SERIAL PRIMARY KEY
test(# , name TEXT
test(# , geom GEOMETRY (POLYGON , 4326)
test(# );
CREATE TABLE
test=#

INSERT

データをINSERTしてみます。

GEOMETORY型はバイナリなので、
ST_GeomFromTextを使って、INSERTします。

緯度経度はスペースで区切って、空間参照系を指定します。

まずはをINSERTしてみます。

1
2
3
test=# INSERT INTO sample_point(name,geom)
test-# VALUES ('point1',ST_GeomFromText('POINT(35.67 139.75)',4326));
INSERT 0 1

を指定するときは、緯度経度をカンマで区切ります。

1
2
3
test=# INSERT INTO sample_line(name,geom)
test-# VALUES ('line1',ST_GeomFromText('LINESTRING(35.67 139.75,35.67 139.755,35.675 139.755 )',4326));
INSERT 0 1

を指定するときは、緯度経度の最初と最後を同じにします。

1
2
3
test=# INSERT INTO sample_polygon(name,geom)
test-# VALUES ('polygon1',ST_GeomFromText('POLYGON((35.68 139.76,35.686 139.76,35.686 139.766,35.68 139.766 ,35.68 139.76 ))',4326));
INSERT 0 1

本当にINSERTできてるか、QGISで確認するとこんな感じです。
方法はこちらを参照

QGIS