PostGISでサポートされるGISオブジェクトは,OpenGISコンソーシアム(OGC)で定義されている"Simple Features"です.現在PostGISは図形と投影APIをサポートしますが,OGCの"Simple Features for SQL"仕様にあるさまざまな比較や畳み込み(convolution)の演算はサポートされないことに注意してください.
図形のテキスト表現の例は以下のとおりです:
POINT(0 0 0)
LINESTRING(0 0,1 1,1 2)
POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))
MULTIPOINT(0 0 0,1 2 1)
MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))
MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))
GEOMETRYCOLLECTION(POINT(2 3 9),LINESTRING((2 3 4,3 4 5)))
上の例で,2次元と3次元の両方を座標を持った図形があることに注意してください.PostGISは2次元と3次元の座標をサポートします.--インサートするときに2次元で図形を記述すると,抽出するときにデータベースは2次元で図形を返します.特殊な座標次元表現への変換についての情報はforce_2d()関数とforce_3d()関数の節を見てください.
OpenGISの仕様は2つの空間オブジェクトの表現方法の規格を定義しています:Well-Known Text (WKT)フォーム(前節で示したものです)とWell-Known Binary (WKB)フォームです.WKTとWKBは両方ともオブジェクトのタイプとオブジェクトの外形座標の情報を含みます.
しかしながら,OpenGISの仕様は,空間参照システム識別子(SRID:spatial referencing sysytem identifier)を含む空間オブジェクトの内部格納フォーマットも要求します.SRIDはデータベースに格納するための空間オブジェクトを生成するときに必要になります.たとえば,空間オブジェクトを生成してインサートするときの正しいインサートステートメントは次のようになるでしょう:
INSERT INTO SPATIALTABLE ( THE_GEOM, THE_NAME ) VALUES ( GeometryFromText('POINT(-126.4 45.32)', 312), 'A Place' ) |
"GeometryFromText"関数がSRID番号を要求していることに注意してください.
PostgreSQLにおける空間オブジェクトの"canonical form"は,オブジェクトを構成するために必要な全ての情報をふくんだテキスト表現です.それは,OpenGISの標準フォームとは異なり,タイプと座標とSRIDの情報を含みます.canonicalフォームはSELECTクエリから返される既定のフォームです.以下の例はOGC標準とPOstGISのcanonicalフォームの違いを示します:
db=> SELECT AsText(geom) AS OGCGeom FROM thetable; OGCGeom ------------------------------------------------- LINESTRING(-123.741378393049 48.9124018962261,-123.741587115639 48.9123981907507) (1 row) db=> SELECT geom AS PostGISGeom FROM thetable; PostGISGeom ------------------------------------------------- SRID=123;LINESTRING(-123.741378393049 48.9124018962261,-123.741587115639 48.9123981907507) (1 row) |