ST_Geometry 类型的 SQL 实现差异
Informix、DB2、Oracle 和 PostgreSQL 的空间 SQL (ST_Geometry) 实现差异很小。Esri 是 IBM 数据库管理系统 (DBMS) 产品中扩展空间 SQL 的合作伙伴和共同开放商,双方在良好的合作环境中精诚协作,确保开放地理空间联盟 (OGC) 制定的标准达最大适用范围。
但是,有三个明显的例外,虽然它们在本质上没有违反 OGC 标准,但却是 DBMS 本身实现的次要特质。
- 谓词值
Informix 和 PostgreSQL 的谓词函数返回 t 表示“真”,返回 f 表示“假”,而 DB2 和 Oracle 的空间类型用 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)) );
- 限定函数
对 Oracle 中企业级地理数据库中的表执行 SQL 语句时,必须用方案名称限定 ST_Geometry 函数。对于在 ArcGIS 9.3 或后续版本中创建的所有 Oracle 地理数据库均是如此。
对 DB2、Informix 或 PostgreSQL 中具有 ST_Geometry 列的表执行 SQL 语句时,可以限定 ST_Geometry 函数,但并非必需如此。