ST_Geometry タイプにおける SQL 実装の違い
Informix、DB2 の空間 SQL の実装と、Oracle や PostgreSQL の空間タイプの実装の間にはほとんど違いがありません。Esri は IBM DBMS(データベース管理システム)製品における拡張空間 SQL のパートナー兼共同開発者であり、OGC(Open Geospatial Consortium)により決定された標準を最大限まで適用できるよう、協調的な環境で開発を行ってきました。
ただし、3 つの顕著な例外があります。いずれも実質的に OGC 標準に違反するものではなく、DBMS 自体の実装上の軽微な特異性にすぎません。
-
述語値
Informix と PostgreSQL の述語関数は true の場合は t を、false の場合は f を返しますが、DB2 と Oracle の空間タイプの場合は、true の場合は 1 が false の場合は 0 が返されます。次の Informix SQL の例の場合、SELECT ステートメントは、建物のフットプリントを包含した建築用地について ST_Contains 関数が t を返した建物 ID だけを返します。
select bf.building_id "Building id" from buildingfootprints bf, lots where st_contains(lot,footprint) = 't';
select bf.building_id "Building id" from buildingfootprints bf, lots where sde.st_contains(lot,footprint) = 1;
-
SRID 入力
DB2 の Well-Known Text(WKT)、Well-Known Binary(WKB)、および E シェープ表現については、空間参照 ID(SRID)を coordref オブジェクトの SRID メソッドで入力します。Informix、Oracle および PostgreSQL の空間タイプの場合は、SRID 値を直接入力します。この例では、1 という SRID が Informix linefromtext 関数に直接入力されています。
insert into linestring_test values ( linefromtext('linestring(10.01 20.03, 20.94 21.34, 35.93 19.04)', 1) );
insert into linestring_test values ( linefromtext('linestring(10.01 20.03, 20.94 21.34, 35.93 19.04)',coordref()..srid(1)) );
-
修飾関数
SQL 関数はスキーマ名で修飾することができます。たとえば sde.ST_Buffer のように修飾します。これはデータベース管理システムにある、ST_Geometry 列をもつテーブルに対して SQL を 実行するときに行います。ただし、Oracle データベースのテーブルの場合には、関数を必ずスキーマ名で修飾する必要があります。これは、ArcGIS 9.3 以降のリリースで新たに作成された すべての ArcSDE for Oracle ジオデータベースに適用されます。