ArcGISEngine基础开发教程_第1页
ArcGISEngine基础开发教程_第2页
ArcGISEngine基础开发教程_第3页
ArcGISEngine基础开发教程_第4页
ArcGISEngine基础开发教程_第5页
已阅读5页,还剩155页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1创建第一个ArcGISEngine桌面应用程序

ArcGISEngine9.3提供了丰富的GlS组件方便用户快速的定制开发一个GIS应用程序,无需写代码即可实:

编辑以及空间分析功能。接下来使用ArcGISEngine9.3提供了MapControlApplication模块来创建第一彳

程序提供编辑功能。

1.1目标

1.创建第一个ArcGISEngine桌面应用程序

2.为应用程序添加编辑功能。

1.2准备工作

1.IDE:VisualStudio2005/2008

2.ArcGISEngineDeveloperkit9.3

3.制作ArcGIS实验数据地图文档MXD

1.3设计流程图

创建第一个ArcGISEngine桌面应用程序

体验编辑功能

1.4制作地图文档

在ArcMap中加载数据后,点击保存生成一个*.mxd地图文档,如图1所示:

图1

1.5创建第一个ArcGISEngine桌面应用程序

在VisualStudio2008中新创建项!选择鱼ArcGIS宜Engine&MapControlApplication,点击确定,如图2

图2

可以看到在VisualStudio中看到在新创建的项目中自动加载了ToolBarControl、TocControl>Licensee

及一个.NETToolStripMenultem菜单控件,如图3所示:

图3

1.6加载MXD地图文档数据

单击F5键运行程序,然后单击打开MXD地图文档按钮打开MXD地图文档,如图4所示:

File

7。♦ec::::•2oa

点击打开地图文档按钮打

MXD公用

s,极

文忤集I.I090325!^630ArcGIS93•快痍方式

快捶方式

■・面

GESR1-TM144KB

)H

公用ThinkspatiallywithG!S4(xUntitted.mxd

A23快捷方式a|E$R!ArcM4>

PJ万it_____|

二主鼠、河阳攫机mxd

•I

____I

文件含OO:UntitledbBid•^ArclipDocuments(•-•xd・

[打开9)M取扁

-248.74,920.74UnknownUnits

图4

可以看到应用程序把MXD地图文档加教到MapControl地图上,可以使用ToolbarControl提供的常用GIS

511699.43403132395Meters

图5

1.7为应用程序添加编辑功能

在应用程序设计模式下右键单击ToolbarControl,单击属性选项弹出ToolbarControl属性对话框,单击Item:

对话框,单击Toolset选项卡,选择FeatureEditors选项,拖动到属性对话框工具栏的指定位置。如图6所

条ArcEngineControlsApplication

File

irControl

麦・代sc

:CentreArcGISEngneMapControl

・于]崛8)trollName:axMapControll

置于阳■⑸

快速添加功能

洌齐奥网曳G)Editor

示意图

ActiveX-关于_

拖动Feature选择Toolset选项

ftfl^MainFonn*Editing工具集到

X的切⑴

黑鞭刑体今

Q««(Y)送位置/

3碰W)

XM*(D)

・性脚

右键单击、、八0®ac::::♦*♦

Toolbarcontrol选择Item^选项触击Add按钮,

点击属性。•eiri>ltt卡H.,必•-弹出Controls

Te”

9-■/17gCommands对话

900

图6

1.8体验使用编辑功能

运行应用程序,可见工具条多了一个和ArcMap中功能类似的编辑工具集,开始对面图层进行编辑创建一个新

图7

综上GlS应用开发人员通过使用ArcGISEngine可以快速创建自定义GIS应用程序。

3械(38.28KB)

ArcGISEngine基础开发教程(2)——学习几何对象与空间参考

2.1目标

1.熟悉ArcGISEngineGeometry模型,通过程序构建常用几何对象

2.熟悉空间参考

3.通过野外测量点构建一个polygonshapefile功能开发

2.2准备工作

1.IDE:VisualStudio2005/2008

2.ArcGISEngineDeveloperkit9.3

3.自造一份包含X,丫坐标的*.txt文本文档数据(即野外测量点)

2.3Geometry主要几何对象模型图

图1

Geometry是ArcGISEngine中使用最为广泛的对象集之一,用户在创建、删除、

编辑和进行地理分析的时候,就是处理一个包含几何形体的矢量对象;除了显示

要素意外,控件对象选择,要素符号化,标注要素,编辑要素都需要Geometry

参与。图1是Geometry的主要几何对象模型图,接下来将一一介绍这些几何对

象。

2.4几何对象

2.4.1Point和MultiPoint几何对象

Point几何对象

Point:是一个。维的几何图形,具有X,Y坐标值,以及一些可选的属性:如高程值(Z值),

度量值(M值)和ID号,点对象用于描述精确定位的对象,例如一个电话亭在一个城市的

精确位置以下代码演示如何创建个Point对象:

1.IPointpPoint=newPointClass();

2.pPoint.X=100;

3.pPoint.Y=100;

MultiPoint几何对象

MultiPoint:点集对象是一系列无序的点的群集,这些点具有相同的属性信息。例如可以用

一个点集来表示整个城市天然气调压站。如下图所示:一个Multipoint对象由6个Point

对象组成。

IMultipointwith1

sixpoints

图2

以下代码片段演示如何构建Multipoint对象:

〃定义第一个点

IPointpPointl=newPointClass();

pPointl.X=100;

pPointl.Y=100;

〃定义第二个点

IPointpPoint2=newPointClass();

pPoint2.X=200;

pPoint2.Y=200;

……〃构建其他点

IPoinlColledionpMultipoint=newMuitipointCkiss();

objecto=Type.Missing;

〃添加第个点,不需要设置点的顺序,参数设置为Type.Missing

pMultipoint.AddPoint(pPointl,refo,refo);

〃添加第二个点,不需要设置点的顺序,参数设置为Type.Missing

pMultipoint.AddPoint(pPoint2,refo,refo);

……//添加其他点

2.4.2Segment几何对象

Segment有起点,终点和参数定义三个方面定义。。

它有四个子类分别是,

名有四个子类分别是“

2.4.3Path和Ring几何对象

Path几何对象

Path是连续的Segment的集合,除了路径的第一个Segment和最后一个Segment外

其余的Segment的起始点都是前一个Segment的终止点,即Path对象的中的Segment

不能出现分离,Path可以是任意数的Line,CircularArc,曰lipticArc和BezierCurve的组

合。

J个Path由四个

Segment组成

图4

一个或多个Path组成一个Polyline对象。

Ring几何对象

Ring是一个封闭的Path即起始和终止点有相同的坐标值。它有内部和外部属性。

图5

■•个或多个Ring对象组成一个Polygon对象。

2.4.4Polyline和Polygon几何对象

Polyline几何对象

Polyline对象是由一个或多个相连或者不相连的path对象的有序集合,它可以是单个

Path对象组成,也可以是多个相连的Path对象组成,或者是多个分离的Path组成,如下

图所示。Polyline通常用来代表线状地物如道路,河流,管线等等。

图6

--个Polyline对象必须满足以下准则:

1.组成Polyline对象的所有Path对象必须是有效的。

2.组成Polyline对象的所有Path对象不能重合,相交或自相交。

3.组成Polyline对象的多个Path对象可以连接与某一点,也可以分离。

4.Path对象的长度不能为0.

IPolyline是Polyline类的主要接口,IPolyline的Reshape方法可以使用一个Path对象

为•个Polyline对象整形,IPolyline的SimplifyNetwork方法用于简化网络。

Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建,使用该

接口需注意以下情况:

1.每一个Path对象必须是有效的,或使用IPath::Simplify方法后有效。

2.由于Polyline是Path对象的有序集合,所以添加Path对象时必须注意顺序和方向。

3.为了保证Polyline是有效的,可以创建完Polyline对象后使用ITopologicalOperator

接口的Simplify方法。

以下代码片段为使用IGeometryCollection接口创建■—个Polyline对象:

〃定义第一个点

IPointpPointl=newPointClassO;

pPointl.X=100;

pPointl.Y=100;

〃定义第二个点

1PointpPoint2=newPointClass();

pPoint2.X=200;

pPoint2.Y=200;

〃创建一个Line对象

ILinepLine=newLineClassO;

〃设置Line对象的起始终止点

pLine.PutCoords(pPointl,pPoint2);

//QI到【Segment

1SegmentpSegment=pLineas(Segment;

〃创建一个Path对象

SegmentCollectionpPath=newPathClass();

objecto=Type.Missing;

〃通过ISegmenlColleclion接口为Palh对象添加Segment对象

pPath.AddSegment(pSegment,refo,refo);

〃创建•个Polyline对象

IGeometryCo11ectionpPolyline=newPolylineClass();

//通过IGeometryCollection为Polyline对象添力IIPath对象

pPolyline.AddGeometry(pPathasIGeometry,refo,refo);

Polylgon儿何对象

2Polylgon对象是由一个或多个Ring对象的有序集合,它可以是由单个Ring对象构成,

也可以使用多个Ring组成如下图所示。其中Ring可以分为OuterRing(外环)和Inner

Ring(内环)之分。外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环

的方向是逆时针。Polygon通常用来代表有面积的多边形矢量对象,如行政区,建筑物等。

Polygons

□□诉Ring

H外环

口内环

一个外环

一个内环

多个内环多个内环

图7

以下代码片段演示如何构建一个Polygon:

〃创建一个Ring对象,通过ISegmenlCollection接口向其中添加Segment对象

ISegmentCollectionpSegCollection=newRing('lass();

objecto=Type.Missing;

pSegCollection.AddSegment(pSegmentl,refo,refo);

pSegCollection.AddSegment(pSegment2,refo,refo);

//QI到IRing接口封闭Ring对象,使其有效

IRingpRing=pSegCollectionasIRing;

pRing.Close();

〃使用Ring对象构建Polygon对象

IGeometryCo11ectionpGeometryColl=newPolygonClassO;

pGeometryColl.AddGeometry(pRing,refo,refo);

2.4.5Envelope几何对象

Envelope是所有几何对象的外接矩形,用于表示几何对象的最小边框,所有的几何对象

都有•个Envelope对象,IEnvelope是Envelope对象的主要接口,通过它可以获取儿

何对象的XMax,XMin,YMax,YMin,Height,Width属性。通过IEnvelope的Expand方

法还可以按比例缩放Envelope对象的范围,如下图所示:

Envelope

Expand

0x缩放

fY缩放

0

2.4.6Curve对象几何对象

除去Point,MultiPoint和Envelope外,其他所有的几何体都可以看做是Curve(曲线)。

Line,Polyline,Polygon,CircularArc,BezierCurve,曰lipticArc和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接口

ICurvepCurve=pPolylineasICurve;

〃创建一个Polyline对象

1CurvepNewCurve=newPolyIineClassO;

boolbtrue=true;

〃获取-5千米间的曲线对象

pCurve.GetSubcurve(2,5,btrue,outpNewCurve);

此外ICurve的QueryTangent和QueryNormal方法分别用于获取Curve对象上某一

点的曲线的切线和法线。

2.4.7TriangleStrip和TrangleFan,Trangle.Ring几何对象

TriangleStrip和TrangleFan,Trangle,Ring是构成MultiPatch几何对象的构建对象。

TriangleStrip几何对象

TriangelStrip对象是由一系列点定义的曲面片组成,而曲面片是有若干个三角形所组成,

所以这个曲面可以定义为:(0,1,2),(2,1,3),(2,3,4),(4,3,5)»

图9

TrangleFan几何对象

一个TrangleFan对象由一系列点定义的曲面片组成,所不同的是所有的三角形共享一个

顶点。如下图所示,所以这个曲面可以定义为:(0,1,2),(0,2,3),(0,3,4),(0,4,5)。

0

2

图10

Triangle几何对象

Triangle由三个点所确定如下图,一个Triangle可定义为(0,1,2)等。

图11

Ring几何对象

Ring和前边介绍的组成Polygon的Ring一样,例如下边一个房屋组成它的墙是个

OutRing对象,而窗户和门是InnerRing对象。

innerRing

图12

2.4.8Multipatch几何对象

Multipatch几何对象用于描述3D图形,可以由TriangleStrip,TriangleFan,Triangle

和ring对象组合构成组成。Multipatch可以通过多种方式创建,一种是通过导入外部3D

格式数据文件(3DStudioMax.3dsfiles,OpenFlight.fitfiles,COLLADA.daefiles,

Sketchup.skpfiles,VRML.wrlfiles),另外ArcGISEngine提供了多种创建

Multipatch几何对象的方法:

如果创建没有贴图纹理,没有法向,没有组成部分信息的Multipatch时,只需创建好组成

的Multipatch的各个部分即可,然后通过MultiPatch的IGeometryCollection接口添

加各个组成部分即可。

如果要为Multipatch每个组成部分添加纹理信息,法向信息,属性信息就必须使用

GeneralMultiPatchCreator对象来创建,通过其IGeneralMultiPatchlnfo接口来为

MultiPatch各个组成部分定义法向,材质,属性信息。通过IGeneralMultiPatchlnfo接

口可以获取这些MultiPatch的各个组成部分的信息。

通过IConstructMultiPatch接口和lExtrude接口操作GeometryEnvironment对象可

以通过拉伸Polyline对象(拉伸为墙)和Polygon对象(拉伸为多面体)来创建MultiPatch.

通过访问3D符号库,获取3DSymbol来渲染点,把三维符号放置在点的位置从而生成

Multipatch.

下图为MultiPatch对象的贴图原理:

3.2Mulitipatch贴图、渲染原理

图13

接下来给大家介绍通过GeneralMultiPatchCreator创建•个有纹理MultiPatch的方法:

需要使用以下三个对象:

GeometryMaterial:用于构建材质,通过IGeometryMaterial创建的材质可以作为

TextureLineSymbol或者TextureFillSymbol属性用来创建这些符号,也M以把它添加

到GeometryMaterialList对象中,用于GeneralMultipatchCreator对象构建

Multipatch对象。

GeometryMaterialList:材质对象的容器用于GeneralMultiPatchCreator对象调用Init

方法时使用。

GeneralMultiPatchCreator:用于创建有纹理的贴图的Multipatch.o

以卜代码片段演示如何创建一个MultiPatch对象

///

<summary)

///

构建Multipatch几何对象

III

</summary>

///

<relurns〉返回Multipatch几何对象</relurns>

publicIMuitiPatchCreateMultipatch()

try

〃创建图形材质对象

IGeometryMaterialtexture=newGeometryMaterialClassO;

texture.TextureImage=@"C:\Temp\MyImage,jpg”;

〃创建材质列表对象

1G(?(T.'rialListmaterialList=newGeoii'I'ialListChiss();

〃向材质列表添加材质

materialList.AddMaterial(texture);

〃创建GeneraIMultiPatchCreator对象

IGeneraIMultir^atchCrecilormultiPatchCreator

二new(lenoi\ilMul1iPatchCreatorCkiss();

multiPatchCreator.Init(4,1,false,false,false,4,materialList);

〃设置Part:可以使三角扇或环

multiPatchCreator.SetPatchType(O,esriPcitchType.esriPatchTypeTriangleStrip);

multiPatchCreator.SetMaterialIndex(0,0);

multiPatchCreator.SetPatchPointIndex(0,0);

multiPatchCreator.SetPatchTexturePointIndex(0,0);

〃创建真实points.

WKSPointZupperLeft=newWKSPoiir.();

WKSPointZlowerLeft=newWKSPointZ();

WKSPointZupperRight=newWKSPointZ();

WKSPointZlowerRight=newWKSPointZ0;

upperLeft.X=0;

upperLeft.Y=0;

upperLeft.Z=0;

upperRight.X=300;

upperRight.Y=0;

upperRight.Z=0;

lowerl.eft.X=0;

lowerLeft.Y=0;

lowerLeft.Z=-100;

lowerRight.X=300;

lowerRight.Y=1;

lowerRight.Z=TOO;

multiPatchCreator.SetWKSPointZ(0,refupperRight);

multiPatchCreator.SetWKSPointZ(1,reflowerRight);

multiPatchCreator.SetWSPointZ⑵refupperLeft);

multiPatchCreator.SetWKSPointZ(3,reflowerLeft);

〃设置贴图的点

WKSPointtextureUpperLeft=newWKSPoint.();

WKSPointtextureLowerLeft=newWKSPoint();

WKSPointtextureUpperRight=newWKSPoint();

WKSPointtextureLowerRight=newWKSPoint();

textureUpperLeft.X=0;textureUpperLeft.Y=0;

textureUpperRight.X=1;textureUpperRight.Y=0;

textureLowerLeft.X=0;textureLowerLeft.Y=1;

textureLowerRight.X=1;textureLowerRight.Y=1;

multiPatchCreator.SetTextureWKSPoint(0,reftextureUpperRight);

multiPatchCreator.SetTextureWKSPoint(1,reftextureLowerRight);

multiFJatchCreator.SetTextureWKSPoint(2,reftextureUpperLeft);

multiPatchCreator.SetTextureWKSPoint(3,reftextureLowerLeft);

//创建MultiPatch对象

1Mu11iPatchmultiPatch=multiPatchCreator.CreateMultiPatch()asIMuiliPatch;

returnmultiPatch;

catch(ExceptionErr)

MessageBox.Show(Err.Message,“提示

〃,MessageBoxBulions.OK,MessageBoxIcon.Information);

)

2.4.9Geometry集合接口

通过前边对于具体的Geometry对象的介绍可知,除了Point对象之外,其他几何对象都

是通过其他儿何对象集合构建而成。如MultiPoint对象是点的集合,Path对象是Segment

对象的集合,Polyline对象是Path对象的集合,Polygon对象是Ring对象的集合,

Multipatch对象是TriangleStrip和TrangleFan,Trangle,Ring对象的集合。

ArcGISEngine提供了三个主要的几何图形集合接口用于对几何对象的操作,分别是

IPointCollectionJSegmentCollection和IGeometryCollection,这些接口揭示出

ArcGISEngine的几何模型的实质——它们是一种组合构成的模式,这种组合并不一定按

照严格的层次结构组织。

在前面介绍一些儿何对象的时候,也给大家演示了部分使用功能,这三个接口在程序开发中

经常使用到,接下来简单阐述以下这三个接口的使用方法。

1GeometryCollection接口IGeometryCollection接口被Polygon,Polyline,

Multipoint,Multipatch,Trangle,TrangleStrip,TrangleFan和GeometryBag所实

现。IGeometryCollection接口提供的方法可以让开发者对一个儿何对象的组成元素即子

对象进行添加,改变和移除。例如:

组成Polyline对象的子对象是Path对象。

组成Polygon对象的子对象是Ring对象。

组成Multipoint对象的子对象是Point对象。

组成MultiPatch对象的子对象是TrangleFanTrangleStrip,Triangle或Ring对象。

组成GeometryBag对象的是任何类型的几何体对象,实际上GeometryBag是一个口]■以

容纳任何类型几何对象的容器。

IGeometryCollection的Geometry属性可以通过一个索引值返回一个组成该几何对象

的某个子对象,而GeometryCount返回组成该几何对象的子对象的数目。

IGeometry的AddGeometry和AddGeometries方法都用于向一个几何对象添加子对

象,它们的区别是前者一次只能添加一个几何对象,而后者可以一次添加一个儿何对象数组。

除此之外,AddGeometry方法可以将子对象添加到几何的指定索引值的位置,而

AddGeometries方法将子对象数组添加到集合的最后。

在使用AddGeometry方法添加子对象到Polygon对象的过程中,如果子对■象即Ring出

现覆盖现象,那么多边形就没有封闭或出现了包含关系,那么这个Polygon就不是简单

Polygon,因此通过IGometryCollection来创建一个Polygon时,需要使用

ITopologicalOperator的Simplify方法保证其有效性。

通过IGeometryCollection创建一个Polygon对象的代码片段如卜:

III

<summary)

///

构造Polygon对象

III

</summary>

///

<paramname="pRingList”>Ring对象集合</param>

///

returns〉返回一个Polygon对象〈/returns)

private1PolygonConstruetorPo1ygon(List<JRing>pRingList)

try

〃创建一个Polygon对象

JGeoinoiry('oI1ectionpGCollection=newIV)lygonClass();

objecto=Type.Missing;

/遍历Ring集合

for(inti=0;i<pRingList.Count;i++)

〃通过IGeometryCollection接口的AddGeometry方法向Polygon对象中添加Ring子对象

pGCollection.AddGeometry(pRingList,refo,refo);

}

//QiSITopologicalOperator

/Topologica1OpenitorpTopological=pGCollectionas1TopologicsiOperator;

//执行Simplify操作

pTopologica1.SimplifyO;

IPolygonpPolygon=pGCollectionasIPolygon;

//返回Polygon对象

returnpPolygon;

)

catch(ExceptionErr)

(

Show(Err.Message,"提示”,WwyMQ'Rwi()n5.OK,,Icon.Information);

returnnull;

)

)

同样可以通过IGeometryCollection的AddGeometryCollection方法可以将一个

Polygon中的所有子对象Ring添加到另外一个多边形中,这样就实现了合并两个多边形对

象为一个多边形对象的功能,这非常有用。

以下代码片段演示如何合并两个Polygon对象为一个Polgyone对象:

///

〈summary)

〃/

合并两个Polygon

///

〈/summary)

///

<paramname="firstPolygon")第一个Polygon</param>

///

<parciinna毗二'第二个Polygon〈/param>

/〃

<returns返回合并后的Polygon</returns>

privateIPolygonMergePolygons(IPolygonfirstPolygon,IPolygonSecondPolygon)

(

try

(

//创建一个Polygon对象

/GeometryCo/1ectionpGCollectionl=newPolygonClass();

IGeome11-yCo11ectionpGCollection2=firstPolygonas1GeometryCoHe:

IGeome11-yCo1ledionpGCollection3-SecondPolygonasIGeo/ne11yCollecIion;

//添力口firstPolygon

pGCollectionl.AddGeometryCollection(pGCollection2);

//添力口SecondPolygon

pGCollection].AddGeometryCollection(pGCollection3);

//QI至ITopologicalOperator

1Topologic'ci1OpePcitoi-pTopological-pGCollection!as1TopologicalOperator;

//执行Simplify探作

pTopological.Simplify();

IPolygonpPolygon=pGCollectionlas[Polygon;

//返回Polygon对象

returnpPolygon;

catch(ExceptionErr)

儿、Show(Err.Message,”提示〃,J/.OK,,VcgcBcxkon.Information);

returnnull;

}

2.4.9.21SegmentCollection接U

!SegmentCollection接口被Path,Ring,PolylinePolygon四个类所实现,它们被称作

是Segment集合对象,使用这个接口可以处理组成Segment集合对象中的每一个子

Segment对象。使用ISegmentCollection接口可以为一个Segment集合对象添加,插

A,删除Segment子对象。!SegmentcollectionSetCircle/ffSetRectangle

法提供了一种简单不需要添加Segment的情况下构建一个完成的Path,Ring,Polyline和

Polygon的方法。

2.4.9.31Pointcollection接口

/PointCollection可以被多个几何对象类所实现,这些对象都是由多个点构成如:

Mullipoint,Path,Ring,Polyline,Polygon,TriangleFan,TrangleStrip,Trangle,Multipa

tch等,它们都可以称作PointCollection对象,通过IPointCollection接口定义的方法可

以获取,添加,插入,查询,移除几何对象中的某个顶点。同以上两个接口一样它也定义了

操作一个点集合对象的方法,例如通过AddPoint方法可以向PointCoUection对象中的特

定索引位添加一个点对象,如果不指定位置,则添加到最后。通过IPointCollection的Point

属性通过顶点索引可以得到某一顶点.

在本章节最后的Demo实例将为大家演示IPointCoTlection提供的功能。

2.4.1。几何对象总结

在Geometry模型中的几何对象分为两种类型,一类是用来直接构建要素类的称为高级几

何对象,一类用来构建高级几何对象相对低一级的几何对象成为构建几何对象如下表所示:

几何对象名

所属类别构成子几何对象用于创建和编辑的接口

IGeometryCollection,

Polyline高级Path

IPointCollection

IGeometryCollection,

Polygon高级Ring

IPointCollection

IGeometryCollection,

MultiPoint高级Point

IPointCollection

TrangleFan,RingIGeometryCollection,

MultiPatch高级

TrangleStripJrangle,IPointCollection

ISegmentCollection,

Ring低级Segment

IPointCollection

ISegmentCollection,

Path低级Segment

IPointCollection

Segment低级PointIPointJLine,ICurve

IGeometryCollection,

TriangleFan低级Point

IPointCollection

IGeometryCollection,

TriangleStrip低级Point

IPointCollection

IGeometryCollection,

Triangle低级Point

IPointCollection

Point高级/低级无IPoint

2.5空间参考

2.5.1空间参考简介

空间参考(SpatialReference)是GIS数据的骨骼框架,能够将我们的数据定位到相应

的位置,为地图中的每,•点提供准确的坐标。在同一个地图上显示的地图数据的空间参考

必须是一致的,如果两个图层的空间参考不一致,往往会导致两幅地图无法正确拼合,因此

开发个GIS系统时,为数据选择正确的空间参考非常重要。

ArcGISEngine提供了一系列对象供开发者管理GIS系统的坐标系统。对大部分开发者而

言了解ProjectedCoordinateSystem,GeographicCoordinateSystem,

SpatialReferenceEnvironment这三个组件类是非常有必要的,对于高级开发者而言,

可能需要自定义坐标系统可以使用这些对象

Projection,Datum,Angularllnit,Spheriod,PrimeMeridian和GeoTransformation

等。

2.5.2修改空间参考

以下代码片段演示了如何改变一个图层的空间参考。

1.Ill<summary>

2.///改变图层的空间参考

3.Ill</summary>

4.Ill<paramname="pFeatureLayer">|f|^</param>

5.Ill<paramname="pGeoType”>空间参考类型</param>

6.privatevoidChangeLayerRef(IFeatureLayerpFeatureLayer,intgcsType)

7.{

8.try

9・{

10.IFeatureClasspFeatureClass=pFeatureLayer.Featureclass;

11.//QI到IGeoDataset

12.IGeoDatasetpGeoDataset=pFeatureClassasIGeoDataset;

13.//QI到IGeoDatasetSchemaEdit

14.IGeoDatasetSchemaEditpGeoDatasetSchemaEdit=pGeoDatasetas

IGeoDatasetSchemaEdit;

15.if(pGeoDatasetSchemaEdit.CanAlterSpatialReference==true)

16.(

17.〃创建SpatialReferenceEnvironmentClass对象

18.ISpatialReferenceFactory2pSpaRefFactory=new

SpatialReferenceEnvironmentClass();

19.〃创建地理坐标系对象

20.IGeographicCoordinateSystempNewGeoSys=

pSpaRefFactory.CreateGeographicCoordinateSystem(gcsType);//4214代表

Beijingl954

21.pGeoDatasetSchemaEdit.AlterSpatialReference(pNewGeoSys);

22.}

23.)

24.catch(ExceptionErr)

25.{

26.MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,

MessageBoxIcon.Information);

27.}

28.}

2.6开发野外测量点构建一个Polygon几何要素程序

2.6.1功能情景描述

现有一存储为*.txt格式文本文件存储野外测量几个建筑物的坐标信息,如图所示,我们需

要通过开发一个功能能够读取这些这些坐标信息并根据坐标点建筑物属性来构建建筑物,并

创建成•个ShapeFile加载到MapControl±o

建筑物测量.txt-记事本

文件(F)编错(E)格式(0)查看(V)帮助(H)

K坐标,Y坐标,建筑物

100,100,建筑物1

200,100,建筑物1

200,200,建筑物1

100,200,建筑物1

500,400,建筑物2

600,300,建筑物2

700,如0,建筑物2

700,600,建筑物2

600,800,建筑物2

-100,100,建筑物3

-100,500,建筑物3

-200,500,建筑物3

-200,200,建筑物3

步骤一:添加一个Form,并添

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论