SQL での ST_Geometry の使用の概要
データベース管理システム(DBMS)の SQL(Structured Query Language)、データ タイプ、およびテーブル形式を使用して、ST_Geometry タイプがインストールされたジオデータベースまたはデータベースに格納された情報を処理できます。SQL は、データ定義コマンドとデータ操作コマンドをサポートするデータベース言語です。
SQL 経由でジオデータベースの情報にアクセスすれば、ジオデータベースによって管理される表形式データを外部アプリケーションから処理できます。この外部アプリケーションは、非空間データベース アプリケーションであっても、ArcObjects 以外の環境で開発されたカスタムの空間アプリケーションであっても構いません。
SQL を使用してジオデータベースにアクセスしている場合は、バージョニング、トポロジ、ネットワーク、テレイン、フィーチャリンク アノテーション、その他のクラスまたはワークスペースのエクステンションなどのジオデータベースの機能は無視されることに注意してください。一部のジオデータベース機能に必要なテーブル間の関係を維持するために、トリガやストアド プロシージャなどの DBMS 機能を使用できる場合があります。これらの機能を考慮せずにデータベースに対して SQL コマンドを実行すると(たとえば、INSERT ステートメントを実行してビジネス テーブルにレコードを追加したり、既存のフィーチャクラスに列を追加したりする)、ジオデータベース機能を無視してジオデータベース内のデータ間の関係を破壊してしまう可能性があります。
一般に、SQL を使用してジオデータベース内の空間データまたは非空間データを変更する場合は、以下の指針に従ってください。
- バージョン対応ビューと組み合わせて SQL を使用しない場合を除き、データをバージョン対応登録した後は、SQL を使用してレコードを更新しないでください。
- SQL を使用してバージョン対応登録されていないデータを更新するときは、リレーションシップ クラスやフィーチャリンク アノテーション、トポロジ、ネットワークなど、ジオデータベースの振舞いを通じてデータベース内の他のオブジェクトに影響を与える属性は変更しないでください。
- SQL ステートメントの実行後は、COMMIT または ROLLBACK ステートメントを発行して、変更内容を確実にデータベースにコミットするか取り消してください。これは、ジオデータベースのデータおよびデータベースのデータの両方に当てはまります。
ST_Geometry 格納タイプ
ST_Geometry SQL データ タイプは、IBM DB2、Informix、Oracle、および PostgreSQL のデータベースで使用されます。データベースにはジオデータベースを含めることができますが、必須ではありません。
ST_Geometry データ タイプは ArcGIS クライアントで使用でき、このデータ タイプを使用することで、サードパーティ製アプリケーションからシンプル フィーチャクラス ジオメトリに SQL でアクセスできるようになります。
ST_Geometry は、OGC および ISO SQL Multimedia Specification for Spatial を実装します。OGC については、『OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 2: SQL option, version 1.1.0』をご参照ください。ISO については、『ISO/IEC 13249-3 SQL multimedia and application packages - Part 3: Spatial』をご参照ください。
DB2 または Informix の SQL で ST_Geomery タイプを使用する方法については、IBM DB2 および Informix のマニュアルをご参照ください。Oracle および PostgreSQL の SQL で ST_Geometry タイプを使用する方法については、このセクションのトピックをご参照ください。
このヘルプで「SQL での空間タイプの使用」について説明しているセクションには、DB2 と Informix の例が記載されています。ただし、これらのデータベースにおける ST_Geometry 使用の詳細については、IBM のマニュアルをご参照ください。
空間参照 ID
ジオメトリを作成してテーブルに挿入するには、有効な空間参照 ID(SRID)が必要です。Oracle の空間タイプの場合、SRID は ST_SPATIAL_REFERENCES テーブルに存在し、かつ同一の SRID が SDE.SPATIAL_REFERENCES テーブルにも存在する必要があります。PostgreSQL の空間タイプの場合、SRID は public.sde_spatial_references テーブルに存在する必要があります。ArcGIS 10.1 以降、これらのテーブルには、空間参照が事前に入力されています。
テーブルに存在しないカスタム空間参照を使用する必要がある場合、最も簡単な方法は、ArcGIS for Desktop を使用して、目的の空間参照値を持つフィーチャクラスを読み込むか作成することです。この時、作成するフィーチャクラスには、ST_Geometry 格納を使用します。たとえば使用したい空間参照情報を持つ空のフィーチャクラスをテンプレートとして作成します。こうすると、Oracle の場合は SDE.SPATIAL_REFERENCES テーブルと ST_SPATIAL_REFERENCES テーブルに、PostgreSQL の場合は public.sde_spatial_references テーブルに SRID のレコードが作成されます。作成したレイヤに割り当てられた SRID を知るには、LAYERS(Oracle)テーブルまたは sde_layers(PostgreSQL)テーブルを検索します。SQL を使用して空間テーブルを作成してデータを挿入するときは、この SRID を使用できます。
このヘルプに記載されたサンプルを使用できるように、ST_SPATIAL_REFERENCES テーブルと sde_spatial_references テーブルには、不明な空間参照を表すレコードが追加されています。このレコードの SRID は 0 です。ヘルプの例ではこの SRID を使用できます。これは正式な SRID ではありません。サンプルの SQL コードを実行することを目的として用意されたものです。製品データではこの SRID を使用しないことを強くお勧めします。
サンプルの実行時に、データベースにすでに存在する別の SRID 値を使用する場合は、その SRID 値の空間参照を反映するように、サンプルの座標を変更する必要があります。
SQL を使用して ST_SPATIAL_REFERENCES または sde_spatial_references テーブルに空間参照を追加する場合は、「SQL を使用した空間参照の作成」をご参照ください。