有时谓语的结果并不直观,因此您应该对某些特殊情况进行测试,以确保得到您所期望的结果。例如,要使一个几何包含另一个几何 (a.ST_Contains(b)=1
),或使一个几何位于另一个几何内部 (b.ST_Within(a)=1
),则 a 的内部和 b 的内部必须相交,且 b 的任何部分都不得与 a 的外部相交。然而,有时,您会希望一个几何被视为包含另一个几何或位于另一个几何内,但测试结果却并非如此。
对于 a.ST_Contains(b)
和 b.ST_Within(a)
,下例均返回 0(a 为红色):
情况一和情况二显而易见;紫色几何并不完全在红色正方形内。而情况三和情况四则不太明显。在这两种情况中,紫色几何仅处于红色正方形的边界上。即使紫色几何看上去在红色正方形内,ST_Contains 也认为紫色几何不在红色正方形内。
ST_Covers 和 ST_CoveredBy 是与 ST_Contains 和 ST_Within 类似的谓语。其不同之处在于:ST_Covers 和 ST_CoveredBy 不要求两个几何的内部相交。此外,ST_Covers 和 ST_CoveredBy 产生的结果通常比 ST_Contains 和 ST_Within 产生的结果更直观。
如果谓语测试针对各个情况返回的结果不同于所需结果,请考虑使用 ST_Relate 方法来指定要测试的确切关系。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |