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

下载本文档

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

文档简介

ArcGISEngine基础开发教程

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

2几何对象与空间参考...15

3地图和地图布局…44

4图层符号化...64

5地图查询...91

6.空间分析...110

7地图输出…121

很多人是不熟悉ArcGISDesktop就开始从网上Down代码修改代码开始了自己的开发之旅,

包括我,我大学时代是Mapinfo的粉丝,一直没学过ArcGISo这是非常不科学的,因为

ArcGISDesktop就是从AO开发起来的,你只有掌握了ArcGISDesktop的使用,才能很容易

理解AO接口提供的功能。实际上ArcGISEngine二次开发说白了就是在ArcGISDesktop

所提供的功能和业务相结合进行的创新性开发。所以熟悉ArcGISDesktop以及ArcGIS数据

模型对学习ArcGISEngine二次开发非常重要!

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

ArcGISEngine9.3提供了丰富的GIS组件方便用户快速的定制开发一个GIS应用程序,无需

写代码即可实现GIS数据加载,地图操作等功能甚至可以实现高级编辑以及空间分析功能。

接下来使用ArcGISEngine9.3提供了MapControlApplication模块来创建第一个ArcGIS

Engine桌面应用程序,并为桌面应用应用程序提供编辑功能。

1.1目标

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

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

1.2准备工作

1)IDE:VisualStudio2005/2008

2)ArcGISEngineDeveloperkit9.3

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

1.3设计流程图

1.4制作地图文档

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

图1

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

在VisualStudio2008中新创建项G选择GArcGISdEnginedMapControlApplication,点击

确定,如图2所示:

图2

可以看到在VisualStudio中看到在新创建的项目中自动加载了ToolBarControR

TocControl>LicenseControlxMapControl四个ArcGISEngine控件以及一个.NET

ToolStripMenultem菜单控件,如图3所示:

图3

1.6加载MXD地图文档数据

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

图4

可以看到应用程序把MXD地图文档加载到MapControl地图上,可以使用ToolbarControl

提供的常用GIS功能如:放大,缩小,信息查询等功能。如图5所示:

图5

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

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

对话框,单击Items选项卡,单击Add…按钮弹出ControlsCommands对话框,单击Toolset

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

送ArcCngtneControlsA^Mication

File

•rS#A-Z1W-»«U

Id爱・代翔》

:Contro4^1ArcGISEngeMapControl

♦■于

trollName:axMapControll

电■子底s⑹

Hi对弁9啕G1快速添加Editor功健

AWffiSWU示意图

ActiveX-拖动Feature

WMainForm*

Editing工具集到

展W切(T)

黑蹩制体用

上flMOO

—一Li:定位置

3]贴贴旧—:・'I"..

XM»(D)

r?■性⑻

右键冷击、、

ToolbarControl单击Add按钮,

点击属性-弹出Controls

Commands对话

|Test123

图6

1.8体验使用编辑功能

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

行编辑创建一个新的面图元,如图7所示。

图7

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

二、学习几何对象与空间参考

2.1目标

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

2)熟悉空间参考

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

2.2准备工作

1)IDE:VisualStudio2005/2008

2)ArcGISEngineDeveloperkit9.3

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

2.3Geometry主要几何对象模型图

图1

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

地理分析的时候,就是处理一个包含几何形体的矢量对象;除了显示要素意外,控件对象选

择,要素符号化,标注要素,编辑要素都需要Geometry参与。图1是Geometry的主要几

何对象模型图,接下来将一一介绍这些几何对象。

2.4几何对象

2.4.IPoint和MultiPoint几何对象

2.4.1.IPoint几何对象

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

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

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

1.IPointpPoint=newPointClass();

2.pPoint.X=100;

3.pPoint.Y=100;

2.4.1.2MultiPoint几何对象

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

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

对象组成。

Point

Multipointwith

sixpoints

图2

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

〃定义第一个点

IPointpPoint1=newPointClass();

pPointl.X=100;

pPointl.Y=100;

〃定义第二个点

IPointpPoint2=newPointCkiss();

pPoint2.X=200;

pPoint2.Y=200;

……〃构建其他点

IPointCollecti<)npMultipoint=newMultipointClcis,-();

objecto=Type.Missing;

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

pMultipoint.AddPoint(pPointl,refo,refo);

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

pMultipoint.AddPoint(pPoint2,refo,refo);

...〃添加其他点

2.4.2Segment几何对象

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

..TbFrom

From^^f■

To

它有四个子类分别是“

有有四个子类分别是*

Segment图彩

子类名称

Line,二线线较

Line

•二始点

.<r

CircularArc-i二-

CircularArc配蛤二1

/K,播

1,・’

EllipticArc,后二-rro**

/EllipticArc

fi'•*

/•2RBMW

f1,MMiwAoJaMAA・«・M

\»<«<•(>•<«Asm

、♦・<ww(NN»

BezierCurv工蹇尔电凄,

,BezierCurves«

e•P<MMV。f

0**<»»«va/•

*(>«MNV*/'

.1

2.4.3Path和Ring几何对象

2.4.3.IPath儿何对象

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

Segment的起始点都是前一个Segment的终止点,即Path对象的中的Segment不能出现分

离,Path可以是任意数的Line,CircularArc,EllipticArc和BezierCurve的组合。

J个Path由四个

Segment组成

图4

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

2.4.3.2Ring几何对象

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

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

2.4.4Polyline和Polygon几何对象

2.4.4.IPolyline几何对象

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

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

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

(—\

只有一个Path组

/1成的Polyline

多个相连的Path

组成的Polyline

\______________________________________/

/\

多个分离的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;

pPoint1.X=100;

pPointl.Y=100;

〃定义第二个点

IPointpPoint2=newPointClass();

pPoint2.X=200;

pPoint2.Y=200;

〃创建一个Line对象

ILinepLine=newLineClass();

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

pLine.PutCoords(pPoint1,pPoint2);

//QI到ISegment

ISegmentpSegment=pLineasISegment;

〃创建一个Path对象

SegmentedlectionpPath=newPathClass();

objecto=Type.Missing;

//通过ISegmentCollection接口为Path对象添加Segment对象

pPath.AddSegment(pSegment,refo,refo);

〃创建一个Polyline对象

IGeometryCollectionpPolyline=newPolylineClass();

//通过IGeometryCollection为Polyline对象添加Path对象

pPolyline.AddGeometry(pPathasIGeometry,refo,refo);

2.4.4.2Polylgon几何对象

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

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

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

时针的,内环的方向是逆时针。Polygon通常用来代表有面积的多边形矢量对象,如行

政区,建筑物等。

Polygons

□□诉Ring

口外环

□内环

一个外环

一个内环

野簟

多个内环多个内环

图7

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

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

IScgmentCoIlectionpSegCollection=newRingClnss();

objecto=Type.Missing;

pSegCollection.AddSegment(pSegmentl,refo,refo);

pSegCollection.AddSegment(pSegment2,refo,refo);

〃QI至l」IRing接口封闭Ring对象,使其有效

[RingpRing=pSegCollectionasIRing;

pRing.Close();

〃使用Ring对象构建Polygon对象

IGeonietryCo11ecIionpGeometryColl=newPolygonClass();

pGeometryCol1.AddGeometry(pRing,refo,refo);

2.4.5Envelope几何对象

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

有一个Envelope对象,[Envelope是Envelope对象的主要接口,通过它可以获取儿何对象

的XMax,XMin,YMax,YMin,Height,Width属性。通过lEnvelope的Expand方法还可以按比例

缩放Envelope对象的范围,如下图所示:

UpperLeftUpp«rRlghc

YMax

_YMln

XMlnLowerRight

Envelope

Expand

二x缩放

:Y缩放

2.4.6Curve对象几何对象

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

Line,Polyline,Polygon,CircularArc,BezierCurve,EllipticArc和CircularArc都是曲线

的一种,它们都实现了【Curve接口。

ICurve接口的Length属性用于返回一个Curve对象的长度。

ICurve接口的FromPoint和ToPoint属性可以获得Curve对象的起止点。

ICurve接口的Reverseorientation方法可以改变一个Curve对象的节点次序即调动Curve

对象的起始点和终止点互相调换。

ICurve接口的IsClosed属性则可以判断一个Curve对象起始点和终止点是否在一个位置

上。

ICurve接口的GetSubcurve方法可以复制一条Curve对象的特定部分,例如一条10千米公

路的Curve对象,获取2-5千米处的公路的曲线代码片段如下所示:

//Q1到ICurve接口

ICurvepCurve=pPolylineasICurve;

〃创建一个Polyline对象

ICurvepNewCurve=newPolylineClciss();

boolbtrue=true;

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

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

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

的切线和法线。

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

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

2.4.7.ITriangleStrip几何对象

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

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

图9

2.4.7.2TrangleFan几何对象

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

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

2.4.7.3Triangle几何对象

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

图11

2.4.7.4Ring几何对象

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

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

图12

2.4.8Multipatch几何对象

Muitipatch几何对象用于描述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对象的贴图原理:

图13

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

要使用以下三个对象:

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

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

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

象。

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

法时使用。

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

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

〃/〈summary)

构建Multipatch几何对象

/〃〈/summary〉

/7/〈returns)返回Multipatch几何对象〈/returns)

public1MultiPatchCreateMultipatch()

(

try

//创建图形材质对象

IGeomeii\\!.ii-Tiiiltexture=newGeoineti-yMcitei'iHiCI.();

texture.Textureimage=@Z,C:\Temp\MyImage.jpg,z;

〃创建材质列表对象

I.istmaterialList=new(;。(川•riaII.istClas.();

〃向材质列表添加材质

materialList.AddMaterial(texture);

〃创建GeneralMultiPatchCreator对象

l(nTic!-;iI\lu11iI\iichCrfriiormu11iPatchCreator=newGeneralMultiPatchCreatorClassO;

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

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

multiPatchCreator.SetPatchType(O,esriPatchType.esriPatchTypeTriangleStrip);

multiPatchCreator.SetMaterialIndex(0,0);

multiPatchCreator.SetPatchPointIndex(0,0);

multiPatchCreator.SetPatchTexturePointlndex(0,0);

〃创建真实points.

WKSPointZupperLeft=newWKSPointZO;

WKSPointZlowerLeft=newWKSPointZO;

WKSPointZupperRight=newWKSPointZO;

WKSPointZlowerRight=newWKSPointZO;

upperLeft.X=0;

upperLeft.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,refupperRight);

multiPatchCreator.SetWKSPointZ(l,reflowerRight);

multiPatchCreator.SetWKSPointZ(2,refupperLeft);

multiPatchCreator.SetWKSPointZ(3,reflowerLeft);

〃设置贴图的点

WKSPointtextureUpperLeft=newWKSPoim();

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);

multiPatchCreator.SetTextureWKSPoint(2,reftextureUpperLeft);

multiPatchCreator.SetTextureWKSPoint(3,reftextureLowerLeft);

//创建MultiPatch对象

IMuitiPcitchmultiPatch=multiPatchCreator.CreateMultiPatchOasIMuitiPatch;

returnmultiPatch;

)

catch(ExceptionErr)

(

Show(Err.Message,“提示〃,MessageBoxButtons.OK,MessageBoxlcon.Information);

)

)

1

2.4.9Geometry集合接口

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

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

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

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

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

IPointCollection,ISegmentCollection和IGeometryCollection,这些接口揭示出ArcGIS

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

层次结构组织。

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

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

2.4.9.HGeometryCollection接口

IGeometryCollection接口被Polygon,Polyline,Multipoint,Multipatch,Trangle,T

rangleStrip,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,

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

Simplify方法保证其有效性。

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

///<summary>

〃/构造Polygon对象

〃/〈/summary)

〃/〈paramname="pRingLisl”>Ring对象集合</param>

〃/回一个Polygon对象〈/returns〉

privateIPolygonConstructorPolygon(List<IRing>pRingList)

(

try

(

〃创建一个Polygon对象

IGeometryCollectionpGCollection=newPolygonClassO;

objecto=Type.Missing;

〃遍历Ring集合

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

(

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

pGCollection.AddGeometry(pRingList,refo,refo);

/

//QISITopoIogica/Operator

ITopologiCeilOpentiorpTopological=pGCollectionasIToi)oicn

//执行Simplify操作

pTopological.SimplifyO;

[PolygonpPo1ygon=pGCo1lectionas/Polygon;

〃返回Polygon对象

returnpPolygon;

)

catch(ExceptionErr)

(

I'cssngcHox.Show(Err.Message,”提示”,tous.OK,,:>c>x/con.Information);

returnnull;

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

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

形对象的功能,这非常有用。

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

///<summai'y>

合并两个Polygon

/〃〈/summary〉

///<pctnnnnanie="771stPolygon”>第一个Polygon</param>

7/<paramname^SecondPolygon"、第二个Polygon</param>

、i*turns返回合并后的Polygon</returns>

private/PolygonMergePolygons([PolygonfirstPolygon,IPo!ygonSecondPolygon)

(

try

(

//创建一个Polygon对象

IGeometryCollecIionpGCollectionl=newPolygonClass();

IGoomotryi/■'pGCollection2=firstPolygonasKieometryColle(:

IGeome11yCollectionpGCollection3-SecondPolygonasIGeome11\Colleetion;

//添力口firstPolygon

pGCollectionl.AddGeometryCollection(pGCollection2);

//添加SecondPolygon

pGCollectionl.AddGeomeLryCollection(pGCollection3);

//QI至ITopologica1Operator

ITopo1i(•,•y/0;»c!\norpTopological-pGCollectionlasITopolo^icu/<:;

//执行Simplify操作

pTopological.SimplifyO;

[PolygonpPoIygon=pGCo1ledion1as/Polygon;

//返回Polygon对象

returnpPolygon;

)

catch(ExceptionErr)

(

Show(Err.Message,“提示〃,Mossi-igeBoxButIons.OK,,MessageBcxIcon.Information);

returnnull;

)

ISegmentCollection接口

ISegmentCollection接口被Path,Ring,Polyline和Polygon四个类所实现,它们被称作是

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

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

子对象。ISegmentCollection接口SetCircle和SetRectangle方法提供了一种简单不需要添加

Segment的情况下构建一个完成的Path,Ring,Polyline和Polygon的方法。

IPointCollection接口

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

Mullipoint,Path,Ring,Polyline,Polygon,TriangleFan,TrangleStrip,Trangle,Multipatch等,它们都

可以称作PointCollection对象,通过IPointCollection接口定义的方法可以获取,添加,插入,

查询,移除几何对象中的某个顶点。同以上两个接口一样它也定义了操作一个点集合对象的

方法,例如通过AddPoint方法可以向PointCollection对象中的特定索引位添加•个点对象,

如果不指定位置,则添加到最后。通过IPointCollection的Point属性通过顶点索引可以得到

某一顶点。

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

2.4.10几何对象总结

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

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

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

IGeometryCollection,

Polyline高级Path

IPointCollection

IGeometryCollection,

Polygon高级Ring

IPointCollection

IGeometryCollection,

MultiPoint高级Point

IPointCollection

TrangleFan,RingIGeometryCollection,

MultiPatch高级

TrangleStrip,Trangle,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数据的骨骼框架,能够将我们的数据定位到相应的

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

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

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

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

了解ProjectedCoordinateSystem,GeographicCoordinateSystem,SpatialReference

Environment这三个组件类是非常有必要的,对于高级开发者而言,可能需要自定义坐标系

统可以使用这些对象Projection,Datum,AngularUnit,Spheriod,PrimeMeridian和

GeoTransformation等。

2.5.2修改空间参考

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

1./11<summary>

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

3,/1/</summary>

4.111<paramname」pFeatureLayer图层</param>

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

6.privatevoidChangeLayerRef(lFeatureLayerpFeatureLayer,intgcsType)

7

8.try

10.IFeatureCiasspFeatureCiass=pFeatureLayer.Featuredass;

11.11QI到IGeoDataset

12.IGeoDatasetpGeoDataset=pFeatureCiassasIGeoDataset;

13.11QI到IGeoDatasetSchemaEdit

14.IGeoDatasetSchemaEditpGeoDatasetSchemaEdit=pGeoDatasetas

IGeoDatasetSchemaEdit;

15.if(pGeoDatasetSchemaEdit.CanAlterSpatialReference==true)

16.(

17.11创建SpatialReferenceEnvironmeatClass对象

18.ISpatialReferenceFactory2pSpaRefFactory=new

SpatialReferenceEnvironmentClass();

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

20.IGeographicCoordinateSystempNewGeoSys=

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

Beijing1954

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加载到MapControlto

文件(F)编辑(E1梏式(01查看(V)帮助(H)

K坐捺Y坐标,建铳物

100,100,建筑物1

200,100.建筑物1

200,200,建筑物1

100,200,建筑物1

500,400,建筑物2

600,300,建筑物2

700,400,建筑物2

700,600,建筑物2

600,800,建筑物2

-100,100,建筑物3

-100,500,建筑物3

-200

温馨提示

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

评论

0/150

提交评论