您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 牟乃夏ArcEngine教程-第6章空间数据编辑
牟乃夏ArcGISEngine地理信息系统开发教程配套PPT---第6章空间数据编辑目录•1.简介•2.编辑对象•3.开始编辑•4.设置编辑图层•5.设置编辑任务•6.编辑操作•7.节点编辑•8.属性编辑•9.保存编辑•10.结束编辑1.简介•空间数据编辑是指产生新的矢量数据或对已有的矢量空间数据进行的再加工,包括矢量数据的生产、加工、维护、错误修正等,这是空间数据维护与加工的基本环节,也是基于ArcGISEngine开发的GIS系统的基本功能。•空间数据的编辑包括矢量图形编辑和属性数据的编辑两部分。•空间数据的编辑操作是针对工作空间下的数据进行的,如:ShapefileWorkspaces工作空间、AccessWorkspace工作空间、FileGDBWorkspace工作空间等。1.简介•本章以编辑FileGDBWorkspace为例介绍空间数据的编辑(当然,也支持对ShapefileWorkspaces工作空间、AccessWorkspace工作空间等数据的编辑操作)。•实例程序实现思路①调用IEngineEditor接口的StartEditing方法打开一个编辑对象,并设定相关参数;②将设定好参数的IEngineEditor接口跳转到IEngineEditLayers接口,利用该接口的SetTargetLayer方法来设置一个目标图层;③通过IEngineEditTask对象设定编辑任务,并将其传递给当前的EngineEditor对象的CurrentTask属性;④实现所要执行的编辑操作;⑤在编辑对象过程中,使用IEngineEditor接口的StopEditing方法,并输入参数“true”结束编辑任务并保存(或者直接调用ControlsEditingSaveCommand方法进行保存,本章使用前者);⑥停止编辑。1.简介•代码说明•在ArcGISEngine的编程过程中,数据编辑部分的代码较为复杂。一般的,ArcGISEngine实现空间数据编辑的方法有两种:一种是直接调用ArcGISEngine封装的工具,另一种是根据操作过程逐步编写代码。•本章实例的程序架构为一个解决方案下有两个项目,分别是GISEditor(作为启动项目)和GISEditor.EditTool。其中GISEditor项目主要用来设计程序的主界面,实现各编辑功能的按钮(按钮功能的具体实现函数在GISEditor.EditTool项目中)。GISEditor.EditTool项目主要用来实现各编辑操作,这个项目所包含的类从功能上可分为三种:Command(命令类)、Tool(工具类)、BasicClass(公共基础类),在解决方案管理器中分别对应于Command、Tool和BasicClass文件夹。1.简介•Command文件夹中包含的类是以命令方式来实现编辑操作的,运行时单击对应按钮即可,如:UndoCommandClass(撤销操作类)、RedoCommandClass(恢复操作类)、DelFeatureCommandClass(删除要素操作类)等。•Tool文件夹中所包含的类是以工具的方式(即鼠标与视图交互的方式)来实现编辑操作的,如AddVertexToolClass(添加节点工具类)、MoveVertexToolClass(移动节点工具类)、DelVertexToolClass(删除节点工具类)、MoveFeatureToolClass(移动要素工具类)等。•BasicClass文件夹中包含的类有:EditVertexClass(编辑节点类)、MapManager(视图控制类)、SupportZMFeatureClass(修改Z、M值类)等。这些类封装了各种编辑操作的公共方法,如MapManager中封装了GetRgbColor方法用于获取颜色、CalDistance方法用于计算两点之间X方向和与Y方向上的距离、ConvertPixelsToMapUnits方法用于单位之间的转换、GetSelectedFeatures方法用于获取选择要素等。实例程序中还用到了IHookHelper(钩子接口),它主要有如下功能:1.通过IHookHelper,获取地图控件和主窗体:m_hookHelper.Hook=m_Hook;(m_Hook为mainMapControl.Object,即主视图对象);2.通过IHookHelper,获取IActiveView和IMap对象:m_Map=m_hookHelper.FocusMap;3.通过IHookHelper,操作地图:HookActionshookActions=m_hookHelperasIHookHelper;获取IHookActions,再通过IHookActions进行Flash、Pan、等操作2.编辑对象•ArcGISEngine的编辑过程就是用户通过鼠标与控件进行点、线、面等几何对象的添加、修改、删除等可视化的交互过程。为更好的理解这个交互过程,需要了解编辑过程中的几何对象及DisplayFeedback对象。•几何对象•Geometry类是所有几何对象的父类,它是一个抽象类。IGeometry接口定义了所有的几何对象都拥有的属性或方法,如Dimension用于查询几何形体对象的维度,Envelope用于返回几何对象的包络线,GeometryType则可以返回查询对象的类型等。•当使用new关键字创建一个几何对象后,这个Geometry其实是空的,需要给它添加具体的信息。如新建一个Point对象后,如果不设置它的X、Y坐标,这个点是无法明确显示的。2.编辑对象•几何对象•几何对象分为两种层次,一种是构成要素形状的几何图形,如Point、Polyline、Envelope等;另一种是构成这些形状的组成部分,如Path、Segment等,前者被称为“高级几何对象”。GeometryEnvelopeMultipointCurveSphereTriangleStripPointsRayTrianglesGeometryBagTriangleFanMultiPatchSegmentsPathsPolyCurveBezierCurveCircularArcPolyLinePolygonEllipticArcLineRing组成……由……组成几何对象关系图2.编辑对象•“高级几何对象”①Point对象是一个0维的几何图形,具有X、Y坐标值,以及可选的属性,如高程(Z值)、测量值(M)和ID号,它用于描述需要精确定位的对象。②MultiPoint点集对象是无序点的集群,它用于表示具有相同属性设置的同一组点,是由多个点组成的一个点状地理对象。③Envelope包络线是一个矩形,它用于表示要素的空间范围。它覆盖了几何对象的最小坐标和最大坐标,同时也记录了几何对象的Z值和M值的变化范围。所有的几何形体对象都拥有一个包络线。④Polyline多义线是一个有序路径(Path)的集合,这些路径既可以是连续的,也可以是离散的。这个对象可以用于表示具有线状特征的对象,如河流、公路和等高线等。⑤Polygon多边形是环(Ring)的集合,环是一个封闭的路径。Polygon可以由一个或者多个环组成,设置环内套环,形成岛环的情况,但是内外环之间不能重叠,对于一个给定的点而言,它总是在多边形“内部”、“外部”或者“边界上”,它通常用于描述具有面状特性的要素。2.编辑对象•“高级几何对象”的组成构件•Polyline是由Path组成的,Polygon是由Ring组成的。Path是连续的Segment的集合,除了路径的第一个Segment和最后一个Segment外,其余的Segment的起始点都是前一个Segment的终止点,即Path对象的中的Segment不能出现分离,Path可以是任意数的Line,CircularArc,EllipticArc和BezierCurve的组合,而Segment是连接起点和终点的一段直线或曲线.•Ring是一种封闭的路径,它的起始点是同一点。Ring对象具有“内部”和“外部”属性。由于Ring是封闭的Path,因此其组成可以看作是一系列首尾相连的同方向的Segment对象,并且不能自相交.Path与SegmentRing2.编辑对象Polyline组成关系图Polygon组成关系图几何对象组成对象用于创建和编辑此形状的接口PathSegmentISegmentCollectionRingSegmentISegmentCollectionMultiPatchTriangleFan、TriangleStrip、RingIGeometryCollectionMultiPointPointIPointCollection、IGeometryCollectionPolylinePathIGeometryCollectionPolygonRingIGeometryCollectionTriangleFanSegmentIPointCollection、IGeometryCollectionTriangleStripSegmentIPointCollection、IGeometryCollection几何对象组合关系及接口2.编辑对象•Point和MultiPoint对象•IPoint定义了Point对象的属性和方法,ID属性返回点对象的ID号,M、Z值返回点的测度值和高程值,X、Y返回点的X、Y坐标值。PutCoords用于设置一个点的X、Y坐标值,当用户新生成一个点后,使用该方法来创建一个实际的点对象。•点集(MultiPoint)是具有相同属性的点的集合,它在构成高级几何对象、几何对象动态模拟等方面起了重要的作用。IMultiPoint是MultiPoint类的接口,它并没有方法,但可以使用它来判断某个对象是否是MultiPoint对象。MultiPoint对象可以使用Add方法来添加一个点到它的集合中去,这个过程需要使用IPointCollection接口来完成。2.编辑对象•Envelope对象•Envelope(包络线)是一个几何形体的最小边框矩形,每一个Geometry对象都有一个包络线对象,包络线对象定义了最大、最小Z值、M值,这两个值可以分别通过IZAware、IMare接口来定义。IEnvelope是包络线对象的主要接口,它定义了XMax、XMin、YMax、YMin、Height、Width等属性用于获得和设置一个包络线对象的空间坐标。Expand方法用于有比例的缩放包络线的范围,并产生一个新的包络线对象,在缩放地图的视图操作中经常使用这个方法。Offset是一个偏移方法,它通过添加一个X值和Y值(可以是正值也可以是负值)给XMax、XMin和YMax、YMin,移动包络线本身,在这个移动过程中包络线的形状保持不变。CenterAt方法则通过改变包络线的中心点来移动包络线。2.编辑对象•DisplayFeedback对象•DisplayFeedback是用户使用鼠标与控件进行可视化交互的对象集,这种交互包括添加、移动要素或图形元素,以及改变它们的几何形状等。该对象还可用在不产生任何几何对象的任务中,如测量两点之间的距离、多边形选择等。生成新对象的DisplayFeedback,主要是以New开头的Feedback对象,如生成多边形的NewPolygonFeedback、生成矩形的NewEnvelopeFeedback等。•在DisplayFeedback对象中,除去GroupFeedback子对象外,其他所有子对象都有相似的方法,按行为可分为两种类型:•使DisplayFeedback对象返回一个新的Geometry。•DisplayFeedback对象仅为显示目的。2.编辑对象•产生新Geometry的Feedback对象•NewLineFeedback、NewPolygonFeedback、NewBezierCurveFeedback三个对象分别用来产生新的Po
本文标题:牟乃夏ArcEngine教程-第6章空间数据编辑
链接地址:https://www.777doc.com/doc-2220664 .html