OpenGISの"Simple Features Specification for SQL"はGISオブジェクトのタイプとそれらを扱うために必要な関数,メタデータテーブルの集合を定義します.メタデータの一貫性の生き残りを確実にするため,空間カラムの生成や削除のような操作はOpenGISによって定義された特別な手続きをとおして実行されます.
2つのOpenGISメタデータテーブルがあります:SPATIAL_REF_SYSとGEOMETRY_COLUMNSです.SPATIAL_REF_SYSテーブルは空間データベースで使われる座標系の数字IDと文字による記述を保持します.
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のカラムの意味は以下のとおりです:
データベース中で空間参照系を一意に識別する整数です.
この参照系を表す標準もしくは標準団体の名前です.たとえば"EPSG" は有効なAUTH_NAMEでしょう.
AUTH_NAMEに記述されたAuthorityによって定義された空間参照系のIDです.EPSGの場合,これはEPSGのprojectionコードににあたるでしょう.
空間参照系の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")」を参照してください.
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のためのSRTEXTとPROJ4TEXT定義の両方を含みます.
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 ) |
カラムの意味は以下のとおりです:
ジオメトリカラムを含む図形テーブルの完全な名前です.用語"catalog"と"schema"はOracleっぽいことに注してください.カラムは左空白(右寄せ?)なので,PostgreSQLで"catalog"に相当するものはありません.--"schema"についてはデータベースの名前で使われています.
図形テーブルのジオメトリカラムの名前です.
カラムの空間の次元(2次元もしくは3次元)です.
このテーブルにおける地理座標のための空間参照系のIDです.それはSPATIAL_REF_SYSを参照する外部キーです.
空間オブジェクトのタイプです.空間カラムを単一のタイプに制限するため,以下のうちの一つを使ってください:POINT, LINESTRING, POLYGON, MULTPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION.異質(タイプの混ざった)集合については,タイプとして"GEOMETRY"を使うことができます.
注意:この属性は(おそらく)OpenGISの仕様の一部ではないが,タイプの均一性を確保するために必要となります.
空間データをもつテーブルの生成は2つのステージによって行われます:
通常の空間データを持たないテーブルの生成
例えば: CREATE TABLE ROADS_GEOM ( ID int4, NAME varchar(25) )
OpenGISの"AddGeometryColumn"関数を使った空間カラムの追加.書式は:AddGeometryColumn(<db_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>).
例えば: SELECT AddGeometryColumn('roads_db', 'roads_geom', 'geom', 423, 'LINESTRING', 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 ); |