1.1 ITopologicalOperator接口

1.1.1 ITopologicalOperator接口简介ITopologicalOperator接口用来通过对已存在的几何对象做空间拓扑运算以产生新的结合对象。实现该接口的类有Point,Multipoint,Polyline,Polygon,MultiPatch这些都是高级几何对象,另外GeometryBag也实现了该接口,低级的构建几何对象如Segments(Line,Circular Arc,Elliptic Arc,Bezier Curve),Paths或者Rings如果想使用该接口需包装成高级几何对象。
ITopologicalOperator接口在GIS开发中使用非常广泛,通常GIS系统中缓冲区分析,裁剪几何图形,几何图形差分操作,几何图形合并操作等都需要使用此接口。下表是ITopologicalOperator接口主要的方法说明:

方法名称 说明
Boundary 几何图形对象的边界
Buffer 对几何图形对象进行缓冲区空间拓扑操作
Clip 对几何图形对象进行裁剪空间拓扑操作
ConstructUnion 高效的合并多个枚举几何对象与单个几何对象合并为单个几何对象,这对于大量几何对象的合并非常高效
ConvexHull 构建几何对象的凸边形
Cut 切割几何对象
Difference 一个几何图形减去它与另一个几何图形相交的部分
Intersect 两个同维度几何对象的交集部分
Simplify 使几何对象拓扑一致
SymmetricDifference 对称差分将两个几何图形的并集部分减去两个几何图形交集的部分
Union 合并两个同维度的几何对象为单个几何对象

1. Boundary属性
如图所示Polygon几何对象的Boundary是组成它的Polyline几何对象
Polyline几何对象的[Boundary是组成它的顶点Point几何对象
而Point几何对象的Boundary是空对象

2.Buffer方法:
Buffer方法可以给一个高级几何对象产生一个缓冲区,无论是Polygon,Polyline,Point它们的缓冲区都是具有面积的几何对象

3.Clip方法
Clip方法可以将用一个Envelope对象对一个几何对象进行裁剪,参见结果是几何对象被Envelope 对象所包围的部分

4.ConvexHull方法
ConvexHull方法可以产生一个几何图形的最小的边框凸多边形(没有凹面包含几何图形的最小多边形)
5.Cut方法
Cut方法不支持GeometryBags几何对象,它可以指定一条切割曲线和一个几何图形,经过切割运算后把几何图形分为左右两部分,做,右两部分是相对曲线的方向而言。点与多点不能被切割,Polyline和Polygon只有与切割曲线相交时才能执行Cut方法

6.Difference方法
Difference方法用于产生两个几何对象的差集。

7.Union方法和ConstructUnion都用于合并几何对象,所不同的是前者合并两个同维度的几何对象为单个几何对象,而后者是高效的合并多个枚举几何对象与单个几何对象合并为单个几何对象,这对于大量几何对象的合并非常高效的。
8.Intersect方法
Intersect方法用于返回两个同维度几何对象的交集,即两个几何对象的重合部分。
9.SymetricDifference方法
SymetricDifference方法用于产生两个几何图形的对称差分,即两个几何的并集部分减去两个几何的交集部分

10.IsSimple属性和Simplify方法
IsSimple属性用于检测几何对象是否是拓扑正确即为简化几何对象,而Simplify方法用于简化几何对象使几何对象的拓扑正确。

在开发对几何对象空间分析时,所操作的几何对象必须是简化的几何对象,以下代码片段演示了如何使一个几何对象在拓扑上一致,例如在一个PointCollection对象中移除所有的重合点;对于segmentCollection移除所有重合线段,而相交的线段会变成非相交线段(即在相交处产生一个顶点);对于Polygon所有相交的环将被移除,未封闭的环将被封闭。

 private void SimplifyGeometry(IGeometry pGeometry)
{
try
{
ITopologicalOperator pTopOperator = pGeometry as ITopologicalOperator;
if (pTopOperator != null)
{
if (!(pTopOperator.IsKnownSimple))
{
if (!(pTopOperator.IsSimple))
{
pTopOperator.Simplify();
}
}
}
}
catch (Exception Err)
{
MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

6.4 IRelationalOperator接口
6.4.1 IRelationalOperator接口简介几何对象之间都存在某种关联关系,如包含,相等,在内部,相交,叠加等。这些关联关系的获得都可以通过IRelationalOperator接口来获得,关系运算是在两个几何对象间进行的,通过IRelationalOperator的某一个方法返回一个布尔值来说明这两个几何对象是否有这种关系。所有支持ITopologicaloperator的几何对象的类也实现了IRelationalOperator接口,其中包括Envelope对象,这意味着还可以对两个几何对象的Envelope进行关联关系检查。

方法名称 描述
Contains 检查两个几何图形几何图形1是否包含几何图形2
Crosses 用于检测两个几何图形是否相交
Equal 用于检测两个几何图形是否相等
Touches 用于检测两个几何图形是否相连
Disjoint 用于检测两个几何图形是否不相交
Overlaps 用于检测两个几何图形是否有重叠
Relation 用于检测是否存在定义relationship
Within 检查两个几何图形几何图形1是否被包含于几何图形2

6.4.2判断几何对象包含关系功能开发 以下代码片段演示如何判断几何图形A是否包含几何图形B:

 ///
/// 检测几何图形A是否包含几何图形B
///
/// 几何图形A
/// 几何图形B
/// True为包含,False为不包含
private bool CheckGeometryContain(IGeometry pGeometryA, IGeometry pGeometryB)
{
IRelationalOperator pRelOperator = pGeometryA as IRelationalOperator;
if (pRelOperator.Contains(pGeometryB))
{
return true;
}
else
{
return false;
}
}

6.5 IProximityOperator接口
6.5.1 IProximityOperator接口简介
IProximityOperator接口用于获取两个几何图形的距离,以及给定一个Point,求另一个几何图形上离离给定点最近的点。IProximityOperator接口的主要方法有:QueryNearesPoint,ReturnDistance, ReturnNearestPoint
ReturnDistance方法用于返回两个几何对象间的最短距离,QueryNearesPoint方法用于查询获取几何对象上离给定输入点的最近距离的点的引用,ReturnNearestPoint方法用于创建并返回几何对象上离给定输入点的最近距离的点。
6.5.2 最近点查询功能开发
以下代码片段演示如何使用IProximityOperator接口获取给定点与要查询的几何图形的最近点:

 /// 在pGeometry上返回一个离pInputPoint最近的point
///
/// 给定的点对象
/// 要查询的几何图形
/// the nearest Point
private IPoint NearestPoint(IPoint pInputPoint, IGeometry pGeometry)
{
try
{
 IProximityOperator pProximity = (IProximityOperator)pGeometry;
IPoint pNearestPoint = pProximity.ReturnNearestPoint(pInputPoint, esriSegmentExtension.esriNoExtension);
return pNearestPoint;
}
catch(Exception Err)
{
MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return null;
}
}

以下代码片段演示如何使用IProximityOperator接口查询给定的两个几何对象的距离:

 ///
/// 获取两个几何图形的距离
///
/// 几何图形A
/// 几何图形B
/// 两个几何图形的距离
private double GetTwoGeometryDistance(IGeometry pGeometryA, IGeometry pGeometryB)
{
IProximityOperator pProOperator = pGeometryA as IProximityOperator;
if (pGeometryA!=null|| pGeometryB !=null)
{
double distance= pProOperator.ReturnDistance(pGeometryB);
return distance;
}
else
{
return ;
}
}

AE的空间分析(转载)的更多相关文章

  1. JavaScript 空间分析库——JSTS和Turf【转】

    https://blog.csdn.net/neimeng0/article/details/80363468 前言 项目中有管线的空间拓扑关系查询需求,在npm中检索到JSTS和Turf两个Java ...

  2. ArcGIS空间分析工具

    1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset (3D 要素工具集) Add Z Information 添加 Z 信息 添 ...

  3. [转]varchar(n),nvarchar(n) 长度、性能、及所占空间分析

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  4. varchar(n),nvarchar(n) 长度、性能、及所占空间分析 nvarchar(64) nvarchar(128) nvarchar(256)(转)

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  5. SAM宏观生态学空间分析帮助文档

    宏观生态学分析软件帮助文档: 引言: 该软件是由布鲁塞尔..大学开发,目的是提供一个综合的空间分析计算平台,主要针对的是宏观生态学数据.该软件可以从网站...上自由获取,该软件的主要特征以及发表在20 ...

  6. sql中varchar(n),nvarchar(n) 长度性能及所占空间分析

    sql中varchar(n),nvarchar(n) 长度性能及所占空间分析 1.varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. ...

  7. 设计模式综合列表【QQ空间日志转载】

    C++设计模式全篇 [QQ空间日志转载]

  8. 空间分析开源库GEOS

    History of GEOS GEOS中Geometry的结构 GEOS分析功能简介 1.History of GEOS J​T​S​ ​T​o​p​o​l​o​g​y​ ​S​u​i​t​e是Ma ...

  9. 【转】阿里巴巴技术专家杨晓明:基于Hadoop技术进行地理空间分析

    转自:http://www.csdn.net/article/2015-01-23/2823687-geographic-space-base-Hadoop [编者按]交通领域正产生着海量的车辆位置点 ...

随机推荐

  1. Socket层实现系列 — connect()的实现

    主要内容:connect()的Socket层实现.期间进程的睡眠和唤醒. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 应用层 int connect( ...

  2. ios swift模仿qq登陆界面,xml布局

    给大家推荐两个学习的地址: 极客学院的视频:http://www.jikexueyuan.com/path/ios/ 一个博客:http://blog.csdn.net/lizhongfu2013/a ...

  3. Strategy 设计模式 策略模式 超靠谱原代码讲解

    先来假设一种情,我们需要向三种不同的客户做出不同的报价,一般来说要肿么设计呢,是不是马上会想到用IF,没有错,对于这种情况,策略模式是最好的选.大家可以这么理解,如果有情况需要用到大量的IF,那你用策 ...

  4. 四大组件之ContentProvider小结

    总结提高,与君共勉 1.什么是Content Provider 内容提供器( Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,提供了一套完整的机制,允许一个程序访问另 ...

  5. Maven nexus安装、配置和使用

    简介         Nexus 可以代理并缓存 Maven 构件,当 Maven 需要下载构件的时候,就不需要反复的请求中央仓库. 有些公司都不提供外网给项目组人员,因此就不能使用 Maven 访问 ...

  6. 【面试必备】Swift 面试题及其答案

    原文:Swift Interview Questions and Answers 原作者:Antonio Bello 原作者介绍: Antonio 拥有丰富的编程经验.他开始编程的时候,内存单位还是 ...

  7. (NO.00001)iOS游戏SpeedBoy Lite成形记(九)

    我们回到matchRun方法中去尝试第一次修改,部分代码如下: CCActionMoveBy *moveBy = [CCActionMoveBy actionWithDuration:duration ...

  8. 学习pthreads,使用互斥量进行同步

    在进行多线程编程时,我们总会遇到全局变量和数据结构的问题,这是多线程之间进行通信的问题.如果多个线程同时读写一个全局变量,那么会造成竞争或者出错.为了解决这一问题,我们需要对全局数据进行,使用互斥量实 ...

  9. Lucene 自动补全

    package com.pera.suggestion; import java.io.IOException; import java.io.Reader; import java.util.Arr ...

  10. ROS_RGB-D SLAM学习笔记--室内环境测试

    ROS_RGB-D SLAM学习笔记 RTAB-Map's ros-pkg. RTAB-Map is a RGB-D SLAM approach with real-time constraints. ...