gis二次开发几何形体对象geometry

上传人:san****019 文档编号:70136619 上传时间:2019-01-16 格式:PPT 页数:64 大小:2.08MB
返回 下载 相关 举报
gis二次开发几何形体对象geometry_第1页
第1页 / 共64页
gis二次开发几何形体对象geometry_第2页
第2页 / 共64页
gis二次开发几何形体对象geometry_第3页
第3页 / 共64页
gis二次开发几何形体对象geometry_第4页
第4页 / 共64页
gis二次开发几何形体对象geometry_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《gis二次开发几何形体对象geometry》由会员分享,可在线阅读,更多相关《gis二次开发几何形体对象geometry(64页珍藏版)》请在金锄头文库上搜索。

1、第5讲 几何对象与空间参考,王佳 ,本章内容,6.1 Geometry模型 6.2 Point和MultiPoint对象 6.3 Segment,Path,Ring和Polyline对象 6.4 Polyline对象和曲线Curve 6.5 Geometry集合接口 6.6 动态跟踪 6.7 空间参考 6.8 程序开发实例,第一节 Geometry模型,Geometry是ArcObjects中使用最广泛的对象集之一 新建、删除、编辑和进行地理分析 空间选择、要素着色制作专题图、标注编辑 Geometry模型中,几何形体对象被分为两个层次 高级几何对象 构件几何对象,而在ArcGIS Engin

2、e中和这个模型对应的对象如下:,在这上面的模型图中,位于最上面的Geomtry是一个抽象的对象,因而在使用它的时候需要由其子类完成实例,在ArcGIS Engine中Geometry类实现IGometry接口,而IGeometry接口定义了所有几何对象通用的属性和方法,如投影,获取空间参考等,IGeometry接口的方法和属性如下:,其中IGeometry.Dimension属性获取几何对象的拓扑唯度,如返回0 就表示该几何对象为点对象或者多点多线,1表示该对象为多线,具体的可参看下图:,IGeometry.Envelope返回一个IEnvelope对象, Envelope是所有几何对象的外接

3、矩形,用于表示几何对象的最小边框,所有的几何对象都有一个Envelope对象,IEnvelope是Envelope对象的主要接口,通过它可以获取几何对象的XMax,XMin,YMax,YMin,Height,Width属性,下图为不同几何对象的Envelope:,IGeometry.SpatialReference用于返回该几何对象的空间参考信息。 IGeometry.Project方法用于对该几何对象做参考系的转换。,包络线Envelope,包络线Envelope是一个矩形区域 它是作为任何一个几何形体的最小边框区域而存在的 每一个Geometry对象都拥有一个Envelope对象,即使是E

4、nvelope本身 它也常常作为地图的视图或地理数据库的范围和用户交互操作的结果而返回,IEnvelope接口,属性 空间坐标XMax XMin YMax YMin Height Width 四个角点的坐标:UpperLeft UpperRight LowerLeft LowerRight 方法 PutCoords:构造包络线的方法 QueryCoords:查询包络线的 Expand:按比例缩放包络线的范围 offset:偏移包络线本身 CenterAt:改变包络线的中心点 Intersect:两个包络线相交的方法 Union:两个包络线对象的并集,第二节 Point和MultiPoint对象

5、,Point是一个0维的具有X、Y坐标的几何对象,具有三种可以选择的属性,即Z值、M值和ID值。 用于描述点类型的要素 在寻址和符号化中使用 用于组成一个网络NetWork 任何几何对象都可以使用点来产生,世界的本质是物质,对于GIS来说,点就应该是矢量数据的本质,点生线,线生面,如此组合,构成了GIS世界中的矢量空间。,第二节 Point和MultiPoint对象,创建一个点的代码: IPoint pPoint = new PointClass(); pPoint.PutCoords(x, y);,MultiPoint对象是一系列无序的点的群集,这些点具有相同的属性信息。例如可以用一个点集来

6、表示整个城市天然气调压站。如下图所示:一个Multipoint对象由8个Point对象组成。,private object pMissing = Type.Missing; public IGeometry GetMultipointGeometry() const double MultipointPointCount = 25; IPointCollection pPointCollection = new MultipointClass(); for (int i = 0; i MultipointPointCount; i+) pPointCollection.AddPoint(Get

7、Point(), ref pMissing, ref pMissing); return pPointCollection as IGeometry; private IPoint GetPoint() const double Min = -10; const double Max = 10; Random pRandom = new Random(); double x = Min + (Max - Min) * pRandom.NextDouble(); double y = Min + (Max - Min) * pRandom.NextDouble(); return Constru

8、ctPoint(x, y); ,构建Multipoint对象,第三节 Segment,Path,Ring和Polyline对象,Segment几何对象,Segment对象是一个有起点和终点的“线“,也就是说Segement只有两个点,至于两点之间的线是直的,还是曲的,需要其余的参数定义。所以Segment是由起点,终点和参数三个方面决定的。Segment有4个子类,它的4个子类(直线,圆弧,椭圆弧,贝赛尔曲线)如下图:,Path几何对象,Path是连续的Segment的集合,除了路径的第一个Segment和最后一个Segment外其余的Segment的起始点都是前一个Segment的终止点,即

9、Path对象的中的Segment不能出现分离,Path可以是任意数的Segment子类的组合。,Path几何对象,该Path对象有很多我们经常用到的方法,如平滑曲线,对曲线抽稀等操作,如下图: 。,Ring几何对象,Ring是一个封闭的Path即起始和终止点有相同的坐标值,它有内部和外部属性。,Polyline几何对象,Polyline对象是由一个或多个相连或者不相连的path对象的有序集合,通常用来代表线状地物如道路,河流,管线等等.该对象在ArcGIS Engine中的模型图如下:,Polyline几何对象,在这个模型中,我们看到某些几何对象可以组合产生新的几何形体,如polyline由p

10、ath构成,path又可以由segement组成,但是这并不意味着用户必须按照这种层次去构造polyline,实际上Point集合直接构成Polyline,组成Polyline的这些路径既可以是连续的,也可以是不连续的,如下图:,Polyline几何对象,Polyline是有序path组成的集合,可以拥有M、Z和ID属性值,Polyline对象的IPointCollection接口包含了所有的节点信息,IGeometryCollection接口可以获取polyline的paths,ISegmentCollection接口可以获取 polyline的segments。 一个Polyline对象必

11、须满足以下准则: 1.组成Polyline对象的所有Path对象必须是有效的。 2.组成Polyline对象的所有Path对象不能重合,相交或自相交。 3.组成Polyline对象的多个Path对象可以连接与某一点,也可以分离。 4.Path对象的长度不能为0. IPolyline是Polyline类的主要接口,IPolyline的Reshape方法可以使用一个Path对象为一个Polyline对象整形,IPolyline的SimplifyNetwork方法用于简化网络。 Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建,使用该接口需注意以下情

12、况: 1.每一个Path对象必须是有效的,或使用IPath:Simplify方法后有效。 2.由于Polyline是Path对象的有序集合,所以添加Path对象时必须注意顺序和方向。 3.为了保证Polyline是有效的,可以创建完Polyline对象后使用ITopologicalOperator接口的Simplify方法。,Segment,Path,Ring和Polyline的区别,在这四者当中Segment是最小的单位具体的构成路线可以分为两个条: Segment-Path-Ring(封闭的Path) Segment-Path-Polyline 我们可以这样说Segment是Path,只不

13、过是这个Path由一个Segment组成,Ring也是一种Path,只不过是一个起点和终点重合的Path,至于Polyline那就很明显了,他们的区别可以从下图看出:,第四节 Polygon对象和 Curve对象,Polylgon几何对象,Polylgon对象是由一个或多个Ring对象的有序集合,它可以是由单个Ring 对象构成,也可以使用多个Ring组成。Polygon通常用来代表有面积的多边形矢量对象,如行政区,建筑物等。Polygon的组成结构可以看下图:,从这个图上可以看出 Polygon是由Rings构成,而Ring又是由Segment构成,但是这并不意味着用户必须按照这种层次去构造

14、Polygon,实际上用Point的集合可以构成Polygon,Polylgon几何对象,组成Polygon的是Ring,其中Ring可以分为Outer Ring(外环)和Inner Ring(内环)之分。外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环的方向是逆时针。如下图:,Polygon对象实现了一个接口IArea,而该接口用来对Poylgon的中心,重心,以及面积进行访问,下面片段用来获取Polygon的面积: IArea pArea = pPolygon as IArea; Double S= pArea. Area,Curve几何对象,除去Point,MultiPoi

15、nt和Envelope外,其他所有的几何体都可以看做是Curve(曲线)。Line,Polyline,Polygon,CircularArc,BezierCurve,EllipticArc和CircularArc都是曲线的一种,它们都实现了ICurve接口。,ICurve接口的Length属性用于返回一个Curve对象的长度。 ICurve接口的FromPoint和ToPoint属性可以获得Curve对象的起止点。 ICurve接口的Reverseorientation方法可以改变一个Curve对象的节点次序即调动Curve对象的起始点和终止点互相调换。 ICurve接口的IsClosed属性

16、则可以判断一个Curve对象起始点和终止点是否在一个位置上。,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对象上某一点的曲线的切线和法线。,IConstructPoint接口,可以使用多达10种方法来创建所需要的点: ConstructAlong沿线创建法 ConstructAngleBisector角平分线创建法 Const

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号