[arcengine+geoProcessor]相交多边形的算法分析过程与实现
经常有一个这样的需求:所有相交的多边形,合并成那个一个。
在arctoolbox里,没有找到可用的工具。(Merge, Union不是这个功能。Dissolve是根据属性合并。
于是想到利用dissolve来做。
那么就要设置一个字段,需要合并的,都取相同的值。
这个设置,类似于图论的连通分量,在集合之上,进行等价类划分。
记得《数据结构》里,等价类的构建,是利用二叉树实现的。
但.net里,有statck, queue,没有tree数据结构(当然有treeView UI)。
于是到codeplex上,找Tree,找到了一个DataStruct类库。(要是有一个经典完美的DataStruct,多好!)
里面实现了BinaryTree, SearchTree, Black-red Tree。都是基于泛型的。
试了一下,还可以。但总感觉这个开源项目不够成熟,不敢用。
吃完晚饭,躺在床上,思考这个问题。
想着用集合来解决。但太不优雅了:乱!
后来想到自己的代码,用数组实现等价类的划分。
数组的性能是不用怀疑的。
而且空间复杂度是最小的,当然时间复杂度高。
但程序设计简单,时间复杂度,可以由数组本身的性能来弥补。
最后就采用了利用数组作为临时数据结构,对要素,进行逐个空间关系进行查询,数组值相同的,是有相交的(无向连通的),属于同一个等价类,应该合并。
有了等价类,直接用 Geoprocessor+Dissolve,就很容易了
在arctoolbox里,没有找到可用的工具。(Merge, Union不是这个功能。Dissolve是根据属性合并。
于是想到利用dissolve来做。
那么就要设置一个字段,需要合并的,都取相同的值。
这个设置,类似于图论的连通分量,在集合之上,进行等价类划分。
记得《数据结构》里,等价类的构建,是利用二叉树实现的。
但.net里,有statck, queue,没有tree数据结构(当然有treeView UI)。
于是到codeplex上,找Tree,找到了一个DataStruct类库。(要是有一个经典完美的DataStruct,多好!)
里面实现了BinaryTree, SearchTree, Black-red Tree。都是基于泛型的。
试了一下,还可以。但总感觉这个开源项目不够成熟,不敢用。
吃完晚饭,躺在床上,思考这个问题。
想着用集合来解决。但太不优雅了:乱!
后来想到自己的代码,用数组实现等价类的划分。
数组的性能是不用怀疑的。
而且空间复杂度是最小的,当然时间复杂度高。
但程序设计简单,时间复杂度,可以由数组本身的性能来弥补。
最后就采用了利用数组作为临时数据结构,对要素,进行逐个空间关系进行查询,数组值相同的,是有相交的(无向连通的),属于同一个等价类,应该合并。
有了等价类,直接用 Geoprocessor+Dissolve,就很容易了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?