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 と次元を使用する方法の例を示しています。

手順:
  1. コマンド プロンプトまたはシェル プロンプトを開きます。
  2. SQL エディタにログインし、ST_Geometry 列を登録するテーブルを含むデータベースに接続します。

    この例では、ユーザ horace がデータベース spatdat に接続しています。

    psql spatdat horace

  3. 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 権限を持っている必要があります。

  4. テーブルが正しく登録されたことを確認するために、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 列を持つテーブルでの空間インデックスの作成」をご参照ください。

関連トピック

5/25/2014