ST_Geometry 列の登録
SQL を使用して ST_Geometry 列を持つテーブルを作成した場合、特定の空間参照と次元を使用するための列を登録できます。この方法を使えば、SQL を使用してレコードを挿入するときに、別の空間参照を使用しているレコードを誤って挿入することはありません。
PostgreSQL での ST_Geometry 列の登録
SQL で作成された PostgreSQL テーブル内に ST_Geometry 列を登録するには、st_register_spatial_column を使用します。st_register_spatial_column 関数の構文は、次のとおりです。
SELECT st_register_spatial_column (
'<database_name>',
'<schema_name>',
'<table_name>',
'<spatial_column_name>',
<srid>,
<coordinate_dimension>
);
指定する SRID は、PostgreSQL の public.sde_spatial_references テーブル内に存在する必要があります。座標ディメンションは、データが単なる X、Y 座標(2)か、X、Y、Z 座標(3)か、X、Y、Z、M 座標(4)か、X、Y、M 座標(5)かを示します。デフォルトでは、座標ディメンションを指定しない場合、データは単なる X、Y ディメンションとして登録されます。
次の手順は、PostgreSQL の ST_Geometry 列を登録して、特定の SRID と次元を使用する方法の例を示しています。
- コマンド プロンプトまたはシェル プロンプトを開きます。
-
SQL エディタにログインし、ST_Geometry 列を登録するテーブルを含むデータベースに接続します。
この例では、ユーザ horace がデータベース spatdat に接続しています。
psql spatdat horace
-
SQL プロンプトで、st_register_spatial_column 関数を呼び出して、特定の SRID と次元を使用できるようにテーブルの空間列を登録します。
ここでは、スキーマ cleo の waypoints テーブルの geo 列が 104199 の SRID および X、Y、Z 次元に登録されています。
SELECT sde.st_register_spatial_column( 'spatdat', 'cleo', 'waypoints', 'geo', 104199, 3 );
ユーザ horace が空間列を登録するには、少なくとも cleo.waypoints テーブルに対する SELECT 権限を持っている必要があります。
-
テーブルが正しく登録されたことを確認するために、st_isregistered_spatial_column および st_get_coord_dimension 関数を使用して登録情報を返すことができます。
st_isregistered_spatial_column 関数は、指定した SRID に列が登録されていれば 1(true)を返します。
SELECT sde.st_isregistered_spatial_column( 'spatdat', 'cleo', 'waypoints', 'geo', 104199 ); st_isregistered_spatial_column -------------------------------- 1
st_get_coord_dimension 関数は、テーブルが格納できる座標ディメンションを返します。
SELECT sde.st_get_coord_dimension( 'cleo', 'waypoints', 'geo', 104199 ); st_get_coord_dimension -------------------------------- xyz
SQLite での ST_Geometry 列の登録
AddGeometryColumn を使用して、SQLite のテーブルに ST_Geometry 列を追加し、特定の SRID と座標ディメンションで登録します。次に、AddGeometryColumn の構文を示します。
SELECT AddGeometryColumn (
<'main'|null>,
<table_name>,
<spatial_column_name>,
<srid>,
<geometry_type>
<coordinate_dimension>,
<'null'|'not null'>
);
SQL クライアントを使用して SQLite に接続すると、main に接続されます。main に接続している場合、main を指定するか、null を使用できます。座標ディメンションは、X、Y(2)、X、Y、Z(3)、X、Y、Z、M(4)、または X、Y、Z、M(5)です。ディメンションに X、Y または 2 を指定した場合、ジオメトリ タイプのディメンションを含める必要はありません。他の座標ディメンションを指定した場合、ジオメトリ タイプを指定するときにディメンションの情報も含める必要があります。ジオメトリ タイプまたはジオメトリ タイプのコードを入力できます。設定可能な値は次のとおりです。
ジオメトリ タイプの値 | コード |
---|---|
st_geometry または geometry | 0 |
st_point または point | 1 |
st_linestring または linestring | 2 |
st_polygon または polygon | 3 |
st_multipoint または multipoint | 4 |
st_multilinestring または multilinestring | 5 |
st_multipolygon または multipolygon | 6 |
st_geometryz または geometryz | 1000 |
st_pointz または pointz | 1001 |
st_linestringz または linestringz | 1002 |
st_polygonz または polygonz | 1003 |
st_multipointz または multipointz | 1004 |
st_multilinestringz または multilinestringz | 1005 |
st_multipolygonz または multipolygonz | 1006 |
st_geometrym または geometrym | 2000 |
st_pointm または pointm | 2001 |
st_linestringm または linestringm | 2002 |
st_polygonm または polygonm | 2003 |
st_multipointm または multipointm | 2004 |
st_multilinestringm または multilinestringm | 2005 |
st_multipolygonm または multipolygonm | 2006 |
st_geometryzm または geometryzm | 3000 |
st_pointzm または pointzm | 3001 |
st_linestringzm または linestringzm | 3002 |
st_polygonzm または polygonzm | 3003 |
st_multipointzm または multipointzm | 3004 |
st_multilinestringzm または linestringzm | 3005 |
st_multipolygonzm または multipolygonzm | 3006 |
SQLite でのテーブル作成、および AddGeometryColumn を使用した ST_Geometry 列の追加と登録の例については、「ST_Geometry 列を持つテーブルの作成」をご参照ください。
Oracle での ST_Geometry 列の登録
Oracle では、ST_Geometry 列に空間インデックスを作成することで、列に特定の空間参照を使用するよう登録します。Oracle での SQL を使用した空間インデックス作成の例については、「ST_Geometry 列を持つテーブルでの空間インデックスの作成」をご参照ください。