基于C#的ArcEngine二次开发42:空间分析接口及分析(ITopologicalOperator / IRelationalOperator / IProximityOperator)(三)

简介: 基于C#的ArcEngine二次开发42:空间分析接口及分析(ITopologicalOperator / IRelationalOperator / IProximityOperator)

4 空间关系运算

4.1 IRelationalOperator

4.1.1 基本接口


关系运算符比较两个几何,然后返回一个布尔值,指示是否存在所需的关系。一些关系要求输入几何形状具有相同的尺寸,而其他关系则具有更灵活的尺寸约束。大多数预定义的关系运算符是互斥的Clementini运算符。

image.png

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


image.png

20200521095033932.png


20200521095247392.png

可与ReturnDistance一起使用的几何组合为:


点:点,多点,包络,折线,多边形,线,圆弧,椭圆弧,椭圆弧,贝塞尔曲线。

多点:点,多点,信封,折线,多边形。

包络:点,多点,包络,线,CircularArc,EllipticArc,BezierCurve,PolyLine,Polygon。

折线:点,多点,信封,折线,多边形。

多边形:点,多点,信封,折线,多边形。

线:点,包络,线,圆弧,椭圆弧,贝塞尔曲线。

CircularArc:点,包络,线,CircularArc,EllipticArc(尚未实现),BezierCurve。

EllipticArc:点,包络,线,圆弧(尚未实现),EllipticArc(尚未实现),BezierCurve(尚未实现)。

BezierCurve:点,包络,线,CircularArc,EllipticArc(尚未实现),BezierCurve。

注意:要获取线段(直线,圆弧,椭圆线,贝塞尔曲线)与多点,折线或多边形之间的距离,请将该线段添加到折线中。


相关文章
|
2月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
158 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
2月前
|
IDE C# 开发工具
C#系列之接口介绍
C#系列之接口介绍
|
2月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
2月前
|
安全 C# 开发者
C#中的默认接口方法:接口演化的新篇章
【1月更文挑战第11天】本文探讨了C# 8.0中引入的默认接口方法,这一特性允许在接口中定义具有默认实现的方法。文章介绍了默认接口方法的语法、使用场景,以及它们如何影响接口的设计和实现,同时讨论了默认接口方法带来的好处和潜在的陷阱。
|
7天前
|
编译器 API C#
技术心得记录:深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解
技术心得记录:深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解
|
1月前
|
C# Windows
C# 串口关闭时主界面卡死原因分析
串口程序关闭导致界面卡死的原因是主线程与辅助线程间的死锁。问题出在`SerialPort.Close()`方法与`DataReceived`事件处理程序。`DataReceived`事件在`lock (stream)`块中执行,而`Close()`方法会关闭`SerialStream`并锁定自身。当辅助线程处理数据并尝试更新UI时,UI线程因调用`Close()`被阻塞,造成死锁。解决办法是让`DataReceived`事件处理程序使用`this.BeginInvoke()`异步更新界面,避免等待UI线程,从而防止死锁。
|
2月前
|
安全 算法 测试技术
C#编程实战:项目案例分析
【4月更文挑战第20天】本文以电子商务系统为例,探讨C#在实际项目中的应用。通过面向对象编程实现组件抽象和封装,确保代码的可维护性和可扩展性;利用安全性特性保护用户数据;借助数据库操作处理商品信息;通过逻辑控制和算法处理订单;调试工具加速问题解决,展现C#的优势:面向对象、数据库交互、数据安全和开发效率。C#在实际编程中展现出广泛前景。
|
2月前
|
前端开发 API C#
C# 接口
C# 接口
25 1
|
2月前
|
C# 开发者 索引
C# 11.0中的所需成员:强化接口与抽象类的约束
【1月更文挑战第24天】C# 11.0引入了所需成员(Required members)的概念,这一新特性允许在接口和抽象类中定义必须被实现的成员,包括方法、属性、索引器和事件。通过所需成员,C# 强化了对接口实现和抽象类继承的约束,提高了代码的一致性和可维护性。本文将详细探讨C# 11.0中所需成员的工作原理、使用场景及其对现有编程模式的影响。
|
2月前
|
C# 开发者 索引
C# 11.0中的静态抽象成员:接口中的新变革
【1月更文挑战第25天】C# 11.0引入了接口中的静态抽象成员,这一新特性为接口设计带来了更大的灵活性。静态抽象成员允许在接口中定义静态方法和属性,并要求实现类提供具体的实现。本文将详细探讨C# 11.0中静态抽象成员的工作原理、优势及其对现有编程模式的影响,旨在帮助读者更好地理解和应用这一新特性。