AE开发实例代码总结Word文档下载推荐.docx

上传人:b****6 文档编号:17069264 上传时间:2022-11-28 格式:DOCX 页数:35 大小:476KB
下载 相关 举报
AE开发实例代码总结Word文档下载推荐.docx_第1页
第1页 / 共35页
AE开发实例代码总结Word文档下载推荐.docx_第2页
第2页 / 共35页
AE开发实例代码总结Word文档下载推荐.docx_第3页
第3页 / 共35页
AE开发实例代码总结Word文档下载推荐.docx_第4页
第4页 / 共35页
AE开发实例代码总结Word文档下载推荐.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

AE开发实例代码总结Word文档下载推荐.docx

《AE开发实例代码总结Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《AE开发实例代码总结Word文档下载推荐.docx(35页珍藏版)》请在冰豆网上搜索。

AE开发实例代码总结Word文档下载推荐.docx

);

//找到对应的地物类

IFeatureLayerFly=newFeatureLayerClass();

//建立新图层

Fly.FeatureClass=Fcls;

//将地物赋给相应的层

MapCtr.Map.AddLayer(Fly);

//添加层

MapCtr.ActiveView.Refresh();

//刷新地图

其中District为地物类的名字,MapCtr为AE中MapControl的对象。

上边的通过属性设置加载数据空间的方式还可以用于SDE数据库,在SDE数据库加载时会介绍。

以下为通过设置属性加载Access数据库的完整C#代码:

publicvoidAddAccessDBByPro()

{

IPropertySetPropset=newPropertySetClass();

Propset.SetProperty("

DATABASE"

@"

D:

\test\Ao\data\sh\MapData.mdb"

);

IFeatureWorkspaceWorkspace=Fact.Open(Propset,0)asIFeatureWorkspace;

IFeatureClassFcls=Workspace.OpenFeatureClass("

IFeatureLayerFly=newFeatureLayerClass();

Fly.FeatureClass=Fcls;

MapCtr.Map.AddLayer(Fly);

}

B、通过数据库名字加载个人数据库

publicvoidAddAccessDBByName()

{

IworkspaceNamepWorkspaceName=newWorkspaceNameClass();

pWorkspaceName.WorkspaceFactoryProgID=“esriDataSourcesGDB.AccessWorkspaceFactory”;

pWorkspaceName.PathName=@“D:

\test\Ao\data\sh\MapData.mdb”;

INamen=pWorkspaceNameasIName;

IFeatureWorkspaceWorkspace=n.Open()asIFeatureWorkspace;

MapCtr.Map.AddLayer(Fly);

首先创建一个个人数据库工作空间名,再指定工作空间名的ProgID,以确定打开的是什么类型的工作空间,例如在打开Access个人数据库时,使用下面代码;

属性WorkspaceFactoryProgID可以确保工作空间是AccessWorkspaceFactory,即个人数据库,同时要指定打开数据库路径。

为了打开数据库,打开工作空间必须使用IName接口(思考有没有其他办法),,所以接着定义IName、对象,并把工作空间名转换成IName类型,并赋值给IName对象,然后通过IName对象的open方法打开相应的工作空间,代码如下:

2、AE开发编辑功能

数据编辑问题

1.需要了解的概念

长事务短事务编辑空间抽象类,类,和组件对象类

2、最基本的添加点线面功能

添加点(方法有多种,基本思路一样,只是少量的接口有变化)

通过FeatureClass的CreatFeature函数来添加地物。

publicvoidAddPointByStore()

//得到要添加地物的图层

IFeatureLayerl=MapCtr.Map.get_Layer(0)asIFeatureLayer;

//定义一个地物类,把要编辑的图层转化为定义的地物类

IFeatureClassfc=l.FeatureClass;

//先定义一个编辑的工作空间,然后把它转化为数据集,最后转化为编辑工作空间,

IWorkspaceEditw=(fcasIDataset).WorkspaceasIWorkspaceEdit;

IFeaturef;

IPointp;

//开始事务操作

w.StartEditing(false);

//////?

?

//开始编辑

w.StartEditOperation();

for(inti=0;

i<

100;

i++)

//创建一个地物

f=fc.CreateFeature();

p=newPointClass();

//设置点的坐标

p.PutCoord(i,i);

//确定图形类型

f.Shape=p;

//保存地物

f.Store()

//结束编辑

w.StopEditOperation();

//结束事务操作

w.StopEditing(true);

二、添加线

方法跟添加点一样,不同的只是地物类型不一样而已,

 

AE中各类库的介绍

1、问题一:

什么是UI组件?

2、类库介绍

空间拓扑运算

1、高级几何对象:

点(point)、多点(multipoint)、线(polyline)、面(polygon)、multipatch等。

(multipatch:

多片,三维地形图中的地图符号包括点状符号、线状符号、面状符号、体状符号以及多片(MultiPatch)符号等)

2、拓扑:

空间拓扑描述的事自然界地理对象的空间位置关系,即相邻、重合、连通等。

是在同一个要素集下的要素类之间的关系的集合,所以要参与一个拓扑的所有要素类,必须在同一个要素集内(也就是具有同一个空间参考),这样进行的拓扑检查才是精确的。

3、一个要素集可以有多个拓扑,但每个要素类最多只能参与一个拓扑,一个拓扑中可以定义多个规则,是地理对象空间属性的一部分,在目前ESRI提供的数据存储方式中,Coverage和GeoDatabase能够建立拓扑,而Shape格式的数据不能建立拓扑。

4、esriTRTAny————任何拓扑规则,查询拓扑的时候用(ESRI提供的拓扑关系)

5、AE中提供了ITopologicalOperator接口用于拓扑运算,ITopologicalOperator接口用来通过对已存在的几何对象做空间拓扑运算,以产生新的集合对象。

ITopologicalOperator接口在GIS开发中的使用非常广泛,通常GIS系统中的缓冲区分析、裁剪几何图形、几何图形差分操作、几何图形合并操作等都需要此接口。

Boundary方法用于几何图形对象的边界。

Polygon的几何对象的Boundary是组成它的Polyline几何对象,Polyline几何对象的Boundary是组成它的顶点Point几何对象,而Point的几何对象的Boundary是空对象。

Buffer用于集合对象缓冲区分析拓扑操作,该方法用于给一个高级几何对象产生一个缓冲区,无论是Polygon、Polyline、还是Point,他们的缓冲区都是具有面积的几何对象。

Clip用于对几何对象进行裁剪空间拓扑操作。

Clip方法可用一个Envelope对象对一个几何对象进行裁剪,结果是几何对象被Envelope对象所包围的部分。

ConstructUion用于将多个枚举对象与单个几何对象合并为单个几何对象。

ConvexHull用于构建几何对象的凸多边形。

ConvexHull方法用于产生一个几何图形的最小的边框凸多边形(没有凹面包含几何图形的最小多边形)

Cut用于切割几何对象,不支持GeometryBags几何对象,它可以指定一条切割曲线和一个几何图形,经过切割运算后把几何图形分为左右两部分,左右两部分是相对曲线的方向而言的。

点与多点不可被分割。

Polyline和Polygon只有与切割曲线相交时才能执行Cut方法。

Difference用于从一个几何图形中减去其与另一个图形相交的部分,产生两个几何对象的差集。

Intersection方法用于两个同纬度几何对象的交集部分。

Simplify用于使几何对象拓扑一致。

SymmetricDifference对称差分可将两个几何图形的并集部分减去两个几何图形交集的部分。

开发实例

一、鹰眼功能的实现:

分析:

鹰眼图的操作主要由以下几个动作,当在一个控件中移动一幅图的时候另一控件中的图也发生变化,当在主控件中重新加载一幅图的时候,另外一个控件的图也发生相应的变化,同时我们在鸟瞰的控件中加入一红色边框,注意这个其实是一个面,只是填充的颜色是透明的而已。

通过分析我们知道,我们要添加两个MapControl控件,名字分别是axMapControl1和axMapControl2,其中axMapControl1为主图,而axMapControl2为鸟瞰图。

方法:

步骤一:

对于名称为axMapControl1的MapControl控件,只需要在axMapControl1的OnExtentUpdated和OnMapReplaced中分别添加以下代码:

privatevoidaxMapControl1_OnExtentUpdated(objectsender,IMapControlEvents2_OnExtentUpdatedEvente)

//得到新范围

IEnvelopepEnvelope=(IEnvelope)e.newEnvelope;

IGraphicsContainerpGraphicsContainer=axMapControl2.MapasIGraphicsContainer;

IActiveViewpActiveView=pGraphicsContainerasIActiveView;

//在绘制前,清除axMapControl2中的任何图形元素

pGraphicsContainer.DeleteAllElements();

IRectangleElementpRectangleEle=newRectangleElementClass();

IElementpElement=pRectangleEleasIElement;

pElement.Geometry=pEnvelope;

//设置鹰眼图中的红线框

IRgbColorpColor=newRgbColorClass();

pColor.Red=255;

pColor.Green=0;

pColor.Blue=0;

pColor.Transparency=255;

//产生一个线符号对象

ILineSymbolpOutline=newSimpleLineSymbolClass();

pOutline.Width=3;

的属性

IFillSymbolpFillSymbol=newSimpleFillSymbolClass();

pFillSymbol.Color=pColor;

pFillSymbol.Outline=pOutline;

IFillShapeElementpFillShapeEle=pElementasIFillShapeElement;

pFillShapeEle.Symbol=pFillSymbol;

pGraphicsContainer.AddElement((IElement)pFillShapeEle,0);

pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);

}

privatevoidaxMapControl1_OnMapReplaced(objectsender,IMapControlEvents2_OnMapReplacedEvente)

if(axMapControl1.LayerCount>

0)

axMapControl2.Map=newMapClass();

for(inti=0;

i<

=axMapControl1.Map.LayerCount-1;

i++)

axMapControl2.AddLayer(axMapControl1.get_Layer(i));

axMapControl2.Extent=axMapControl1.Extent;

axMapControl2.Refresh();

步骤二:

对于名称为axMapControl2的MapControl控件,只需要在axMapControl2的OnMouseMove和OnMouseDown中分别添加以下代码:

privatevoidaxMapControl2_OnMouseMove(objectsender,IMapControlEvents2_OnMouseMoveEvente)

if(e.button==1)

IPointpPoint=newPointClass();

pPoint.PutCoords(e.mapX,e.mapY);

axMapControl1.CenterAt(pPoint);

axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);

privatevoidaxMapControl2_OnMouseDown(objectsender,IMapControlEvents2_OnMouseDownEvente)

if(axMapControl2.Map.LayerCount>

elseif(e.button==2)

IEnvelopepEnv=axMapControl2.TrackRectangle();

axMapControl1.Extent=pEnv;

二、显示属性表的信息

我们知道ArcMap中的TableofContents有很多功能,如下图:

而ArcGISEngine提供的TOCControl控件几乎没有提供,那么这些都是需要自己开发的,在这里我做一个显示属性表的功能。

要显示某一个图层的属性表,首先要将这个图层选中,然后在另外一个Form中将选中的这个图层的属性信息进行显示。

添加一个上下文菜单,添加一个新的Form窗体,在这个新的窗体上添加GridView控件,并在TOCControl控件的OnMouseDown事件下添加如下代码(pGlobalFeatureLayer是我定义的一个全局变量):

privatevoidaxTOCControl1_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvente)

esriTOCControlItempItem=newesriTOCControlItem();

pGlobalFeatureLayer=newFeatureLayerClass();

IBasicMappBasicMap=newMapClass();

objectpOther=newobject();

objectpIndex=newobject();

axTOCControl1.HitTest(e.x,e.y,refpItem,refpBasicMap,refpGlobalFeatureLayer,refpOther,refpIndex);

if(e.button==2)

context.Show(axTOCControl1,e.x,e.y);

在上下文菜单的打开属性表的Click事件中添加如下代码:

privatevoid打开属性表ToolStripMenuItem_Click(objectsender,EventArgse)

FormTableFt=newFormTable(pGlobalFeatureLayerasIFeatureLayer);

Ft.Show();

在新的窗体中添加一个将属性表显示到GridView控件中的函数,如下:

publicvoidItable2Dtable()

IFieldspFields;

pFields=pFeatureLayer.FeatureClass.Fields;

dtGridView.ColumnCount=pFields.FieldCount;

pFields.FieldCount;

i++)

stringfldName=pFields.get_Field(i).Name;

dtGridView.Columns[i].Name=fldName;

dtGridView.Columns[i].ValueType=System.Type.GetType(ParseFieldType(pFields.get_Field(i).Type));

IFeatureCursorpFeatureCursor;

pFeatureCursor=pFeatureLayer.FeatureClass.Search(null,false);

IFeaturepFeature;

pFeature=pFeatureCursor.NextFeature();

while(pFeature!

=null)

string[]fldValue=newstring[pFields.FieldCount];

stringfldName;

fldName=pFields.get_Field(i).Name;

if(fldName==pFeatureLayer.FeatureClass.ShapeFieldName)

fldValue[i]=Convert.ToString(pFeature.Shape.GeometryType);

else

fldValue[i]=Convert.ToString(pFeature.get_Value(i));

dtGridView.Rows.Add(fldValue);

数据库知识:

DB2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1