ST_Geometry および ST_Raster タイプとともに使用される SQL 関数の概要
SQL(structured query language)は、データベース管理システム(DBMS)に格納されたデータを選択し操作するときに使用される標準化された言語です。ArcSDE は Oracle、PostgreSQL、Microsoft SQL Server のジオデータベースに、専用の SQL 関数とタイプをインストールします。SQL とこれらの関数およびタイプを使用して、データのクエリと編集を行えます。
このヘルプには、Oracle と PostgreSQL の ArcSDE ジオデータベースにおいて ST_Geometry 空間タイプを使用して実装された各関数と、Oracle、PostgreSQL、SQL Server の ArcSDE のジオデータベースにおいて ST_Raster タイプを使用して実装された各関数のトピックが記載されています。これらの関数は、ArcSDE 管理者(通常は sde ユーザ)のスキーマに格納され、ジオメトリとラスタを処理しその情報を取得する捜査を可能にします。
関数のトピックは次のような構成になっています。
-
定義
関数の説明
-
構文
関数で使用する正しい構文
関係演算子の場合は、パラメータを指定する順序が重要になります。最初のパラメータでは選択対象のテーブルを指定し、2 つめのパラメータではフィルタとして使用するテーブルを指定します。
-
リターンのタイプ
関数を実行したときに返されるデータのタイプ
-
例
関数の使用例
このセクションのサンプルは、作成したテーブルに空間インデックスを構築しません。空間インデックスを作成する場合は、「ST_Geometry 列を持つテーブルでの空間インデックスの作成」をご参照ください。
ST_Geometry に関する IBM の関数リファレンスについては、『IBM Informix Spatial DataBlade Module User's Guide』の第 8 章「SQL Functions」、および『IBM DB2 Spatial Extender and Geodetic Extender User's Guide and Reference』の第 22 章「Spatial functions: Categories and uses」と第 23 章「Spatial functions: Syntax and parameters」をご参照ください。
空間参照 ID
ジオメトリを作成してテーブルに挿入するには、有効な空間参照 ID(SRID)が必要です。Oracle の空間タイプの場合、SRID は ST_SPATIAL_REFERENCES テーブルに存在し、かつ同一の SRID が SDE.SPATIAL_REFERENCES テーブルにも存在する必要があります。PostgreSQL の空間タイプの場合、SRID は public.sde_spatial_references テーブルに存在する必要があります。
SRID を作成する最も簡単な方法は、ArcGIS 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 を使用しないことを強くお勧めします。
0 という SRID は、ArcGIS 9.3 以降、Oracle の ArcSDE ジオデータベースに存在しています。
サンプルの実行時に、データベースにすでに存在する別の SRID 値を使用する場合は、その SRID 値の空間参照を反映するように、サンプルの座標を変更する必要があります。
SQL を使用して ST_SPATIAL_REFERENCES または sde_spatial_references テーブルに空間参照を追加する場合は、「SQL を使用した空間参照の作成」をご参照ください。
SQL 関数の一覧
以下のリンクをクリックすると、Oracle と PostgreSQL の ST_Geometry および、Oracle、PostgreSQL、SQL Server の ST_Raster を操作する関数の説明にジャンプします。
ArcSDE 9.3 以降、新しくインストールした ArcSDE for Oracle で ST_Geometry 関数を使用するときは、関数と演算子を sde. で修飾する必要があります。たとえば、ST_Buffer は sde.ST_Buffer と指定します。sde. を追加すると、その関数が sde ユーザのスキーマに格納されていることが明示されます。これは、関数との対応付けのために使用されていたパブリック シノニムが Oracle でサポートされなくなったためです。 アップグレードした ArcSDE for Oracle 10g または Oracle 9i、および ArcSDE for PostgreSQL の場合、この修飾はオプションですが、修飾子を付加することを推奨します。
ST_Raster 関数を使用するときは、どのデータベースでも ArcSDE 管理者のスキーマで関数を修飾する必要があります。ほとんどの場合、これは sde. になります。ただし、SQL Server データベースの場合は、管理者スキーマ名として dbo. で修飾する場合があります。
ST_Curve(Oracle のみ) |
ST_GeomCollFromShape(PostgreSQL のみ) |
ST_GeomCollFromWKB(PostgreSQL のみ) |
ST_GeomFromShape(PostgreSQL のみ) |
ST_GeomFromText(Oracle のみ) |
ST_LineFromShape(PostgreSQL のみ) |
ST_LineFromText(Oracle のみ) |
ST_MLineFromShape(PostgreSQL のみ) |
ST_MLineFromText(Oracle のみ) |
ST_MPointFromShape(PostgreSQL のみ) |
ST_MpointFromText(Oracle のみ) |
ST_MpolyFromText(Oracle のみ) |
ST_MultiCurve(Oracle のみ) |
ST_MultiSurface(Oracle のみ) |
ST_PointFromShape(PostgreSQL のみ) |
ST_PointFromText(Oracle のみ) |
ST_PolyFromShape(PostgreSQL のみ) |
ST_PolyFromText(Oracle のみ) |
ST_Surface(Oracle のみ) |
ST_Entity(Oracle のみ) |
ST_GeoSize(PostgreSQL のみ) |
ST_Is3d(Oracle のみ) |
ST_IsMeasured(Oracle のみ) |
ST_EnvIntersects(Oracle のみ) |
ST_Aggr_ConvexHull(Oracle のみ) |
ST_Aggr_Intersection(Oracle のみ) |
ST_Aggr_Union(Oracle のみ) |
ST_Equalsrs(PostgreSQL のみ) |
ST_Geometry 以外の、たとえば PostGIS ジオメトリ タイプや Oracle SDO_Geometry タイプのような空間タイプに使用される関数については、それぞれ PostGIS または Oracle Spatial のマニュアルをご参照ください。PostGIS のマニュアルは www.postgis.org にあります。Oracle のマニュアルは Oracle Web サイトにあります。
関数の名前は DBMS の実装によって異なります。Oracle と SQL Server の場合、関数は ST_Raster または ST_PixelData オブジェクトのメンバ メソッドです。PostgreSQL の場合、関数は PL/SQL パッケージ レベルで実装された SQL 関数です。SQL Server で関数を使用するときは、関数名の大文字/小文字はここで示したとおりに指定する必要があります。Oracle または PostgreSQL で使用する場合、すべて小文字でも、すべて大文字でも、大文字小文字を混在させても問題ありません。
次の表は、同等の関数を示しています。
Oracle と SQL Server の関数 | PostgreSQL の関数 |
---|---|
ST_PixelData.getValueByLoc(SQL Server のみ) | |
setvalue | |
ST_Raster.getValueByLoc(SQL Server のみ) | |
ST_Raster_Util.checkLibraryVersion(Oracle のみ) | |
ST_Raster_Util.getLibraryVersion(Oracle のみ) | |