




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ArcGIS Engine基础开发教程1创建第一个ArcGIS Engine桌面应用程序. 62几何对象与空间参考. 153地图和地图布局. 444图层符号化. 645地图查询. 916.空间分析. 1107地图输出. 121很多人是不熟悉ArcGISDesktop就开始从网上Down代码修改代码开始了自己的开发之旅,包括我,我大学时代是MapInfo的粉丝,一直没学过ArcGIS。这是非常不科学的,因为ArcGISDesktop就是从AO开发起来的,你只有掌握了ArcGISDesktop的使用,才能很容易理解AO接口提供的功能。实际上ArcGIS Engine二次开发说白了就是在ArcGIS
2、Desktop所提供的功能和业务相结合进行的创新性开发。所以熟悉ArcGISDesktop以及ArcGIS数据模型对学习ArcGIS Engine二次开发非常重要!一、创建第一个ArcGIS Engine桌面应用程序ArcGIS Engine9.3提供了丰富的GIS组件方便用户快速的定制开发一个GIS应用程序,无需写代码即可实现GIS数据加载,地图操作等功能甚至可以实现高级编辑以及空间分析功能。接下来使用ArcGIS Engine9.3提供了MapControl Application模块来创建第一个ArcGIS Engine桌面应用程序,并为桌面应用应用程序提供编辑功能。1.1目标1)创建第
3、一个ArcGIS Engine桌面应用程序2)为应用程序添加编辑功能。1.2准备工作1)IDE:Visual Studio 2005/20082)ArcGIS Engine Developer kit 9.33)制作ArcGIS实验数据地图文档MXD1.3设计流程图下载 (45.11 KB)2009-5-13 22:041.4制作地图文档在ArcMap中加载数据后,点击保存生成一个*.mxd地图文档,如图所示:下载 (72.31 KB)2009-5-13 22:04图1.5创建第一个ArcGIS Engine桌面应用程序在Visual Studio2008中新创建项à选择à
4、ArcGISàEngineàMapControl Application,点击确定,如图所示:下载 (38.28 KB)2009-5-13 22:15图可以看到在VisualStudio中看到在新创建的项目中自动加载了ToolBarControl、TocControl、LicenseControl、MapControl四个ArcGISEngine控件以及一个.NET ToolStripMenuItem菜单控件,如图3所示:图1.6加载MXD地图文档数据单击F5键运行程序,然后单击打开MXD地图文档按钮打开MXD地图文档,如图4所示:下载 (46.75 KB)2009-5-1
5、4 10:00图可以看到应用程序把MXD地图文档加载到MapControl地图上,可以使用ToolbarControl提供的常用GIS功能如:放大,缩小,信息查询等功能。如图所示:图1.7为应用程序添加编辑功能在应用程序设计模式下右键单击ToolbarControl,单击属性选项弹出ToolbarControl属性对话框,单击Items选项卡,单击Add按钮弹出Controls Commands对话框,单击Toolset选项卡,选择Feature Editors选项,拖动到属性对话框工具栏的指定位置。如图所示图1.8体验使用编辑功能运行应用程序,可见工具条多了一个和ArcMap中功能类似的编辑
6、工具集,开始对面图层进行编辑创建一个新的面图元,如图所示。图综上GIS应用开发人员通过使用ArcGIS Engine可以快速创建自定义GIS应用程序。下载次数:532009-5-13 22:04二、学习几何对象与空间参考2.1目标)熟悉ArcGIS Engine Geometry模型,通过程序构建常用几何对象)熟悉空间参考)通过野外测量点构建一个polygon shapefile功能开发2.2准备工作)IDE:Visual Studio 2005/2008)ArcGIS Engine Developer kit 9.3)自造一份包含X,Y坐标的*.txt文本文档数据(即野外测量点)2.3Geo
7、metry主要几何对象模型图下载 (27.64 KB)2009-5-13 22:19图1Geometry是ArcGIS Engine中使用最为广泛的对象集之一,用户在创建、删除、编辑和进行地理分析的时候,就是处理一个包含几何形体的矢量对象;除了显示要素意外,控件对象选择,要素符号化,标注要素,编辑要素都需要Geometry参与。图1是Geometry的主要几何对象模型图,接下来将一一介绍这些几何对象。2.4几何对象2.4.1Point和MultiPoint几何对象Point几何对象Point:是一个维的几何图形,具有X,Y坐标值,以及一些可选的属性:如高程值(Z值),度量值(M值
8、) 和ID号,点对象用于描述精确定位的对象,例如一个电话亭在一个城市的精确位置以下代码演示如何创建一个Point对象:1. IPoint pPoint = new PointClass();2. pPoint.X = 100;3. pPoint.Y = 100;MultiPoint几何对象MultiPoint:点集对象是一系列无序的点的群集,这些点具有相同的属性信息。例如可以用一个点集来表示整个城市天然气调压站。如下图所示:一个Multipoint对象由个Point对象组成。4. 下载 (7.29 KB)5. 2009-5-13 22:23图2以下代码片段演示如何构建Multip
9、oint对象:/定义第一个点IPoint pPoint1 = new PointClass();pPoint1.X = 100;pPoint1.Y = 100;/定义第二个点IPoint pPoint2 = new PointClass();pPoint2.X = 200;pPoint2.Y = 200;/构建其他点IPointCollection pMultipoint = new MultipointClass();object o=Type.Missing;/添加第一个点,不需要设置点的顺序,参数设置为Type.MissingpMultipoint.AddPoint(pPoint1, r
10、ef o, ref o);/添加第二个点,不需要设置点的顺序,参数设置为Type.MissingpMultipoint.AddPoint(pPoint2, ref o, ref o);/添加其他点2.4.2Segment几何对象6. 下载 (9.36 KB)7. 2009-5-14 11:588. 下载 (42.99 KB)9. 2009-5-14 11:582.4.3Path和Ring几何对象Path几何对象Path是连续的Segment的集合,除了路径的第一个Segment和最后一个Segment外其余的Segment的起始点都是前一个Segment的终止点,即Path对象的
11、中的Segment不能出现分离,Path可以是任意数的Line,CircularArc,EllipticArc和BezierCurve的组合。10. 下载 (8.93 KB)11. 2009-5-14 11:58图4一个或多个Path组成一个Polyline对象。Ring几何对象Ring是一个封闭的Path即起始和终止点有相同的坐标值。它有内部和外部属性。12. 下载 (4.05 KB)13. 2009-5-14 11:58图5一个或多个Ring对象组成一个Polygon对象。2.4.4Polyline和Polygon几何对象Polyline几何对象Polyline
12、对象是由一个或多个相连或者不相连的path对象的有序集合,它可以是单个Path对象组成,也可以是多个相连的Path对象组成,或者是多个分离的Path组成,如下图所示。Polyline通常用来代表线状地物如道路,河流,管线等等。14. 下载 (35.17 KB)15. 2009-5-14 11:58图6一个Polyline对象必须满足以下准则:1.组成Polyline对象的所有Path对象必须是有效的。2.组成Polyline对象的所有Path对象不能重合,相交或自相交。3.组成Polyline对象的多个Path对象可以连接与某一点,也可以分离。4.Path对象的长度不能为.IPolyline是
13、Polyline类的主要接口,IPolyline的Reshape方法可以使用一个Path对象为一个Polyline对象整形,IPolyline的SimplifyNetwork方法用于简化网络。Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建,使用该接口需注意以下情况:1.每一个Path对象必须是有效的,或使用IPath:Simplify方法后有效。2.由于Polyline是Path对象的有序集合,所以添加Path对象时必须注意顺序和方向。3.为了保证Polyline是有效的,可以创建完Polyline对象后使用ITopologicalOpera
14、tor接口的Simplify方法。以下代码片段为使用IGeometryCollection接口创建一个Polyline对象:/定义第一个点IPoint pPoint1 = new PointClass();pPoint1.X = 100;pPoint1.Y = 100;/定义第二个点IPoint pPoint2 = new PointClass();pPoint2.X = 200;pPoint2.Y = 200;/创建一个Line对象ILine pLine= new LineClass();/设置Line对象的起始终止点pLine.PutCoords(pPoint1,pPoint2);/QI到
15、ISegmentISegment pSegment= pLine as ISegment;/创建一个Path对象SegmentCollection pPath= new PathClass();object o=Type.Missing;/通过ISegmentCollection接口为Path对象添加Segment对象pPath.AddSegment(pSegment,ref o,ref o);/创建一个Polyline对象IGeometryCollection pPolyline = new PolylineClass();/通过IGeometryCollection为Polyline对象添
16、加Path对象pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o);Polylgon几何对象 2Polylgon对象是由一个或多个Ring对象的有序集合,它可以是由单个Ring 对象构成,也可以使用多个Ring组成如下图所示。其中Ring可以分为Outer Ring(外环)和InnerRing(内环)之分。外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环的方向是逆时针。Polygon通常用来代表有面积的多边形矢量对象,如行政区,建筑物等。16. 下载 (36.93 KB)17. 200
17、9-5-14 11:58图7以下代码片段演示如何构建一个Polygon:/创建一个Ring对象,通过ISegmentCollection接口向其中添加Segment对象ISegmentCollection pSegCollection = new RingClass();object o = Type.Missing;pSegCollection.AddSegment(pSegment1, ref o, ref o);pSegCollection.AddSegment(pSegment2, ref o, ref o);/QI到IRing接口封闭Ring对象,使其有效IRing pRing =
18、pSegCollection as IRing;pRing.Close();/使用Ring对象构建Polygon对象IGeometryCollection pGeometryColl = new PolygonClass();pGeometryColl.AddGeometry(pRing, ref o, ref o);2.4.5Envelope几何对象Envelope是所有几何对象的外接矩形,用于表示几何对象的最小边框,所有的几何对象都有一个Envelope对象,IEnvelope是Envelope对象的主要接口,通过它可以获取几何对象的XMax,XMin,YMax,YMin,Height,W
19、idth属性。通过IEnvelope的Expand方法还可以按比例缩放Envelope对象的范围,如下图所示:18. 下载 (34.35 KB)19. 2009-5-14 11:582.4.6Curve对象几何对象除去Point,MultiPoint和Envelope外,其他所有的几何体都可以看做是Curve(曲线)。Line,Polyline,Polygon,CircularArc,BezierCurve,EllipticArc和CircularArc都是曲线的一种,它们都实现了ICurve接口。ICurve接口的Length属性用于返回一个Curve对象的长度。ICurve接口的FromP
20、oint和ToPoint属性可以获得Curve对象的起止点。ICurve接口的Reverseorientation方法可以改变一个Curve对象的节点次序即调动Curve对象的起始点和终止点互相调换。ICurve接口的IsClosed属性则可以判断一个Curve对象起始点和终止点是否在一个位置上。ICurve接口的GetSubcurve方法可以复制一条Curve对象的特定部分,例如一条10千米公路的Curve对象,获取2-5千米处的公路的曲线代码片段如下所示:/QI到ICurve接口ICurve pCurve = pPolyline as ICurve;/创建一个Polyline对象ICurv
21、e pNewCurve = new PolylineClass();bool btrue= true;/获取-5千米间的曲线对象pCurve.GetSubcurve(2, 5, btrue, out pNewCurve);此外ICurve的QueryTangent和QueryNormal方法分别用于获取Curve对象上某一点的曲线的切线和法线。2.4.7 Triangle Strip和Trangle Fan, Trangle,Ring几何对象Triangle Strip和Trangle Fan, Trangle,Ring是构成MultiPatch几何对象的构建对象。Triangl
22、e Strip几何对象TriangelStrip对象是由一系列点定义的曲面片组成,而曲面片是有若干个三角形所组成,所以这个曲面可以定义为:(0,1,2) ,(2, 1, 3), (2, 3, 4), (4, 3, 5)。20. 下载 (13.61 KB)21. 2009-5-14 11:33图Trangle Fan几何对象一个Trangle Fan对象由一系列点定义的曲面片组成,所不同的是所有的三角形共享一个顶点。如下图所示,所以这个曲面可以定义为:(0,1,2) ,(0,2, 3), (0, 3, 4), (0, 4, 5)。22. 下载 (13.39 KB)23. 2009
23、-5-14 11:34图Triangle几何对象Triangle由三个点所确定如下图,一个Triangle可定义为(0,1,2)等。24. 下载 (12.76 KB)25. 2009-5-14 11:33图Ring几何对象Ring和前边介绍的组成Polygon的Ring一样,例如下边一个房屋组成它的墙是个OutRing对象,而窗户和门是InnerRing对象。26. 下载 (18.73 KB)27. 2009-5-14 11:34图122.4.8Multipatch几何对象Multipatch几何对象用于描述3D图形,可以由TriangleStrip, Tr
24、iangleFan, 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的IGe
25、ometryCollection接口添加各个组成部分即可。如果要为Multipatch每个组成部分添加纹理信息,法向信息,属性信息就必须使用GeneralMultiPatchCreator对象来创建,通过其IGeneralMultiPatchInfo接口来为MultiPatch各个组成部分定义法向,材质,属性信息。通过IGeneralMultiPatchInfo接口可以获取这些MultiPatch的各个组成部分的信息。通过IConstructMultiPatch接口和IExtrude接口操作GeometryEnvironment对象可以通过拉伸Polyline对象(拉伸为墙)和Polygon对
26、象(拉伸为多面体)来创建MultiPatch.通过访问3D符号库,获取3DSymbol来渲染点,把三维符号放置在点的位置从而生成Multipatch.下图为MultiPatch对象的贴图原理:28. 下载 (40.78 KB)29. 2009-5-14 11:24图13接下来给大家介绍通过GeneralMultiPatchCreator创建一个有纹理MultiPatch的方法:需要使用以下三个对象:GeometryMaterial:用于构建材质,通过IGeometryMaterial创建的材质可以作为TextureLineSymbol或者 TextureFillSymbol属性用来创建这些符号
27、,也可以把它添加到GeometryMaterialList对象中,用于GeneralMultipatchCreator对象构建Multipatch对象。GeometryMaterialList:材质对象的容器用于GeneralMultiPatchCreator对象调用Init方法时使用。GeneralMultiPatchCreator:用于创建有纹理的贴图的Multipatch.。以下代码片段演示如何创建一个MultiPatch对象/<summary>/构建Multipatch几何对象/</summary>/<returns>返回Multipatch几何对象
28、</returns>public IMultiPatch CreateMultipatch() try /创建图形材质对象 IGeometryMaterial texture = new GeometryMaterialClass();texture.TextureImage = "C:TempMyImage.jpg"/创建材质列表对象IGeometryMaterialList materialList = new GeometryMaterialListClass();/向材质列表添加材质materialList.AddMater
29、ial(texture);/创建GeneralMultiPatchCreator对象IGeneralMultiPatchCreator multiPatchCreator = new GeneralMultiPatchCreatorClass();multiPatchCreator.Init(4, 1, false, false, false, 4, materialList);/设置Part:可以使三角扇或环multiPatchCreator.SetPatchType(0, esriPatchType.esriPatchTypeTriangleStrip);multiPatchCreator
30、.SetMaterialIndex(0, 0);multiPatchCreator.SetPatchPointIndex(0, 0);multiPatchCreator.SetPatchTexturePointIndex(0, 0);/创建真实points.WKSPointZ upperLeft = new WKSPointZ();WKSPointZ lowerLeft = new WKSPointZ();WKSPointZ upperRight = new WKSPointZ();WKSPointZ lowerRight = new WKSPointZ();upperLeft.X = 0;u
31、pperLeft.Y = 0;upperLeft.Z = 0;upperRight.X = 300;upperRight.Y = 0;upperRight.Z = 0;lowerLeft.X = 0;lowerLeft.Y = 0;lowerLeft.Z = -100;lowerRight.X = 300;lowerRight.Y = 1;lowerRight.Z = -100;multiPatchCreator.SetWKSPointZ(0, ref upperRight);multiPatchCreator.SetWKSPointZ(1, ref lowerRight);multiPatc
32、hCreator.SetWKSPointZ(2, ref upperLeft);multiPatchCreator.SetWKSPointZ(3, ref lowerLeft);/设置贴图的点WKSPoint textureUpperLeft = new WKSPoint();WKSPoint textureLowerLeft = new WKSPoint();WKSPoint textureUpperRight = new WKSPoint();WKSPoint textureLowerRight = new WKSPoint();textureUpperLeft.X = 0; textur
33、eUpperLeft.Y = 0;textureUpperRight.X = 1; textureUpperRight.Y = 0;textureLowerLeft.X = 0; textureLowerLeft.Y = 1;textureLowerRight.X = 1; textureLowerRight.Y = 1;multiPatchCreator.SetTextureWKSPoint(0, ref textureUpperRight);multiPatchCreator.SetTextureWKSPoint(1, ref textureLowerRight);multiPatchCr
34、eator.SetTextureWKSPoint(2, ref textureUpperLeft);multiPatchCreator.SetTextureWKSPoint(3, ref textureLowerLeft);/创建MultiPatch对象IMultiPatch multiPatch = multiPatchCreator.CreateMultiPatch() as IMultiPatch;return multiPatch;catch (Exception Err)MessageBox.Show(Err.Message, "提示", MessageBoxBu
35、ttons.OK, MessageBoxIcon.Information);2.4.9Geometry集合接口通过前边对于具体的Geometry对象的介绍可知,除了Point对象之外,其他几何对象都是通过其他几何对象集合构建而成。如MultiPoint对象是点的集合,Path对象是Segment对象的集合,Polyline对象是Path对象的集合,Polygon对象是Ring对象的集合,Multipatch对象是Triangle Strip和Trangle Fan, Trangle,Ring对象的集合。ArcGIS Engine提供了三个主要的几何图形集合接口用于对几何对象的操作,分别是IPo
36、intCollection,ISegmentCollection和IGeometryCollection,这些接口揭示出ArcGIS Engine的几何模型的实质它们是一种组合构成的模式,这种组合并不一定按照严格的层次结构组织。在前面介绍一些几何对象的时候,也给大家演示了部分使用功能,这三个接口在程序开发中经常使用到,接下来简单阐述以下这三个接口的使用方法。IGeometryCollection接口IGeometryCollection接口被Polygon,Polyline, Multipoint, Multipatch, Trangle,T rangle Strip,Trang
37、le Fan和GeometryBag所实现。IGeometryCollection接口提供的方法可以让开发者对一个几何对象的组成元素即子对象进行添加,改变和移除。例如:组成Polyline对象的子对象是Path对象。组成Polygon对象的子对象是Ring对象。组成Multipoint对象的子对象是Point对象。组成MultiPatch对象的子对象是TrangleFan TrangleStrip,Triangle或Ring对象。组成GeometryBag对象的是任何类型的几何体对象,实际上GeometryBag是一个可以容纳任何类型几何对象的容器。IGeometryCollection的Ge
38、ometry 属性可以通过一个索引值返回一个组成该几何对象的某个子对象,而GeometryCount返回组成该几何对象的子对象的数目。IGeometry的AddGeometry和AddGeometries方法都用于向一个几何对象添加子对象,它们的区别是前者一次只能添加一个几何对象,而后者可以一次添加一个几何对象数组。除此之外,AddGeometry方法可以将子对象添加到几何的指定索引值的位置,而AddGeometries方法将子对象数组添加到集合的最后。在使用AddGeometry方法添加子对象到Polygon对象的过程中,如果子对象即Ring出现覆盖现象,那么多边形就没有封闭或出现了包含关系
39、,那么这个Polygon就不是简单Polygon,因此通过IGometryCollection来创建一个Polygon时,需要使用ITopologicalOperator 的Simplify方法保证其有效性。通过IGeometryCollection创建一个Polygon对象的代码片段如下:/<summary>/构造Polygon对象/</summary>/<param name="pRingList">Ring对象集合</param>/<returns>返回一个Polygon对象</returns>p
40、rivate IPolygon ConstructorPolygon(List<IRing> pRingList)try/创建一个Polygon对象IGeometryCollection pGCollection = new PolygonClass();object o = Type.Missing;/遍历Ring集合for(int i=0;i<pRingList.Count;i+)/通过IGeometryCollection接口的AddGeometry方法向Polygon对象中添加Ring子对象pGCollection.AddGeometry(pRingList, ref
41、 o, ref o);/QI至ITopologicalOperatorITopologicalOperator pTopological = pGCollection as ITopologicalOperator;/执行Simplify操作pTopological.Simplify();IPolygon pPolygon=pGCollection as IPolygon;/返回Polygon对象return pPolygon;catch (Exception Err) MessageBox.Show(Err.Message,"提示",MessageBoxButtons.O
42、K,MessageBoxIcon.Information);return null;同样可以通过IGeometryCollection的AddGeometryCollection方法可以将一个Polygon中的所有子对象Ring添加到另外一个多边形中,这样就实现了合并两个多边形对象为一个多边形对象的功能,这非常有用。以下代码片段演示如何合并两个Polygon对象为一个Polgyone对象:/<summary>/合并两个Polygon/</summary>/<param name="firstPolygon">第一个Polygon</
43、param>/<param name="SecondPolygon">第二个Polygon</param>/<returns>返回合并后的Polygon</returns>private IPolygon MergePolygons(IPolygon firstPolygon, IPolygon SecondPolygon) try/创建一个Polygon对象IGeometryCollection pGCollection1=new PolygonClass();IGeometryCollection pGCollect
44、ion2 = firstPolygon as IGeometryCollection;IGeometryCollection pGCollection3 = SecondPolygon as IGeometryCollection;/添加firstPolygonpGCollection1.AddGeometryCollection(pGCollection2);/添加SecondPolygonpGCollection1.AddGeometryCollection(pGCollection3);/QI至ITopologicalOperatorITopologicalOperator pTopol
45、ogical = pGCollection1 as ITopologicalOperator;/执行Simplify操作pTopological.Simplify();IPolygon pPolygon=pGCollection1 as IPolygon;/返回Polygon对象return pPolygon;catch (Exception Err) MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);return null;ISegmentCol
46、lection接口ISegmentCollection接口被Path,Ring,Polyline和Polygon四个类所实现,它们被称作是Segment集合对象,使用这个接口可以处理组成Segment集合对象中的每一个子Segment对象。使用ISegmentCollection接口可以为一个Segment集合对象添加,插入,删除Segment子对象。ISegmentCollection接口SetCircle和SetRectangle方法提供了一种简单不需要添加Segment的情况下构建一个完成的Path,Ring,Polyline和Polygon的方法。IPointCollec
47、tion接口IPointCollection可以被多个几何对象类所实现,这些对象都是由多个点构成如:Mullipoint,Path,Ring,Polyline,Polygon,TriangleFan,TrangleStrip,Trangle,Multipatch等,它们都可以称作PointCollection对象,通过IPointCollection接口定义的方法可以获取,添加,插入,查询,移除几何对象中的某个顶点。同以上两个接口一样它也定义了操作一个点集合对象的方法,例如通过AddPoint方法可以向PointCollection对象中的特定索引位添加一个点对象,如果不指定位置,则添加到最后
48、。通过IPointCollection的Point属性通过顶点索引可以得到某一顶点。在本章节最后的Demo 实例将为大家演示IPointCollection提供的功能。2.4.10几何对象总结在Geometry模型中的几何对象分为两种类型,一类是用来直接构建要素类的称为高级几何对象,一类用来构建高级几何对象相对低一级的几何对象成为构建几何对象如下表所示:几何对象名称所属类别构成子几何对象用于创建和编辑的接口Polyline高级PathIGeometryCollection,IPointCollection Polygon高级RingIGeometryCollection,IPointColle
49、ctionMultiPoint高级PointIGeometryCollection,IPointCollectionMultiPatch高级TrangleFan,Ring TrangleStrip ,Trangle,IGeometryCollection,IPointCollectionRing低级SegmentISegmentCollection,IPointCollectionPath低级SegmentISegmentCollection,IPointCollectionSegment低级PointIPoint,ILine, ICurveTriangleFan低级PointIGeometr
50、yCollection,IPointCollectionTriangleStrip低级PointIGeometryCollection,IPointCollectionTriangle低级PointIGeometryCollection,IPointCollectionPoint高级/低级无IPoint2.5 空间参考2.5.1空间参考简介空间参考(Spatial Reference)是GIS数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标。 在同一个地图上显示的地图数据的空间参考必须是一致的,如果两个图层的空间参考不一致,往往会导致两幅地图无法正确拼合,因此开
51、发一个GIS系统时,为数据选择正确的空间参考非常重要。ArcGIS Engine提供了一系列对象供开发者管理GIS系统的坐标系统。对大部分开发者而言了解ProjectedCoordinateSystem,GeographicCoordinateSystem,SpatialReference Environment这三个组件类是非常有必要的,对于高级开发者而言,可能需要自定义坐标系统可以使用这些对象Projection,Datum,AngularUnit,Spheriod,PrimeMeridian和GeoTransformation等。2.5.2修改空间参考以下代码片段演示了如何改变一个图层的
52、空间参考。 1. / <summary>2. / 改变图层的空间参考3. / </summary>4. / <param name="pFeatureLayer">图层</param>5. / <param name="pGeoType">空间参考类型</param>6. private void ChangeLayerRef(IFeatureLayer pFeatureLayer, int gcsType)7. 8. try9. 10. IFeatureClass pFeature
53、Class = pFeatureLayer.FeatureClass;11. /QI到IGeoDataset12. IGeoDataset pGeoDataset = pFeatureClass as IGeoDataset;13. /QI到IGeoDatasetSchemaEdit14. IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit;15. if (pGeoDatasetSchemaEdit.CanAlterSpatialReference = true)16. 17. /
54、创建SpatialReferenceEnvironmentClass对象18. ISpatialReferenceFactory2 pSpaRefFactory = new SpatialReferenceEnvironmentClass();19. /创建地理坐标系对象20. IGeographicCoordinateSystem pNewGeoSys = pSpaRefFactory.CreateGeographicCoordinateSystem(gcsType);/4214代表Beijing195421. pGeoDatasetSchemaEdit.AlterSpatialRefere
55、nce(pNewGeoSys);22. 23. 24. catch (Exception Err)25. 26. MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);27. 28. 2.6开发野外测量点构建一个Polygon几何要素程序2.6.1功能情景描述现有一存储为*.txt格式文本文件存储野外测量几个建筑物的坐标信息,如图所示,我们需要通过开发一个功能能够读取这些这些坐标信息并根据坐标点建筑物属性来构建建筑物,并创建成一个ShapeFile加载到Map
56、Control上。下载 (33.65 KB)2009-5-13 22:38步骤一:添加一个Form,并添加4个Button,2个标签,2个文本框如下图所示:下载 (20.16 KB)2009-5-13 22:382.6.2功能开发代码1. private AxMapControl buddyMap;2. / <summary>3. / 关联地图控件4. / </summary>5. public AxMapControl BuddyMap6. 7. get8. 9. return buddyMap;10. 11. set12. 13. buddyMap = value;
57、14. 15. 16. / <summary>17. / 要保存的ShapeFile全路径名称18. / </summary>19. string shapeFileFullName = string.Empty;20. / <summary>21. / 测量数据全路径名称22. / </summary>23. string surveyDataFullName = string.Empty;24. List<string> pColumns = new List<string>();25. List<CPoint> pCPointList = new List<CPoint>();26. struct
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提高公司财务团队服务水平的培训计划
- 提升前台沟通技巧的工作计划
- 医院财务管理优化的策略与效果计划
- 学习资源共享平台建设计划
- 《贵州创泰矿业有限公司修文县龙场镇高仓老二洞铝铁矿山矿产资源绿色开发利用方案(三合一)》专家组评审意见
- 第二单元课题2氧气-教学设计-2024-2025学年九年级化学人教版上册
- 2025年镇江道路运输从业资格证模拟考试年新版
- 2025年湖州资格证模拟考试
- 2025年湖北货车资格证考试题
- 2025年辽阳货运从业资格证模拟考试下载题
- AI技术在保险行业的应用
- 施工方案大全百度网盘下载
- 电机与拖动技术
- 中职统编《金属材料与热处理》系列课件 第2章 金属材料的性能(动画) 云天课件
- 小公鸡和小鸭子(完美版)
- 人民医院诊断证明书
- 超声刀操作标准
- 小学羽毛球特色教学教案羽毛球
- 苏教版科学2023四年级下册全册教案教学设计及反思
- 五年级道德与法治下册全册教案
- 高中英语公开课点评【6篇】
评论
0/150
提交评论