OpenGIS標準の利用

OpenGISの"Simple Features Specification for SQL"はGISオブジェクトのタイプとそれらを扱うために必要な関数,メタデータテーブルの集合を定義します.メタデータの一貫性の生き残りを確実にするため,空間カラムの生成や削除のような操作はOpenGISによって定義された特別な手続きをとおして実行されます.

2つのOpenGISメタデータテーブルがあります:SPATIAL_REF_SYSとGEOMETRY_COLUMNSです.SPATIAL_REF_SYSテーブルは空間データベースで使われる座標系の数字IDと文字による記述を保持します.

The SPATIAL_REF_SYS Table

SPATIAL_REF_SYSテーブルの定義は以下のようになります:

  CREATE TABLE SPATIAL_REF_SYS ( 
    SRID INTEGER NOT NULL PRIMARY KEY, 
    AUTH_NAME VARCHAR(256), 
    AUTH_SRID INTEGER, 
    SRTEXT VARCHAR(2048), 
    PROJ4TEXT VARCHAR(2048)
  )

SPATIAL_REF_SYSのカラムの意味は以下のとおりです:

SRID

データベース中で空間参照系を一意に識別する整数です.

AUTH_NAME

この参照系を表す標準もしくは標準団体の名前です.たとえば"EPSG" は有効なAUTH_NAMEでしょう.

AUTH_SRID

AUTH_NAMEに記述されたAuthorityによって定義された空間参照系のIDです.EPSGの場合,これはEPSGのprojectionコードににあたるでしょう.

SRTEXT

空間参照系のWell-Known Text表現です.WKT SRS表現の例は以下のようになります:

  PROJCS["NAD83 / UTM Zone 10N", 
    GEOGCS["NAD83",
  			 DATUM["North_American_Datum_1983", 
        SPHEROID["GRS 1980",6378137,298.257222101]
  				], 
      PRIMEM["Greenwich",0], 
      UNIT["degree",0.0174532925199433] 
    ],
  		PROJECTION["Transverse_Mercator"], 
    PARAMETER["latitude_of_origin",0],
  	 PARAMETER["central_meridian",-123], 
    PARAMETER["scale_factor",0.9996],
  	 PARAMETER["false_easting",500000], 
    PARAMETER["false_northing",0],
  		UNIT["metre",1] 
  ]

EPSGのprojectionコードのリストとWKT表現の対応についてはhttp://www.opengis.org/techno/interop/EPSG2WKT.TXTを参照してください.一般的なWKTの議論については,http://www.opengis.org/techno/specs.htmのOpenGIS「座標変換サービス実現仕様("Coordinate Transformation Services Implementation Specification")」を参照してください.

PROJ4TEXT

PostGISは座標系変換機能を提供するためにProj4ライブラリを用います.PROJ4TEXTカラムは個々のSRIDのProj4座標定義文字列を含みます.たとえば:

  +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m

これについての詳細な情報は,http://www.remotesensing.org/projのProj4のWebサイトを参照してください.spatial_ref_sys.sqlファイルは,全てのEPSGのprojectionのためのSRTEXTPROJ4TEXT定義の両方を含みます.

GEOMETRY_COLUMNSテーブル

The GEOMETRY_COLUMNSテーブルの定義は以下のとおりです:

  CREATE TABLE GEOMETRY_COLUMNS ( 
    F_TABLE_CATALOG VARCHAR(256) NOT NULL, 
    F_TABLE_SCHEMA VARCHAR(256) NOT NULL, 
    F_TABLE_NAME VARCHAR(256) NOT NULL, 
    F_GEOMETRY_COLUMN VARCHAR(256) NOT NULL,
  		COORD_DIMENSION INTEGER NOT NULL, 
    SRID INTEGER NOT NULL, 
    TYPE VARCHAR(30) NOT NULL 
  )

カラムの意味は以下のとおりです:

F_TABLE_CATALOG, F_TABLE_SCHEMA, F_TABLE_NAME

ジオメトリカラムを含む図形テーブルの完全な名前です.用語"catalog"と"schema"はOracleっぽいことに注してください.カラムは左空白(右寄せ?)なので,PostgreSQLで"catalog"に相当するものはありません.--"schema"についてはデータベースの名前で使われています.

F_GEOMETRY_COLUMN

図形テーブルのジオメトリカラムの名前です.

COORD_DIMENSION

カラムの空間の次元(2次元もしくは3次元)です.

SRID

このテーブルにおける地理座標のための空間参照系のIDです.それはSPATIAL_REF_SYSを参照する外部キーです.

TYPE

空間オブジェクトのタイプです.空間カラムを単一のタイプに制限するため,以下のうちの一つを使ってください:POINT, LINESTRING, POLYGON, MULTPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION.異質(タイプの混ざった)集合については,タイプとして"GEOMETRY"を使うことができます.

注意:この属性は(おそらく)OpenGISの仕様の一部ではないが,タイプの均一性を確保するために必要となります.

空間テーブルの生成

空間データをもつテーブルの生成は2つのステージによって行われます:

テーブルを生成し,空間カラムを追加するために使われるSQLの例はこうなります:

  CREATE TABLE PARKS ( PARK_ID int4, PARK_NAME varchar(128), PARK_DATE date, PARK_TYPE varchar(2) );
  SELECT AddGeometryColumn('parks_db', 'parks', 'park_geom', 128, 'MULTIPOLYGON', 2 );

一般的な"geometry"型と-1の未定義のSRIDの値を使った例はこのようになります:

  CREATE TABLE ROADS ( ROAD_ID int4, ROAD_NAME varchar(128) ); 
  SELECT AddGeometryColumn( 'roads_db', 'roads', 'roads_geom',	-1, 'GEOMETRY', 3 );