ST_Geometry 类型的 SQL 实现差异
Informix、DB2 的空间 SQL 实现和 Oracle 或 PostgreSQL 的空间类型基本相同。ESRI 是 IBM 数据库管理系统 (DBMS) 产品中扩展空间 SQL 的合作伙伴和共同开放商,双方在良好的合作环境中精诚协作,确保开放地理空间联盟 (OGC) 制定的标准达最大适用范围。
但是,有三个明显的例外,虽然它们在本质上没有违反 OGC 标准,但却是 DBMS 本身实现的次要特质。
- 谓词值
Informix 和 PostgreSQL 的谓词函数返回 t 表示“真”,返回 f 表示“假”,而 Oracle 的 DB2 和空间类型用 1 表示“真”,用 0 表示“假”。在本 Informix SQL 示例中,当 building lots 包含 building footprints 时,如果 ST_Contains 函数返回 t,select 语句才返回 building 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 中,对于可识别文本 (WKT) 表示、熟知二进制 (WKB) 表示和 ESRI 形状表示,空间参考 ID (SRID) 通过 coordref 对象的 srid 方法输入。对于 Informix 和 Oracle 与 PostgreSQL 的空间类型,SRID 值可直接输入。在本示例中,SRID 值 1 是直接输入 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 或后续版本中新创建的所有 Oracle ArcSDE 地理数据库均是如此。