常见问题

常见问题解答:在 Oracle 中执行带有附加空间关系运算符的 SQL 语句时,是否需要包含 st_envintersects 运算符?

Last Published: January 13, 2021

答案

注: ArcSDE 软件(包括应用程序服务器、命令工具以及带有 C 和 Java API 的 SDK)在 ArcGIS 10.2.2 中已弃用,不再进行分发。

当使用空间关系运算符(例如 st_intersects、st_within、st_crosses 等)编写 SQL 语句时,无需包含附加空间运算符 st_envintersects 作为过滤器以标识空间关系运算符的候选几何。 如果在查询中包含 st_envintersects 运算符,则该运算符是多余的,并且会给查询增加不必要的计算成本。 如果使用空间索引,则在执行空间关系比较之前,空间关系运算符将首先通过将输入几何包络用作主要过滤器来过滤候选形状。

以下 SQL 示例将演示如何将 st_envintersects 运算符用作谓词过滤器及用于子查询中,但是在这两种情况下该运算符都不是必需项。 该 SQL 语句的目标是标识邻域中的所有宗地质心。

第一个示例将添加 st_envintersects 操作符作为谓词过滤器。 谓词过滤器对于 st_within 运算符是多余的,因为在执行关系比较之前,st_within 运算符将使用输入邻域形状的包络来标识所有候选 parcel_cent 形状。

代码: SQL> SELECT a.owner, a.address 2 FROM parcel_cent a, neighborhoods b 3 WHERE b.name = 'SOUTHGATE' 4 AND sde.st_within(a.shape,b.shape) = 1 5 AND sde.st_envintersects(a.shape,b.shape) = 1;

第二个示例将在子查询中应用 st_envintersects 过滤器,以返回一组候选几何和 ObjectID 值,作为包含空间关系运算符的主查询的过滤器。

代码: SQL> SELECT owner, address 2 FROM parcel_cent 3 WHERE objectid IN 4 (SELECT objectid 5 FROM parcel_cent a, neighborhoods b 6 WHERE b.name = 'SOUTHGATE' 7 AND sde.st_envintersects(a.shape,b.shape) = 1);

以上两个示例都会导致查询消耗更多的计算资源,而未提高查询的性能。 执行这种性质的查询的正确 SQL 语法是指定谓词过滤器和空间关系运算符。

代码: SQL> SELECT a.owner, a.address 2 FROM parcel_cent a, neighborhoods b 3 WHERE b.name = 'SOUTHGATE' 4 AND sde.st_within(a.shape,b.shape) = 1;

文章 ID:000010468

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

相关信息

发现关于本主题的更多内容