ST_Geometry タイプにおける SQL 実装の違い
空間 SQL(ST_Geometry)の実装は、Informix、DB2、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)) );
-
修飾関数
Oracle のエンタープライズ ジオデータベース内のテーブルに対して SQL を実行するとき、ST_Geometry 関数をスキーマ名で修飾する必要があります。これは、ArcGIS 9.3 以降のリリースで作成されたすべての Oracle ジオデータベースに適用されます。
DB2、Informix、PostgreSQL の ST_Geometry 列を使用したテーブルに対して SQL を実行する場合も ST_Geometry 関数を修飾することができますが、修飾しなくても構いません。