4 空间关系运算
4.1 IRelationalOperator
4.1.1 基本接口
关系运算符比较两个几何,然后返回一个布尔值,指示是否存在所需的关系。一些关系要求输入几何形状具有相同的尺寸,而其他关系则具有更灵活的尺寸约束。大多数预定义的关系运算符是互斥的Clementini运算符。
4.1.2 Clementini 空间关系
Clementini 位于以及 Clementini 包含分别指的是“位于”和“包含”空间关系,以下文献对此类空间关系进行了定义:Clementini, Eliseo, Paolino Di Felice, and Peter van Oosterom, "A Small Set of Formal Topological Relationships Suitable for End-User Interaction," Proceedings of the Third International Symposium on Advances in Spatial Databases, 277–295, June 23–25, 1993.
更为详尽的内容参考链接:
“按位置选择”图形示例
三种 "包含" 空间关系之比较
边界定义:对于线来说,边界是两个端点;而对于面来说,边界即边。
包含 - 在输入要素图层中选择满足以下条件的要素:包含选择的要素图层中的要素。选择的要素可位于输入要素图层的内部,也可位于输入要素图层的边界上。
完全包含 - 在输入要素图层中选择满足以下条件的要素:包含选择的要素图层中的要素且该要素不与输入要素图层的边界相交。
Clementini 包含 - 其结果与包含相同,唯一的区别在于:如果选择的要素图层中的要素完全处于输入要素图层的边界上,即所包含要素的任何部分均不位于输入要素图层中要素的内部,将不会选择该输入要素。Clementini 假定点的边界始终为空,线的边界为端点。
对点和多点输入使用包含和包含 (Clementini) 会产生相同的结果,并且选择的要素为点或多点。
三种 "位于" 空间关系之比较
位于 - 在输入要素图层中选择满足以下条件的要素:位于或包含在选择的要素图层中的要素内。
完全位于 - 生成结果与位于的结果相同,但输入要素图层中的要素与选择的要素图层中的要素的边界相交时则例外,此时将不选择该要素。
Clementini 位于 - 其结果与位于的结果相同,但输入要素图层中的要素完全位于选择的要素图层中的要素边界上时则例外。Clementini 假定点的边界始终为空,线的边界为端点。
4.2 IProximityOperator
可与ReturnDistance一起使用的几何组合为:
点:点,多点,包络,折线,多边形,线,圆弧,椭圆弧,椭圆弧,贝塞尔曲线。
多点:点,多点,信封,折线,多边形。
包络:点,多点,包络,线,CircularArc,EllipticArc,BezierCurve,PolyLine,Polygon。
折线:点,多点,信封,折线,多边形。
多边形:点,多点,信封,折线,多边形。
线:点,包络,线,圆弧,椭圆弧,贝塞尔曲线。
CircularArc:点,包络,线,CircularArc,EllipticArc(尚未实现),BezierCurve。
EllipticArc:点,包络,线,圆弧(尚未实现),EllipticArc(尚未实现),BezierCurve(尚未实现)。
BezierCurve:点,包络,线,CircularArc,EllipticArc(尚未实现),BezierCurve。
注意:要获取线段(直线,圆弧,椭圆线,贝塞尔曲线)与多点,折线或多边形之间的距离,请将该线段添加到折线中。