[arcengine+geoProcessor]相交多边形的算法分析过程与实现
2008-01-02 22:28
459 查看
经常有一个这样的需求:所有相交的多边形,合并成那个一个。
在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,就很容易了
相关文章推荐
- Openck_Swift源码分析——增加、删除设备时算法具体的实现过程
- Hoare选择算法 寻找第k小元素C实现 算法的“AWK脚手架和grap运行过程分析”
- 矩形和圆的相交检测 算法分析与实现
- 【滤波算法】【C语言】(二)标量Kalman滤波的过程分析和证明及C实现
- linux伙伴算法实现过程分析
- 算法分析之归并排序——算法整体实现过程
- 基于朴素贝叶斯分类器的文本分类算法的实现过程分析
- 编译原理(八) 算符优先分析法(分析过程的算法和C++实现)
- 基于朴素贝叶斯分类器的文本分类算法的实现过程分析
- 编译原理(八) 算符优先分析法(分析过程的算法和C++实现)
- 矩形和圆的相交检测 算法分析与实现
- 第二人生的源码分析(10)登录授权的实现过程
- 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)
- 基于特征分析谱估计算法(Capon, MUSIC, ESPRIT)的C++实现
- Spring3.1.0实现原理分析(十).AOP之代理对象执行拦截过程
- 2440 中断过程分析 (MDK 自带启动代码实现中断)
- 常用算法的递归实现问题分析(针对《数据结构与程序设计》by Robert.L.Kruse)
- [算法]图算法之骑士遍历问题(象棋中马的遍历问题)分析,C语言实现
- 单向散列函数SHA-1算法分析与实现
- 最短路径算法—Bellman-Ford(贝尔曼-福特)算法分析与实现(C/C++)