Envelope是所有几何对象的外接矩形,用于表示几何对象的最小边框,所有的几何对象都有一
个Envelope对象,IEnvelope是Envelope对象的主要接口,通过它可以获取几何对象的
XMax,XMin,YMax,YMin,Height,Width属性。通过IEnvelope的Expand方法还可以按比例缩放Envelope对
象的范围,如下图所示:

Curve对象几何对象

除去Point,MultiPoint和Envelope外,其他所有的几何体都可以看做是Curve(曲线)。
Line,Polyline,Polygon,CircularArc,BezierCurve,EllipticArc和CircularArc都是曲线的一种,它们
都实现了ICurve接口。
ICurve接口的Length属性用于返回一个Curve对象的长度。
ICurve接口的FromPoint和ToPoint属性可以获得Curve对象的起止点。
ICurve接口的Reverseorientation方法可以改变一个Curve对象的节点次序即调动Curve对象的起
始点和终止点互相调换。
ICurve接口的IsClosed属性则可以判断一个Curve对象起始点和终止点是否在一个位置上。
ICurve接口的GetSubcurve方法可以复制一条Curve对象的特定部分,例如一条10千米公路的Curve
对象,获取2-5千米处的公路的曲线代码片段如下所示:
//QI到ICurve接口
ICurve pCurve = pPolyline as ICurve;
//创建一个Polyline对象
ICurve pNewCurve = new PolylineClass();
bool btrue= true;
//获取-5千米间的曲线对象pCurve.GetSubcurve(2, 5, btrue, out pNewCurve);
此外ICurve的QueryTangent和QueryNormal方法分别用于获取Curve对象上某一点的曲线的切线

和法线

Multipatch几何对象

Multipatch几何对象用于描述3D图形,可以由TriangleStrip, TriangleFan, Triangle和ring对
象组合构成组成。Multipatch可以通过多种方式创建,一种是通过导入外部3D格式数据文件(3D Studio
Max .3ds files, OpenFlight .flt files, COLLADA .dae files, Sketchup .skp files, VRML .wrl files),
另外ArcGIS Engine提供了多种创建Multipatch几何对象的方法:
如果创建没有贴图纹理,没有法向,没有组成部分信息的Multipatch时,只需创建好组成的
Multipatch的各个部分即可,然后通过MultiPatch的IGeometryCollection接口添加各个组成部分即可。
如果要为Multipatch每个组成部分添加纹理信息,法向信息,属性信息就必须使用
GeneralMultiPatchCreator对象来创建,通过其IGeneralMultiPatchInfo接口来为MultiPatch各个组成
部分定义法向,材质,属性信息。通过IGeneralMultiPatchInfo接口可以获取这些MultiPatch的各个组
成部分的信息。

通过IConstructMultiPatch接口和IExtrude接口操作GeometryEnvironment对象可以通过拉伸
Polyline对象(拉伸为墙)和Polygon对象(拉伸为多面体)来创建MultiPatch.
通过访问3D符号库,获取3DSymbol来渲染点,把三维符号放置在点的位置从而生成Multipatch.

Geometry集合接口
通过前边对于具体的Geometry对象的介绍可知,除了Point对象之外,其他几何对象都是通过其他
几何对象集合构建而成。如MultiPoint对象是点的集合,Path对象是Segment对象的集合,Polyline对
象是Path对象的集合,Polygon对象是Ring对象的集合,Multipatch对象是Triangle Strip和Trangle
Fan, Trangle,Ring对象的集合。
ArcGIS Engine提供了三个主要的几何图形集合接口用于对几何对象的操作,分别是
IPointCollection,ISegmentCollection和IGeometryCollection,这些接口揭示出ArcGIS Engine的几何
模型的实质——它们是一种组合构成的模式,这种组合并不一定按照严格的层次结构组织。
在前面介绍一些几何对象的时候,也给大家演示了部分使用功能,这三个接口在程序开发中经常使
用到,接下来简单阐述以下这三个接口的使用方法。
IGeometryCollection接口被Polygon,Polyline, Multipoint, Multipatch, Trangle,T rangle
Strip,Trangle Fan和GeometryBag所实现。IGeometryCollection接口提供的方法可以让开发者对一个几

何对象的组成元素即子对象进行添加,改变和移除。例如:
组成Polyline对象的子对象是Path对象。
组成Polygon对象的子对象是Ring对象。
组成Multipoint对象的子对象是Point对象。
组成MultiPatch对象的子对象是TrangleFan TrangleStrip,Triangle或Ring对象。
组成GeometryBag对象的是任何类型的几何体对象,实际上GeometryBag是一个可以容纳任何类型
几何对象的容器。
IGeometryCollection的Geometry 属性可以通过一个索引值返回一个组成该几何对象的某个子对象,
而GeometryCount返回组成该几何对象的子对象的数目。
IGeometry的AddGeometry和AddGeometries方法都用于向一个几何对象添加子对象,它们的区别是
前者一次只能添加一个几何对象,而后者可以一次添加一个几何对象数组。除此之外,AddGeometry方法

可以将子对象添加到几何的指定索引值的位置,而AddGeometries方法将子对象数组添加到集合的最后。
在使用AddGeometry方法添加子对象到Polygon对象的过程中,如果子对象即Ring出现覆盖现象,
那么多边形就没有封闭或出现了包含关系,那么这个Polygon就不是简单Polygon,因此通过
IGometryCollection来创建一个Polygon时,需要使用ITopologicalOperator 的Simplify方法保证其有
效性。

IGeometryCollection接口

通过IGeometryCollection创建一个Polygon对象的代码片段如下:
private IPolygon ConstructorPolygon(List<IRing> pRingList)
        {
            try
            {
 
                IGeometryCollection pGCollection = new PolygonClass();
                object o = Type.Missing;
 
                for (int i = 0; i < pRingList.Count; i++)
                {
                    //通过IGeometryCollection接口的AddGeometry方法向Polygon对象
对象
                    pGCollection.AddGeometry(pRingList[i], ref o, ref o);
                }
                //QI至ITopologicalOperator
                ITopologicalOperator pTopological = pGCollection as ITopologic
                //执行Simplify操作
                pTopological.Simplify();
                IPolygon pPolygon = pGCollection as IPolygon;
                //返回Polygon对象
                return pPolygon;
            }
            catch (Exception Err)
            {
 
                return null;
            }
        }

private IPolygon MergePolygons(IPolygon firstPolygon, IPolygon SecondPolygon)
        {
            try
            {
                //创建一个Polygon对象
                IGeometryCollection pGCollection1 = new PolygonClass();
                IGeometryCollection pGCollection2 = firstPolygon as IGeometryCollection;
                IGeometryCollection pGCollection3 = SecondPolygon as IGeometryCollection;
                //添加firstPolygon
                pGCollection1.AddGeometryCollection(pGCollection2);
                //添加SecondPolygon
                pGCollection1.AddGeometryCollection(pGCollection3);
                //QI至ITopologicalOperator
                ITopologicalOperator pTopological = pGCollection1 as ITopologicalOperator;

//执行Simplify操作
        pTopological.Simplify();
        IPolygon pPolygon = pGCollection1 as IPolygon;
        //返回Polygon对象
        return pPolygon;
    }
    catch (Exception Err)
    {
        return null;
    }
}

Envelope几何对象 Curve对象几何对象 Multipatch几何对象 Geometry集合接口 IGeometryCollection接口的更多相关文章

  1. [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

    目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...

  2. 对象列表转换为DataTable或DataTable转换为对象列表.

    /**********************************************************************************/ // 说明: 数据转换工具. ...

  3. 利用StringList对象来管理这些动态生成的对象

    如果程序需要动态创建大量的对象,那么我们可以利用StringList对象来管理这些动态生成的对象.1.创建StringList对象:OBJ := TStringList.Create; 2.保存动态生 ...

  4. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. python类、对象、方法、属性之类与对象笔记

    python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性(特征)和行为来描述一个对象的.比如家里的小狗, ...

  6. (JAVA)从零开始之--对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)

    对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流:  Ob ...

  7. json对象转字符串与json字符串转对象

    1.概述: 我们在编程时进场会遇到json对象转字符串,或者字符串转对象的情况. 2.解决办法: json.parse()方法是将json字符串转成json对象. json.stringfy()方法是 ...

  8. WPF异常“调用线程无法访问此对象,因为另一个线程拥有该对象 ”

    WPF中在对界面进行操作的时候,可能会遇到"调用线程无法访问此对象,因为另一个线程拥有该对象"异常,这是因为WPF中只有UI线程才能操作UI元素,非UI线程要访问UI时就会报异常了 ...

  9. JavaScript常用内置对象(window、document、form对象)

    由于刚开始学习B/S编程,下面对各种脚本语言有一个宏观的简单认识. 脚本语言(JavaScript,Vbscript,JScript等)介于HTML和C,C++,Java,C#等编程语言之间.它的优势 ...

随机推荐

  1. php 类中设置成员属性方法

    class FileUpload { private $path = "./uploads"; //上传文件保存的路径 private $allowtype = array('jp ...

  2. win8.1去掉鼠标右键回收站“固定到开始”屏幕的方法

    平台:win8.1 问题:桌面“回收站”右键菜单里有个“固定到开始屏幕”,一不小心就误按,设法删除之. 打开注册表编辑器.在注册表编辑器里面定位到:HKEY_LOCAL_MACHINE\SOFTWAR ...

  3. java 文件的基本操作

    1 /** * java 文件操作 * 2016/5/10 **/ package cn.Java_7; import java.io.*; import java.util.Scanner; imp ...

  4. php中文乱码问题分析及解决办法

    中文乱码问题产生的原因,主要就是字符编码设置问题:             首先,mysql数据库安装的时候字符编码要选择正确,最好选择utf-8比较保险.如果安装时没有设置正确,找到mysql的安装 ...

  5. HDU1272 小希的迷宫 并查集

    参考网址:http://blog.sina.com.cn/s/blog_6827ac4a0100nyjy.html 解题思路: 由于这里出现的数字不一定连续的数字都会出现,所以设一个mark来标记数字 ...

  6. openwrt之snmpd

    OpenWRT uses UCI (/etc/config/snmpd) to generate the /etc/snmp/snmpd.conf , so you cannot simply edi ...

  7. 使用AOP 使C#代码更清晰

    简介 如果你很熟悉面向方面编程(AOP),你就会知道给代码增加"切面"可以使代码更清晰并且具有可维护性.但是AOP通常都依赖于第三方类库或者硬编码的.net特性来工作.虽然这些实现 ...

  8. Django:之不得不说的web框架们

    python的web框架 Bottle Bpttle是一个快速.简洁.轻量级的基于WSIG的微型web框架,此框架只有一个.py文件,除了python的标准库外,其不依赖任何其它模块. pip ins ...

  9. 关于用模拟器运行百度地图API无法定位的问题 - 不能用模拟器

    模拟器是没有办法定位,当你加入定位模块的时候,传出的参数都是空的. 定位的这个方法函数,是通过回调接口来实现,而且触发该事件的时候,需要经纬度位置改变.官方文档写得很清楚,简单点来说,就是你没有GPS ...

  10. c#抓取网页内容乱码的解决方案

    写过爬虫的同学都知道,这是个很常见的问题了,一般处理思路是: 使用HttpWebRequest发送请求,HttpWebResponse来接收,判断HttpWebResponse中”Content-Ty ...