ArcGISEngine基础开发教程1Word文档下载推荐.docx
- 文档编号:22607060
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:146
- 大小:5.21MB
ArcGISEngine基础开发教程1Word文档下载推荐.docx
《ArcGISEngine基础开发教程1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ArcGISEngine基础开发教程1Word文档下载推荐.docx(146页珍藏版)》请在冰豆网上搜索。
下载(72.31KB)
图1
1.5创建第一个ArcGISEngine桌面应用程序
在VisualStudio2008中新创建项à
选择à
ArcGISà
Engineà
MapControlApplication,点击确定,如图2所示:
下载(38.28KB)
15
图2
可以看到在Visual Studio中看到在新创建的项目中自动加载了ToolBarControl、TocControl、LicenseControl、MapControl四个ArcGIS Engine控件以及一个.NETToolStripMenuItem菜单控件,如图3所示:
图3
1.6加载MXD地图文档数据
单击F5键运行程序,然后单击打开MXD地图文档按钮打开MXD地图文档,如图4所示:
下载(46.75KB)
2009-5-1410:
00
图4
可以看到应用程序把MXD地图文档加载到MapControl地图上,可以使用ToolbarControl提供的常用GIS功能如:
放大,缩小,信息查询等功能。
如图5所示:
图5
1.7为应用程序添加编辑功能
在应用程序设计模式下右键单击ToolbarControl,单击属性选项弹出ToolbarControl属性对话框,单击Items选项卡,单击Add…按钮弹出ControlsCommands对话框,单击Toolset选项卡,选择FeatureEditors选项,拖动到属性对话框工具栏的指定位置。
如图6所示
图6
1.8体验使用编辑功能
运行应用程序,可见工具条多了一个和ArcMap中功能类似的编辑工具集,开始对面图层进行编辑创建一个新的面图元,如图7所示。
图7
综上GIS应用开发人员通过使用ArcGISEngine可以快速创建自定义GIS应用程序。
下载次数:
53
二、学习几何对象与空间参考
2.1目标
1)熟悉ArcGISEngineGeometry模型,通过程序构建常用几何对象
2)熟悉空间参考
3)通过野外测量点构建一个polygonshapefile功能开发
2.2准备工作
1)IDE:
2)ArcGISEngineDeveloperkit9.3
3)自造一份包含X,Y坐标的*.txt文本文档数据(即野外测量点)
2.3Geometry主要几何对象模型图
下载(27.64KB)
19
图1
Geometry是ArcGISEngine中使用最为广泛的对象集之一,用户在创建、删除、编辑和进行地理分析的时候,就是处理一个包含几何形体的矢量对象;
除了显示要素意外,控件对象选择,要素符号化,标注要素,编辑要素都需要Geometry参与。
图1是Geometry的主要几何对象模型图,接下来将一一介绍这些几何对象。
2.4几何对象
2.4.1Point和MultiPoint几何对象
2.4.1.1Point几何对象
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对象组成。
4.下载(7.29KB)
5.2009-5-1322:
23
图2
以下代码片段演示如何构建Multipoint对象:
//定义第一个点
IPointpPoint1=newPointClass();
pPoint1.X=100;
pPoint1.Y=100;
//定义第二个点
IPointpPoint2=newPointClass();
pPoint2.X=200;
pPoint2.Y=200;
……//构建其他点
IPointCollectionpMultipoint=newMultipointClass();
objecto=Type.Missing;
//添加第一个点,不需要设置点的顺序,参数设置为Type.Missing
pMultipoint.AddPoint(pPoint1,refo,refo);
//添加第二个点,不需要设置点的顺序,参数设置为Type.Missing
pMultipoint.AddPoint(pPoint2,refo,refo);
……//添加其他点
2.4.2Segment几何对象
6.下载(9.36KB)
7.2009-5-1411:
58
8.下载(42.99KB)
9.2009-5-1411:
2.4.3Path和Ring几何对象
2.4.3.1Path几何对象
Path是连续的Segment的集合,除了路径的第一个Segment和最后一个Segment外其余的Segment的起始点都是前一个Segment的终止点,即Path对象的中的Segment不能出现分离,Path可以是任意数的Line,CircularArc,EllipticArc和BezierCurve的组合。
10.下载(8.93KB)
11.2009-5-1411:
图4
一个或多个Path组成一个Polyline对象。
2.4.3.2Ring几何对象
Ring是一个封闭的Path即起始和终止点有相同的坐标值。
它有内部和外部属性。
12.下载(4.05KB)
13.2009-5-1411:
图5
一个或多个Ring对象组成一个Polygon对象。
2.4.4Polyline和Polygon几何对象
2.4.4.1Polyline几何对象
Polyline对象是由一个或多个相连或者不相连的path对象的有序集合,它可以是单个Path对象组成,也可以是多个相连的Path对象组成,或者是多个分离的Path组成,如下图所示。
Polyline通常用来代表线状地物如道路,河流,管线等等。
14.下载(35.17KB)
15.2009-5-1411:
图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对象:
//创建一个Line对象
ILinepLine=newLineClass();
//设置Line对象的起始终止点
pLine.PutCoords(pPoint1,pPoint2);
//QI到ISegment
ISegmentpSegment=pLineasISegment;
//创建一个Path对象
SegmentCollectionpPath=newPathClass();
//通过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(外环)和Inner Ring(内环)之分。
外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环的方向是逆时针。
Polygon通常用来代表有面积的多边形矢量对象,如行政区,建筑物等。
16.下载(36.93KB)
17.2009-5-1411:
图7
以下代码片段演示如何构建一个Polygon:
//创建一个Ring对象,通过ISegmentCollection接口向其中添加Segment对象
ISegmentCollectionpSegCollection=newRingClass();
objecto=Type.Missing;
pSegCollection.AddSegment(pSegment1,refo,refo);
pSegCollection.AddSegment(pSegment2,refo,refo);
//QI到IRing接口封闭Ring对象,使其有效
IRingpRing=pSegCollectionasIRing;
pRing.Close();
//使用Ring对象构建Polygon对象
IGeometryCollectionpGeometryColl=newPolygonClass();
pGeometryColl.AddGeometry(pRing,refo,refo);
2.4.5Envelope几何对象
Envelope是所有几何对象的外接矩形,用于表示几何对象的最小边框,所有的几何对象都有一个Envelope对象,IEnvelope是Envelope对象的主要接口,通过它可以获取几何对象的XMax,XMin,YMax,YMin,Height,Width属性。
通过IEnvelope的Expand方法还可以按比例缩放Envelope对象的范围,如下图所示:
18.下载(34.35KB)
19.2009-5-1411:
2.4.6Curve对象几何对象
除去Point,MultiPoint和Envelope外,其他所有的几何体都可以看做是Curve(曲线)。
Line,Polyline,Polygon,CircularArc,BezierCurve,EllipticArc和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;
ICurvepNewCurve=newPolylineClass();
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.1TriangleStrip几何对象
TriangelStrip对象是由一系列点定义的曲面片组成,而曲面片是有若干个三角形所组成,所以这个曲面可以定义为:
(0,1,2),(2,1,3),(2,3,4),(4,3,5)。
20.下载(13.61KB)
21.2009-5-1411:
33
图9
2.4.7.2TrangleFan几何对象
一个TrangleFan对象由一系列点定义的曲面片组成,所不同的是所有的三角形共享一个顶点。
如下图所示,所以这个曲面可以定义为:
(0,1,2),(0,2,3),(0,3,4),(0,4,5)。
22.下载(13.39KB)
23.2009-5-1411:
34
图10
2.4.7.3Triangle几何对象
Triangle由三个点所确定如下图,一个Triangle可定义为(0,1,2)等。
24.下载(12.76KB)
25.2009-5-1411:
图11
2.4.7.4Ring几何对象
Ring和前边介绍的组成Polygon的Ring一样,例如下边一个房屋组成它的墙是个OutRing对象,而窗户和门是InnerRing对象。
26.下载(18.73KB)
27.2009-5-1411:
图12
2.4.8Multipatch几何对象
Multipatch几何对象用于描述3D图形,可以由TriangleStrip,TriangleFan,Triangle和ring对象组合构成组成。
Multipatch可以通过多种方式创建,一种是通过导入外部3D格式数据文件(3DStudioMax.3dsfiles,OpenFlight.fltfiles,COLLADA.daefiles,Sketchup.skpfiles,VRML.wrlfiles),另外ArcGISEngine提供了多种创建Multipatch几何对象的方法:
如果创建没有贴图纹理,没有法向,没有组成部分信息的Multipatch时,只需创建好组成的Multipatch的各个部分即可,然后通过MultiPatch的IGeometryCollection接口添加各个组成部分即可。
如果要为Multipatch每个组成部分添加纹理信息,法向信息,属性信息就必须使用GeneralMultiPatchCreator对象来创建,通过其IGeneralMultiPatchInfo接口来为MultiPatch各个组成部分定义法向,材质,属性信息。
通过IGeneralMultiPatchInfo接口可以获取这些MultiPatch的各个组成部分的信息。
通过IConstructMultiPatch接口和IExtrude接口操作GeometryEnvironment对象可以通过拉伸Polyline对象(拉伸为墙)和Polygon对象(拉伸为多面体)来创建MultiPatch.
通过访问3D符号库,获取3DSymbol来渲染点,把三维符号放置在点的位置从而生成Multipatch.
下图为MultiPatch对象的贴图原理:
28.下载(40.78KB)
29.2009-5-1411:
24
图13
接下来给大家介绍通过GeneralMultiPatchCreator创建一个有纹理MultiPatch的方法:
需要使用以下三个对象:
GeometryMaterial:
用于构建材质,通过IGeometryMaterial创建的材质可以作为TextureLineSymbol或者TextureFillSymbol属性用来创建这些符号,也可以把它添加到GeometryMaterialList对象中,用于GeneralMultipatchCreator对象构建Multipatch对象。
GeometryMaterialList:
材质对象的容器用于GeneralMultiPatchCreator对象调用Init方法时使用。
GeneralMultiPatchCreator:
用于创建有纹理的贴图的Multipatch.。
以下代码片段演示如何创建一个MultiPatch对象
///<
summary>
///构建Multipatch几何对象
/summary>
returns>
返回Multipatch几何对象<
/returns>
publicIMultiPatchCreateMultipatch()
{
try
//创建图形材质对象
IGeometryMaterialtexture=newGeometryMaterialClass();
texture.TextureImage=@"
C:
\Temp\MyImage.jpg"
;
//创建材质列表对象
IGeometryMaterialListmaterialList=newGeometryMaterialListClass();
//向材质列表添加材质
materialList.AddMaterial(texture);
//创建GeneralMultiPatchCreator对象
IGeneralMultiPatchCreatormultiPatchCreator=newGeneralMultiPatchCreatorClass();
multiPatchCreator.Init(4,1,false,false,false,4,materialList);
//设置Part:
可以使三角扇或环
multiPatchCreator.SetPatchType(0,esriPatchType.esriPatchTypeTriangleStrip);
multiPatchCreator.SetMaterialIndex(0,0);
multiPatchCreator.SetPatchPointIndex(0,0);
multiPatchCreator.SetPatchTexturePointIndex(0,0);
//创建真实points.
WKSPointZupperLeft=newWKSPointZ();
WKSPointZlowerLeft=newWKSPointZ();
WKSPointZupperRight=newWKSPointZ();
WKSPointZlowerRight=newWKSPointZ();
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(1,reflowerRight);
multiPatchCreator.SetWKSPointZ(2,refupperLeft);
multiPatchC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcGISEngine 基础 开发 教程