文档库 最新最全的文档下载
当前位置:文档库 › ArcGISEngine二次开发提高篇

ArcGISEngine二次开发提高篇

ArcGISEngine二次开发提高篇
ArcGISEngine二次开发提高篇

ArcGIS Engine二次开发

——提高篇

1缩略图(鹰眼)

鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。在本小节中我们将学习如何制作这种鹰眼。

1.1添加控件

新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。布局如下图所示。左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。

图 1 界面布局

在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。

图2添加按钮

1.2代码添加及解释

鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。

下面开始实现鹰眼功能,添加、、

三个引用。首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下:

private void axMapControl1_OnExtentUpdated(object sender, e)

{

et项目,项目名称为Buffer,将Form1的名字设置为MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl,Button控件的Name属性设定为btnBuffer,Text属性设定为“缓冲区分析”。控件布局效果如下图所示。

图3控件布局效果

在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。

图4添加按钮

1.2.1代码添加及解释

首先添加如下四个命名空间的引用。

在使用Geoprocessor工具实现缓冲区分析时,需要首先定义一个Geoprocessor对象,因为命名空间“也包含Geoprocessor类,为了避免混淆,我们使用命名空间来定义Geoprocessor,然后设置Geoprocessor中的环境参数,这里我们使用默认参数。然后定义一个操作类Buffer,并设置参数,生成缓冲区的参数包含原始图层,缓冲半径和输出路径,最后使用已定义的Geoprocessor 对象执行即可。双击“生成缓存区”按钮,添加代码如下:

private void btnBuffer_Click(object sender, EventArgs e)

{

hp)|*.shp";

hp" != {

("输出路径错误!");

return;

}

et项目,项目名称为OverLay,将Form1的名字设置为MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl,Button控件的Name属性设定为btnIntersect,Text属性设定为“叠置求交”。控件布局效果如下图所示。

图5控件布局效果

在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。

图6添加按钮

1.2.2代码添加及解释

首先添加如下引用:

using与缓冲区分析的实现类似,在使用Geoprocessor工具实现叠置分析时,需要首先定义一个Geoprocessor对象,因为命名空间“也包含Geoprocessor类,为了避免混淆,我们使用命名空间来定义Geoprocessor,然后设置Geoprocessor中的环境参数,这里我们使用默认参数。然后定义一个操作类,这里为Intersect,然后设置其操作参数,这里我们仅设置输入的要素,最后使用已定义的Geoprocessor对象执行即可。双击“生成缓存区”按钮,添加代码如下:private void btnIntersect_Click(object sender, EventArgs e)

{

hp)|*.shp";

= "选择第一个要素";

hp)|*.shp";

= "选择第二个要素";

hp)|*.shp";

hp";

;

string strName = (index);

Union et项目,项目名称为OverLay,将Form1的名字设置为MainForm,Text 属性设为“地图编辑”,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl、四个Button、两个ComboBox、两个Label和一个GroupBox等控件。

将ToolbarControl 、TOCControl的伙伴控件设为MapControl,ToolbarControl 加载添加数据按钮和地图浏览的功能按钮。控件布局效果如下图所示。

图7界面效果

控件属性设置如下:

表1控件属性设置

1.3添加引用和代码

ArcEngine中的地图编辑使用IWorkspaceEdit接口来进行编辑状态的管理,在需要对指定的工作空间进行编辑时,首先使用IWorkspaceEdit获取该工作空间的数据,然后使用StartEditing 方法开始编辑状态,StartEditOperation方法打开具体编辑的操作,编辑完成后,使用StopEditOperation方法关闭编辑操作,使用StopEditing方法关闭编辑状态,完成编辑。

在本例中,我们实现了新的点线面要素的创建和移动的功能,涉及到了比较复杂的鼠标与地图间的交互,这个功能的实现中,IDisplayFeedback是一个十分关键的接口,它具有涉及创建要素,移动要素、编辑节点等31个实现类,能够实现鼠标与地图交互中的事件的追踪,返回新的几何对象。

本例的实现,我们首先来添加一个编辑类,将涉及到的编辑的相关方法抽象到这个类中。在项目中添加“Edit”类。添加如下引用。

using定义如下成员变量。

private bool mIsEditing; orkspace;

mWorkspaceEdit = pWorkspace as IWorkspaceEdit;

if (mWorkspaceEdit == null)

return;

creenDisplay;

pNewLineFeedback = mDisplayFeedback as INewLineFeedback;

creenDisplay;

pNewPolygonFeedback = mDisplayFeedback as INewPolygonFeedback;

creenDisplay;

et项目,项目名称为MapRender,将Form1的名字设置为MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl。控件布局效果如下图所示。

图8控件布局效果

在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。

图9工具栏设置效果

添加Buttom按钮的属性设置如下:

表4控件属性设置

1.4代码添加及解释

该工程需要添加如下引用:

using

using

using

using

using

在axMapControl1控件中添加图层,如图所示:

图10添加初始化图层

1. 简单着色代码添加

添加btnSimpIeRenderer按钮的Click事件代码:

private void btnSimpIeRenderer_Click(object sender, EventArgs e)

{

IMap pMap = ;

分级着色代码添加

在前面代码的基础上添加如下引用:

using

using

然后添加btnCIassBreakRenderer按钮的Click事件代码:

private void btnCIassBreakRenderer_Click(object sender, EventArgs e) {

IGeoFeatureLayer pGeoFeatureL;

ITable pTable;

IClassifyGEN pClassify;

ITableHistogram pTableHistogram;

IBasicHistogram pHistogram;

object dataFrequency;

object dataValues;

double[] Classes;

int ClassesCount;

IClassBreaksRenderer pClassBreaksRenderer;

IHsvColor pFromColor;

IHsvColor pToColor;

IAlgorithmicColorRamp pAlgorithmicCR;

IEnumColors pEnumColors;

bool ok;

IColor pColor;

ISimpleFillSymbol pSimpleFillS;

int lbreakIndex;

string strPopField = "POP1990";

int numDesiredClasses = 5;

IMap pMap = ;

= 0;

pGeoFeatureL = (IGeoFeatureLayer)(0);

ET中必须使用IClassifyGEN这个借口定义的对象才能实现分级。

3. 唯一值着色代码添加

添加btnUniqueValueRenderer按钮的Click事件代码:

private void btnUniqueValueRenderer_Click(object sender, EventArgs e) {

IGeoFeatureLayer m_pGeoFeatureL;

IUniqueValueRenderer pUniqueValueR;

IFillSymbol pFillSymbol;

IColor pNextUniqueColor;

IEnumColors pEnumRamp;

ITable pTable;

int lfieldNumber;

IRow pNextRow;

IRowBuffer pNextRowBuffer;

ICursor pCursor;

IQueryFilter pQueryFilter;

string codeValue;

IRandomColorRamp pColorRamp;

string strNameField = "State_Name";

IMap pMap = ;

= 0;

m_pGeoFeatureL = (IGeoFeatureLayer)(0);

pUniqueValueR = new UniqueValueRendererClass();

pTable = (ITable)m_pGeoFeatureL;

lfieldNumber = (strNameField);

if (lfieldNumber == -1)

{

("未能找到字段 " + strNameField);

return;

}

唯一值着色代码添加

在前面代码的基础上添加引用

using stdole;

然后添加btnSymbolRenderer按钮的Click事件代码:

private void btnSymbolRenderer_Click(object sender, EventArgs e) {

IGeoFeatureLayer pGeoFeatureLayer;

IFeatureLayer pFeatureLayer;

IProportionalSymbolRenderer pProportionalSymbolR;

ITable pTable;

IQueryFilter pQueryFilter;

ICursor pCursor;

IFillSymbol pFillSymbol;

ICharacterMarkerSymbol pCharaterMarkerS;

IDataStatistics pDataStatistics;

IStatisticsResults pStatisticsResult;

pFontDisp;

IRotationRenderer pRotationRenderer;

IMap pMap = ;

= 0;

pFeatureLayer = (IGeoFeatureLayer)(0);

pGeoFeatureLayer = (IGeoFeatureLayer)pFeatureLayer;

pTable = (ITable)pGeoFeatureLayer;

pQueryFilter = new QueryFilterClass();

("");

pCursor = (pQueryFilter, true);

质量图着色代码添加

这里以柱状图为例,先添加引用如下:

然后添加btnChartRenderer按钮的Click事件代码:

private void btnChartRenderer_Click(object sender, EventArgs e) {

IGeoFeatureLayer pGeoFeatureL;

IFeatureLayer pFeatureLayer;

ITable pTable;

ICursor pCursor;

IQueryFilter pQueryFilter;

IRowBuffer pRowBuffer;

int numFields = 2;

int[] fieldIndecies = new int[numFields];

int lfieldIndex;

double dmaxValue;

bool firstValue;

double dfieldValue;

IChartRenderer pChartRenderer;

IRendererFields pRendererFields;

IFillSymbol pFillSymbol;

IMarkerSymbol pMarkerSymbol;

ISymbolArray pSymbolArray;

IChartSymbol pChartSymbol;

简单着色代码添加

添加btnDotDensityRenderer按钮的Click事件代码:

private void btnDotDensityRenderer_Click(object sender, EventArgs e) {

IGeoFeatureLayer pGeoFeatureL;

IDotDensityRenderer pDotDensityRenderer;

IDotDensityFillSymbol pDotDensityFillS;

IRendererFields pRendererFields;

ISymbolArray pSymbolArray;

ISimpleMarkerSymbol pSimpleMarkerS;

string strPopField = "POP1990";

IMap pMap = ;

pGeoFeatureL = (IGeoFeatureLayer)(0);

pDotDensityRenderer = new DotDensityRendererClass();

pRendererFields = (IRendererFields)pDotDensityRenderer;

//添加点密度着色的字段名

(strPopField, strPopField);

pDotDensityFillS = new DotDensityFillSymbolClass();

//设置着色符号的大小和颜色

= 4;

IRgbColor color = new RgbColorClass();

= 0;

= 0;

= 0;

= color;

//设置着色符号的背景颜色

= 239;

= 228;

= 190;

= color;

pSymbolArray = (ISymbolArray)pDotDensityFillS;

//设置点符号样式

pSimpleMarkerS = new SimpleMarkerSymbolClass();

= ;

= 4;

= 128;

= 128;

= 255;

= color;

((ISymbol)pSimpleMarkerS);

= pDotDensityFillS;

//设置一个点代表的值

= 200000;

//创建图例

();

= (IFeatureRenderer)pDotDensityRenderer;

null, null);

}

着色的效果如下图所示:

图11根据POP1990字段的点密度着色图效果

1.5小结

地图专题图制作是GIS中数据显示和分析的重要环节,涉及到的对象和接口也比较多,上面实例只是简单的实现了五种专题图的显示。读者也可以尝试在当前工程中添加TOCControl控件,然后在每次专题图生成代码的最后添加如下代码:) ;();

看看TOCControl控件中会有什么样的变化,如果读者对二次开发感兴趣,可以自己试着阅读GIS 二次开发相关书籍,了解与编辑相关的接口和方法,自己实现丰富的着色效果。

2网络分析

在ArcGIS中,网络是由一组边和接点按照一定的拓扑关系彼此连接而成的,边是具有一定长度和物流的网络要素,接点是两条或两条以上边的交汇处,实现两条边之间的物流的转换,边与接点是网络的两类基本组成要素。ArcGIS所涉及的网络,是由一系列要素类别组成的,可以度量并能够用图形形式表达的网络,所以又称为几何网络(Geometric Network)。组成几何网络的各要素被限制存在于网络中,作为网络要素(Network Feature)。ArcGIS自动维护几何网络要素之间的基于几何的一致性拓扑关系。本节中的网络分析包括两个模块,网络生成和进行网络分析。

本小节中的网络分析是针对网络生成中的数据进行操作的。路径与权重的设置注意文档中的”注意”。

2.1生成几何网络

在进行网络分析功能实现之前,我们需要使用ArcGIS来创建一个几何网络文件。

1)创建Geodatabase。打开ArcCatalog,在“\GIS设计与开发\例子数据\Network”文件夹下单击右键,选择“New”,“Personal Geodatabase”,名称设为“USA_Highway_Network_GDB”。

2)创建Feature Dataset。右键单击“USA_Highway_Network_GDB”,选择“New”,“Feature Dataset”。在弹出窗口设置要素数据集的名字为“high”。在弹出的坐标系统设置界面单击“Import”按钮,选择文件“”,即将该文件的坐标系统导入到数据集中,如图所示。然后单击“Next”,直到Finish,完成要素数据集的创建。

图12创建Feature Dataset

图13坐标系统设置

3)添加FeatureClass。右键单击要素数据集“high”,选择“Import”,“FeatureClass(Single)”,在弹出对话框中设置“Input Features”为“”,输出要素名称为“high”,输出路径为默认。单击“OK”,完成添加。

图14添加FeatureClass

图15输出设置

4)创建几何网络。右击“high”数据集,选择“New”,“Geometric Network”,准备开始生成网络。

图16创建几何网络

进入几何网络生成向导。

图17几何网络生成向导

选择几何网络生成方式,这里选择根据已存在要素创建。

图18选择几何网络生成方式

选择生成几何网络的要素,并设置名称,这里保留默认名称不做修改。

图19选择生成几何网络的要素

选择几何网络中是否保留原要素的属性值,这里选择“Yes”。

图20选择几何网络属性值

选择网络中的边的类型为复杂边(complex edges)。所谓复杂边,就是在生成网络过程中,不会因为节点和边的连接关系而打断该边。而简单边会因为有中间节点的存在被分割成为多个要素。

图21网络中的边的类型

设置要素间捕捉半径,这里设为。选择希望被移动的要素类。在对数据进行编辑的过程中,捕捉功能应用减少数据修改的麻烦,但要注意,不正确的捕捉半径设置会导致数据变形。

图22设置要素间捕捉容差

设置网络数据的权重,将Weight Name设为“Length”,“Type”设为“Double”。

图23设置网络数据的权重

将上一步设置的权重名称与要素类中的字段关联,这里选择LENGTH。

图24权重字段关联

几何网络参数设置完成。点击“Finish”即可完成。

图25几何网络设置信息

打开Catalog下文件夹,展开后创建的文件如下图所示。

图26创建几何网络后的文件

通过以上步骤生成的几何网络指定了“high”要素类中的“LENGTH”字段作为该几何网络的权。执行程序后,在Personal Geodatabase中的“high”要素集中生成了“high_NET_Junctions”接点要素类和“ushigh”几何网络。

2.2网络分析的实现

我们下面动手实现一个简单的最短路径分析。用户通过在MapControl点击选择路径经过的节点,双击完成节点的选择,然后最短路径会以红色线条显示到MapControl中。

2.2.1添加控件

新建一个C#项目,项目名称为Network,将Form1的名字设置为MainForm,Text属性设为“网络分析”。并添加、MapControl、TOCControl、LicenceControl三个控件。并将TOCControl 的伙伴控件设为MapControl。控件布局效果如下图所示。

图27控件布局效果

2.2.2代码添加及解释

添加如下引用。

using添加如下成员变量。

//几何网络

private IGeometricNetwork mGeometricNetwork;

//给定点的集合

private IPointCollection mPointCollection;

//获取给定点最近的Network元素

private IPointToEID mPointToEID;

//返回结果变量

private IEnumNetEID mEnumNetEID_Junctions;

private IEnumNetEID mEnumNetEID_Edges;

private double mdblPathCost;

编写一个自定义函数,用于实现路径分析。在ArcEngine中,使用ITraceFlowSolverGEN接口实现路径分析计算,通过查询接口INetSolver获取几何网络的Network,使用INetFlag获取路径求解的边(PutEdgeOrigins)或点(PutJunctionOrigins),最后使用该接口的FindPath方法执行路径分析。实现代码如下:

private void SolvePath(string weightName)

{

//创建ITraceFlowSolverGEN

ITraceFlowSolverGEN pTraceFlowSolverGEN = new TraceFlowSolverClass();

INetSolver pNetSolver = pTraceFlowSolverGEN as INetSolver;

//初始化用于路径计算的Network

INetwork pNetWork = ;

= pNetWork;

//获取分析经过的点的个数

int intCount = ;

if (intCount < 1)

return;

INetFlag pNetFlag;

//用于存储路径计算得到的边

IEdgeFlag[] pEdgeFlags = new IEdgeFlag[intCount];

IPoint pEdgePoint = new PointClass();

int intEdgeEID;

IPoint pFoundEdgePoint;

double dblEdgePercent;

//用于获取几何网络元素的UserID, UserClassID,UserSubID

INetElements pNetElements = pNetWork as INetElements;

int intEdgeUserClassID;

int intEdgeUserID;

int intEdgeUserSubID;

for (int i = 0; i < intCount; i++)

{

pNetFlag = new EdgeFlagClass();

//获取用户点击点

pEdgePoint = (i);

//获取距离用户点击点最近的边

(pEdgePoint, out intEdgeEID, out pFoundEdgePoint, out dblEdgePercent);

if (intEdgeEID <= 0)

continue;

//根据得到的边查询对应的几何网络中的元素UserID, UserClassID,UserSubID

(intEdgeEID, ,

out intEdgeUserClassID, out intEdgeUserID, out intEdgeUserSubID);

if (intEdgeUserClassID <= 0 || intEdgeUserID <= 0)

continue;

= intEdgeUserClassID;

= intEdgeUserID;

= intEdgeUserSubID;

pEdgeFlags[i] = pNetFlag as IEdgeFlag;

}

//设置路径求解的边

(ref pEdgeFlags);

//路径计算权重

INetSchema pNetSchema = pNetWork as INetSchema;

INetWeight pNetWeight = (weightName);

if (pNetWeight == null)

return;

//设置权重,这里双向的权重设为一致

INetSolverWeights pNetSolverWeights = pTraceFlowSolverGEN as INetSolverWeights;

= pNetWeight;

= pNetWeight;

object[] arrResults = new object[intCount - 1];

//执行路径计算

, ,

out mEnumNetEID_Junctions, out mEnumNetEID_Edges, intCount - 1, ref arrResults); //获取路径计算总代价(cost)

mdblPathCost = 0;

for (int i = 0; i < intCount - 1; i++)

mdblPathCost += (double)arrResults[i];

}

编写自定义函数,实现路径分析结果到几何要素的转换,用于地图的显示。主要通过IEIDHelper接口完成转换,首先使用该接口获取几何网络和空间参考,然后查询组成路径的几何要素的信息返回到接口IEnumEIDInfo中,最后通过IEnumEIDInfo接口获取要素的几何要素。代码如下:

private IPolyline PathToPolyLine()

{

IPolyline pPolyLine = new PolylineClass();

IGeometryCollection pNewGeometryCollection = pPolyLine as IGeometryCollection;

if (mEnumNetEID_Edges == null)

return null;

IEIDHelper pEIDHelper = new EIDHelperClass();

//获取几何网络

= mGeometricNetwork;

//获取地图空间参考

ISpatialReference pSpatialReference = = pSpatialReference;

= true;

//根据边的ID获取边的信息

IEnumEIDInfo pEnumEIDInfo = (mEnumNetEID_Edges);

int intCount = ;

();

IEIDInfo pEIDInfo;

IGeometry pGeometry;

for (int i = 0; i < intCount;i++ )

{

pEIDInfo = ();

//获取边的几何要素

pGeometry = ;

((IGeometryCollection)pGeometry);

}

return pPolyLine;

}

下面开始网络分析的实现。首先是网络数据的读取与加载,我们在MainForm的Load事件中实现。此处直接加载我们在上一节自己生成的几何网络数据,首先获取工作空间“”,然后获取其中的要素数据集合“high”,进而得到其中的几何网络数据“high_net”,使用接口IGeometricNetwork获取。然后使用IFeatureClassContainer接口获取几何网络中的要素类,添加到MapControl中。值得注意的是,路径分析中,IPointToEID的源地图和几何网络以及容差在此完成设置。代码如下:

private void MainForm_Load(object sender, EventArgs e)

{

//获取几何网络文件路径

//注意修改此路径为当前存储路径

string strPath = @"E:\GIS设计与开发\例子数据\Network\";

//打开工作空间

IWorkspaceFactory pWorkspaceFactory = new AccessWorkspaceFactory();

IFeatureWorkspace pFeatureWorkspace = (strPath, 0) as IFeatureWorkspace;

//获取要素数据集

//注意名称的设置要与上面创建保持一致

IFeatureDataset pFeatureDataset = ("high");

//获取network集合

INetworkCollection pNetWorkCollection = pFeatureDataset as INetworkCollection;

//获取network的数量,为零时返回

int intNetworkCount = ;

if (intNetworkCount < 1)

return;

//FeatureDataset可能包含多个network,我们获取指定的network

//注意network的名称的设置要与上面创建保持一致

mGeometricNetwork = ("high_net");

//将Network中的每个要素类作为一个图层加入地图控件

IFeatureClassContainer pFeatClsContainer = mGeometricNetwork as IFeatureClassContainer;

//获取要素类数量,为零时返回

int intFeatClsCount=;

if (intFeatClsCount < 1)

return;

IFeatureClass pFeatureClass;

IFeatureLayer pFeatureLayer;

for (int i = 0; i < intFeatClsCount;i++ )

{

//获取要素类

pFeatureClass = (i);

pFeatureLayer = new FeatureLayerClass();

= pFeatureClass;

= ;

//加入地图控件

0);

}

//计算snap tolerance为图层最大宽度的1/100

//获取图层数量

int intLayerCount= IGeoDataset pGeoDataset;

IEnvelope pMaxEnvelope=new EnvelopeClass();

for (int i = 0; i < intLayerCount;i++ )

{

//获取图层

pFeatureLayer = as IFeatureLayer;

pGeoDataset = pFeatureLayer as IGeoDataset;

//通过Union获得较大图层范围

;

}

double dblWidth = ;

double dblHeight = ;

double dblSnapTol;

if (dblHeight < dblWidth)

dblSnapTol = dblWidth * ;

else

dblSnapTol = dblHeight * ;

//设置源地图,几何网络以及捕捉容差

mPointToEID = new PointToEIDClass();

= = mGeometricNetwork;

= dblSnapTol;

}

下面添加MapControl的OnMouseDown事件,完成用户单击时的响应。用户单击时获取用户单击的点,并存储到点集中。

private void axMapControl1_OnMouseDown(object sender, e)

{

//记录鼠标点击的点

IPoint pNewPoint = new PointClass();

, ;

if (mPointCollection == null)

mPointCollection = new MultipointClass();

//添加点,before和after标记添加点的索引,这里不定义

object before = ;

object after = ;

(pNewPoint, ref before, ref after);

}

最后添加,MapControl的OnDoubleClick事件的响应,完成路径分析,并将所得路径转换为几何要素绘制到屏幕上。代码如下:

private void axMapControl1_OnDoubleClick(object sender, e)

{

try

{

//路径计算

//注意权重名称与设置保持一致

SolvePath("LENGTH");

//路径转换为几何要素

IPolyline pPolyLineResult = PathToPolyLine();

//获取屏幕显示

IActiveView pActiveView = IScreenDisplay pScreenDisplay = ;

//设置显示符号

ILineSymbol pLineSymbol = new CartographicLineSymbolClass();

IRgbColor pColor = new RgbColorClass();

= 255;

= 0;

= 0;

//设置线宽

=4;

//设置颜色

= pColor as IColor;

//绘制线型符号

(0, 0);

((ISymbol)pLineSymbol);

(pPolyLineResult);

();

}

catch ex)

{

("路径分析出现错误:" + "\r\n" + ;

}

//点集设为空

mPointCollection = null;

}

至此,我们已经完成了路径分析的功能,编译程序并运行,通过鼠标单击选择若干网络节点,最后通过双击完成节点选择。生成结果如图所示。

图28路径分析效果

2.3MyGIS中添加网络分析

打开项目MyGIS,在MyGIS的主菜单添加一个新的菜单项“空间分析”,并添加子菜单“网络分析”,Name属性修改为“menuNetwork”。

请你参照前面的实现自己来完成代码的添加,注意在menuNetwork_Click事件中将当前工具mTool设为"Network",并在MapControl的OnMouseDown事件中修改响应的代码。

编译运行后效果如下图示。

图29运行效果

2.4小结

至此你已经完成了网络分析的全部内容,但我们仅仅只是介绍了一种网络分析分方法。事实上本小节所用到的网络分析功能是管线网络(),例如电力网,供水网等。这种网络的特点是没有方向性,不会有方向限制。而AE所提供了另一种网络分析(),这种分析方法针对于路网分析,在这种分析中,你可以限制道路的左转限制,是否可以调头等设置。在路网分析中同样存在最优路径选取的内容。但内容相对复杂些,下图是AE所提供的路网分析的一个实例:

图30网络分析示例

命名空间下提供了大量的方法针对路网数据,我们可以获得最优的路径,同时可以获得各个服务点的服务范围,可以翻译道路,可以推算路程的时间等。有兴趣的同学,在课后可以借助帮助和文档,进行深入的研究。

3总结

至此,你已经完成了关于ArcEngine二次开发的全部入门学习。当然该文档的作用仅仅是带领你迈入ArcEngine的开发大门。想要开发出功能完善的GIS程序,作为程序员我们应当不断的深入了解。希望你有时间耐心查看这个文档,并逐步学习接口,和接口之间的调用接口。这份文档为初稿,当中不免有不足之处或错误之处,敬请您谅解。祝大家实习顺利!

实习指导书-第八章-ArcGIS-Engine三维开发

第八章ArcGIS Engine的三维开发 8.1ArcGIS三维分析及其控件简介 8.1.1 ArcGIS三维分析简介 ArcGIS三维分析提供了对表面数据有效的可视化和分析。使用三维分析,可以从多个角度来浏览表面数据,查询表面,从表面上一选定的位置来确定什么对象可见,以及通过叠加栅格和矢量数据来创建一幅逼真的透视图。 三维分析(3D Analyst)添加了两个专用的三维可视化应用程序:ArcScene和ArcGlobe,它们扩展了ArcGIS Desktop的功能,并且扩展了ArcCatalog和ArcMap的三维功能。 ArcScene允许用户制作具有透视效果的场景,在这个场景中可以对地理信息系统数据进行浏览和交互。用户可以在表面上叠加栅格和矢量数据,并从矢量数据源创建线、面和体。用户也可以使用ArcScene 中的三维分析工具创建和分析表面。 ArcGlobe提供在标准计算机硬件上对巨型三维栅格、地形和矢量数据集进行实时漫游和缩放,在此过程中基本不会感觉到速度上的问题。这主要是依靠一种新引入的索引和快速检索数据的方法实现的。 利用三维分析扩展ArcCatalog,从而实现对三维数据的管理并且创建具有三维视觉属性的图层。用户可以在ArcCatalog中使用与ArcScene中相同的浏览工具预览三维场景和数据。 利用三维分析扩展ArcMap,从而可以由GIS数据生成新的表面,以及分析表面、查询表面某一位置的属性值和分析表面不同位置的可见性。用户还可以计算表面面积和表面之上或者表面之下的体积,并沿表面上的三维线生成剖面。 1

8.2ArcGIS三维显示简介 ArcGIS Desktop中,可用于三维场景展示的程序为ArcGlobe和ArcScene,由于两者的差别,在三维场景展示中适用的情况有所不同。由于Engine与Desktop底层技术都是基于AO的,因此该比较结果在功能性和整体效率方面同样适用与GlobeControl和SceneControl。 ArcScene简介: ArcScene是一个适合于展示三维透视场景的平台,可以在三维场景中漫游并与三维矢量与栅格数据进行交互。ArcScene是基于OpenGL 的,支持TIN数据显示。显示场景时,ArcScene会将所有数据加载到场景中,矢量数据以矢量形式显示,栅格数据默认会降低分辨率来显示以提高效率。 图1 ArcScene界面 ArcGlobe简介: ArcGlobe是ArcGIS9.0之后出现的新产品,设计用于展示大数据量的场景,支持对栅格和矢量数据无缝的显示。ArcGlobe基于全球视 2

ArcGIS_Engine二次开发——基础篇

ArcGIS_Engine二次开发——基础篇 ArcGIS Engine二次开发 ——基础篇

1ArcGIS Engine二次开发——基础篇 1.1第一个简单的A rcGIS Engine地图显示程序 这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。如果您之前没有接触过ArcGIS Engine的开发,那么这个例子是您迈入ArcGIS Engine二次开发大门的极好例子,将从零开始引导您一步一步完成任务。 1.1.1创建一个新的工程 首先打开Microsoft Visual Studio 2005,点击菜单栏中的“文件”—>“新建”—>“项目”,在弹出的对话框中选择新建一个Visual C#的Windows应用程序,之后更改项目名称为“地图浏览”,更改文件的路径为个人实习文件夹,点击“确定”即可。 图1新建项目对话框 选中项目“地图浏览”中的窗体“Form1”,修改其Name属性为“MainForm”,Text 属性为“地图浏览”,

图2窗体命名 1.1.2添加控件及引用 点击编译器最左侧的“工具箱”(不存在时可通过“视图”“工具箱”打开),在弹出的选择项中找到“ArcGIS Windows Forms”项,单击其中的MapControl,之后在Form1的空白处单击鼠标左键不放并拖拽鼠标,直到调整MapControl到合适的大小再松开鼠标(您也可以直接在工具箱中双击MapControl,该控件则会自动加入到Form1中)。用同样的方法,再将LicenseControl添加到Form1中。 图 3 打开工具箱

图4工具箱 如果您在工具箱中找不到MapControl,则请依次尝试以下两种解决方案。首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出菜单中选择“重置工具箱”。如果这一步操作之后仍然无法看到MapControl,则在工具箱的任意位置上单击鼠标右键,找到“常规”选项卡,然后在“常规”选项卡上单击鼠标右键,在弹出菜单中单击“选择项(I)…”,在弹出的对话框中选择“.NET Framework组件”,找到“LicenseControl”和“MapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NET Framework 组件”这个面板中找不到这两项,则选择“COM 组件”面板,在“ESRI LicenseControl”和“ESRI MapControl”前面打勾)。

ArcGIS Engine9.2 + C#实例开发详细教程

第一讲桌面GIS应用程序框架的建立 本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。最终成果预览如下: 1、新建项目 启动VS2005,选择“文件|新建|项目”,在项目类型中选择Visual C#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。 在解决方案管理器中将“Form1.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。 2、添加控件 选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。 选择工具箱中的“ArcGIS Windows Forms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。 选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。 选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。 将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。点击TabPages属性右边的按钮,弹出TabPage 集合编辑器,将tabPage1的Name设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性。如下所示。

选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill。 选择“属性”选项卡,拖入DataGridView控件,设置Dock属性为Fill。 拖入TabControl控件到Panel2,设置Dock属性为Fill。并上述类似的方法,将两个选项卡的Name和Text分别设置为:(tabPageMap、地图),(tabPageLayout,制版)。 选择“地图”选项卡,拖入MapControl控件,设置Dock属性为Fill。 选择“制版”选项卡,拖入PageLayoutControl控件,设置Dock属性为Fill。 最后将LicenseControl控件拖入到窗体的任意地方。 按F5编译运行,可以看到刚才布局好的程序界面了。 3、控件绑定 通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。 分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1,如下图所示。 这样,工具条和图层控件就与地图控件关联了。 4、添加工具 此时,工具条中还没有任何工具,添加的方法也很简单。右击ToolbarControl,选择“属性|Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、Redo、Undo即可将相应工具添加到工具条。 常见的工具有:

VB+ArcGis Engine 开发零基础GIS程序框架教程

VB+ArcGis Engine开发零基础GIS程序框架教程 第一步配置环境和设计界面 环境:ArcGisEngine 9.1 + Microsoft Visual Basic 6.0 使用Engine控件:ESRI ToolbarControl, ESRITOCControl 、ESRILicenseControl、ESRIMapControl。 (按Ctrl+T调出部件面板,选中以下控件) 再从[工程]-[引用]添加一下引用:

界面布局(右侧大的MapcControl命名为MapControl1,为显示地图主界面。左下角的MapcControl命名为MapControl2,作为地图鹰眼。在工具栏里添加如图的几个按钮即可。其它再添加一个CommonDialog1和状态栏):

在ESRI ToccControl和 ESRIToolbarControl属性里绑定控件EsriMapControl (buddy选择MapControl1)。 这样基本界面就布置好了。 第二步加载地图 代码为: '打开地图文档 On Error Resume Next Dim sFileName As String With CommonDialog1 .DialogTitle = "Open Map Document" .Filter = "Map Documents (*.mxd;*.pmf)|*.mxd;*.pmf" .ShowOpen If .FileName = "" Then Exit Sub sFileName = .FileName End With If MapControl1.CheckMxFile(sFileName) Then MapControl1.LoadMxFile sFileName

ArcGIS Engine常用接口

下面根据依赖关系的顺序对一些常用类库进行讨论。模型图中在每个类库框的右上角显示了其序列号。例如,作为ArcGIS体系结构基础的System类库,其编号为1,而编号为7的GeoDatabase类库依赖于模型图中其前面的6个类库--System、SystemUI、Geometry、Display、Server和Output。 System类库 System类库是ArcGIS体系结构中最底层的类库。System类库包含给构成ArcGIS的其他类库提供服务的组件。System类库中定义了大量开发者可以实现的接口。AoInitializer对象就是在System类库中定义的,所有的开发者必须使用这个对象来初始化ArcGIS Engine和解除ArcGIS Engine的初始化。开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统。 SystemUI类库 SystemUI类库包含用户界面组件接口定义,这些用户界面组件可以在ArcGIS Engine中进行扩展。包含ICommand、ITool和IToolControl接口。开发者用这些接口来扩展UI组件,ArcGIS Engine开发人员自己的组件将使用这些UI组件,且一般是在高层次的类库中实现。这个类库中包含的对象是一些使用工具对象,开发人员可以通过使用这些对象简化用户界面的开发。开发者不能扩展这个类库,但可以通过实现这个类库中包含的接口来扩展ArcGIS系统。 Geometry类库 Geometry类库处理存储在要素类中的要素几何图形或形状或其他图形元素。大多数用户会遇到的基本几何图形对象为Point、MultiPoint、Polyline和Polygon。除了这些顶级实体外,就是作为多义线和多边形的组成部分的几何图形,是组成几何图形的子要素。它们是Segment、Path和Ring。Polyline和Polygon由一系列相连接的、构成列Path的片段组成。一个片段由两个不同的点,即起始点和结束点,以及一个定义这两点之间弯曲度的元素类型组成。片段的类型有CircularArc、Line、EllipticArc和BezierCurve。所有几何图形对象都可以有与其顶点相关联的Z、M和IDs。所有的基本几何图形对象都支持诸如Buffer,Clip等几何操作。几何子要素不可以由开发者扩展。GIS中的实体指的是现实世界中的要素;现实世界中要素的位置由一个带有空间参考的几何图形来定义。空间参考对象,包括投影坐标和地理坐标系统,都包含在Geometry类库中。开发者可以通过添加新的空间参考和投影来扩展空间参考系统。 Display类库 Display类库包含用于显示GIS数据的对象。除了负责实际输出图像的主要显示对象外,这个类库还包含表示符号和颜色的对象,它们用来控制绘制实体的属性。Display类库还包含在与显示交互时提供给用户可视化反馈的对象。开发者与Display最常用的交互方式就是类似于Map对象或PageLayout对象提供的视图。Display类库的所有部分都能进行扩展;通常扩展的对象包括符号、颜色和显示反馈。 Server类库

ArcGISEngine+C实例开发教程

《A r c G I S E n g in e+C#实例开发教程》 目录 第一讲桌面GIS应用程序框架的建立 (2) 第二讲菜单的添加及其实现 (5) 第三讲MapControl与PageLayoutControl同步 (9) 第四讲状态栏信息的添加与实现 (24) 第五讲鹰眼的实现 (27) 第六讲右键菜单添加与实现 (32) 教程Bug及优化方案1 (40) 第七讲图层符号选择器的实现1 (40) 第七讲图层符号选择器的实现2 (57) 版权声明: 《ArcGISEngine+C#实例开发教程》为3SDN()原创教程,版权所有。禁止商业用途转载(如需请联系作者),非商业用途转载请注明出处。教程采用C#语言,以VS2005为开发工具。 读者对象: ArcGISEngine(以下简称AE)开发初学者,了解AE基本体系,了解C#基本语法,了解VS2005的基本使用方法。 预期学习效果: 进一步理解AE的体系结构与开发方法,掌握基本的GIS桌面应用程序的开发 第一讲桌面GIS应用程序框架的建立 本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。最终成果预览如下: 1、新建项目

启动VS2005,选择“文件|新建|项目”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。 在解决方案管理器中将“”重命名为“”,在设计视图中,选中窗体,将其属性中的“Text”改为 “3sdnMap”。 2、添加控件 选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。 选择工具箱中的“ArcGISWindowsForms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。 选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。 选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。 将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性。如下所示。 选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill。 选择“属性”选项卡,拖入DataGridView控件,设置Dock属性为Fill。 拖入TabControl控件到Panel2,设置Dock属性为Fill。并上述类似的方法,将两个选项卡的Name和Text分别设置为:(tabPageMap、地图),(tabPageLayout,制版)。 选择“地图”选项卡,拖入MapControl控件,设置Dock属性为Fill。 选择“制版”选项卡,拖入PageLayoutControl控件,设置Dock属性为Fill。 最后将LicenseControl控件拖入到窗体的任意地方。 按F5编译运行,可以看到刚才布局好的程序界面了。 3、控件绑定 通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。 分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1,如下图所示。这样,工具条和图层控件就与地图控件关联了。 4、添加工具 此时,工具条中还没有任何工具,添加的方法也很简单。右击ToolbarControl,选择“属性 |Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、Redo、Undo即可将相应工具添加到工具条 常见的工具有: MapNavigation中的导航工具,MapInquiry中的查询工具,FeatureSelection中的选择工具,你可以根据需要酌情添加工具。 5、编译运行 按F5即可编译运行程序,至此桌面GIS应用程序框架基本框架已经搭建好了,你可以通过工具条的工具打开地图文档,浏览地图了,效果如开篇所示. 第二讲菜单的添加及其实现 在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下。在“属性”选项卡中,我们当时添加的是DataGridView控件,这个控件是用来显示数据表的,而专门用于属性的查询和设置的控件是PropertyGrid控件。因此请你删除“属性”选项卡中的DataGridView 控件,再把位于“工具箱|所有Windows窗体|PropertyGrid”(如果没有,右击选择“选择项”以添加此控件)控件拖到该选项卡。

ArcGIS Engine组件式开发设计报告

ArcGIS Engine 组件式开发系统设计报告 1. 系统设计目的 对于本门课程进行系统的了解和加深,能将MapControl 、PageLayoutControl 、TOCControl 和ToolBarControl 控件集成起来,建立一个GIS 应用系统,实现一些简单的操作,例如数据的加载,地图的交互操作,空间查询,缓冲区分析,地图的打印输等功能。 2. 系统设计内容 ● 能加载几种常用格式的地图数据。 ● 创建了自己的自定义命令、工具和菜单,实现鹰眼功能,拉框显示,地图漫游,地图标注,数据选择,并能绘制点、线、面。 ● 调整TOCControl 控件中图层的显示顺序,并可以点击右键打开属性表。 ● 可新建点、线、面图层。 ● 实现了属性查图功能,并进行要素的选择,将选择的要素高亮显示出来。 ● 能进行地图制图,可设置格网点、格网线,改变背景颜色,设置图例,比例尺,指北针,并进行地图的输出。 ● 实现了空间分析中的缓冲区分析。 3. 主要系统模块示意图 空间查询 GIS 应用系统 创建图层 地图交互 操 作 地图输入 地图制图 空间分析 地图输出

4.实现功能简介 按照数据处理的流程,可将本系统分为七大模块: (1)地图输入模块:可加载shp、jpg、tif、bmp格式的地图数据并在主视图上同时显示多个图层。此功能包含的类有GeoMapOp。 (2)地图交互操作模块:里面功能的定义都在类GeoMapOp中,然后在Form1窗体中进行调用。 ●实现鹰眼操作:可在主视图和鹰眼地图上同步显示,主视图变化后鹰眼 视图能保持一致,可通过鹰眼地图定位主视图。 ●拉框显示:用户可通过鼠标拉框放大显现地图。 ●地图漫游:用户可以通过鼠标将放大后的地图进行平移操作。 ●地图放大:用户可通过鼠标点击实现地图的放大。 ●全图显示:可用鼠标拖动地图。 ●绘制点、线、面:用户可通过鼠标点击来给图上添加点、线、面。 ●地图标注:用户可通过鼠标点击来添加地图标注。 ●数据选择:用户可将选择的要素高亮显示出来。 (3)创建图层:此功能里的代码都没有在类里面出现,都是在窗体中定义的。里面包含创建点图层,线图层,面图层。 ●创建点图层:用户可通过鼠标点击此项创建一个点图层文件,并保存。 ●创建线图层:用户可通过鼠标点击此项创建一个线图层文件,并保存。 ●创建面图层:用户可通过鼠标点击此项创建一个点面层文件,并保存。 (4)地图制图:此功能的代码在类GeoMap和主窗体Form中都有出现。 ●格网点设置:用户可触动鼠标显示格网点。 ●格网线设置:用户可触动鼠标显示格网线。 ●改变背景颜色:用户可触动鼠标改变制图区域的背景颜色。 ●设置图例:用户可通过点击此项加载该地图对应的图例。 ●设置比例尺:用户可通过点击此项加载比例尺。 ●设置指北针:用户可通过点击此项加载指北针。

ArcGIS_Engine二次开发——提高篇

ArcGIS Engine二次开发 ——提高篇

1缩略图(鹰眼) 鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。在本小节中我们将学习如何制作这种鹰眼。 1.1添加控件 新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。布局如下图所示。左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。 图 1 界面布局 在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。 图2添加按钮

1.2代码添加及解释 鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。 下面开始实现鹰眼功能,添加using ESRI.ArcGIS.Carto、using ESRI.ArcGIS.Geometry、using ESRI.ArcGIS.Display三个引用。首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下: private void axMapControl1_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e) { //创建鹰眼中线框 IEnvelope pEnv = (IEnvelope)e.newEnvelope; IRectangleElement pRectangleEle = new RectangleElementClass(); IElement pEle = pRectangleEle as IElement; pEle.Geometry = pEnv; //设置线框的边线对象,包括颜色和线宽 IRgbColor pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0; pColor.Transparency = 255; // 产生一个线符号对象 ILineSymbol pOutline = new SimpleLineSymbolClass(); pOutline.Width = 2; pOutline.Color = pColor; // 设置颜色属性 pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0; pColor.Transparency = 0; // 设置线框填充符号的属性 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pColor; pFillSymbol.Outline = pOutline; IFillShapeElement pFillShapeEle = pEle as IFillShapeElement; pFillShapeEle.Symbol = pFillSymbol; // 得到鹰眼视图中的图形元素容器 IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer; IActiveView pAv = pGra as IActiveView;

ArcGIS+Engine+C#实例开发教程

《ArcGISEngine+C#实例开发教程》 目录 第一讲桌面GIS应用程序框架的建立 (2) 第二讲菜单的添加及其实现 (5) 第三讲MapControl与PageLayoutControl同步 (9) 第四讲状态栏信息的添加与实现 (24) 第五讲鹰眼的实现 (27) 第六讲右键菜单添加与实现 (32) 教程Bug及优化方案1 (40) 第七讲图层符号选择器的实现1 (40) 第七讲图层符号选择器的实现2 (57)

版权声明: 《ArcGISEngine+C#实例开发教程》为3SDN(https://www.wendangku.net/doc/418341045.html,)原创教程,版权所有。禁止商业用途转载(如需请联系作者),非商业用途转载请注明出处。教程采用C#语言,以VS2005为开发工具。 读者对象: ArcGISEngine(以下简称AE)开发初学者,了解AE基本体系,了解C#基本语法,了解VS2005的基本使用方法。 预期学习效果: 进一步理解AE的体系结构与开发方法,掌握基本的GIS桌面应用程序的开发 第一讲桌面GIS应用程序框架的建立 本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。最终成果预览如下: 1、新建项目 启动VS2005,选择“文件|新建|项目”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。

在解决方案管理器中将“Form1.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。 2、添加控件 选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。 选择工具箱中的“ArcGISWindowsForms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。 选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。 选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。 将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性。如下所示。

ArcgisEngine开发总结集锦

1.目录 1. 目录 (1) 2. 用ArcEngine的工具条添加图层要素 (2) 3. ArcEngine中对Feature的编辑 (5) 4. Feature的概念 (7) 5. 如何实现经度纬度到平面坐标的相互转换?(转载) (7) 6. ArcEngine中使用上下左右键移动地图功能的实现 (9) 7. 缓冲区的创建 (11) 8. C#制作鹰眼全过程(引自ESRI中国社区) (13) 9. ArcEngine中拓扑的使用- - (15) 10. 为什么使用接口编程{转载} (17) 11. ArcEngine中闪烁目标 (21) 12. 创建多个ArcSDE实例 (23) 13. 空间查询与空间分析功能 (25) 14. AO中的空间关系 (26) 15. ArcGIS Engine 中的相交分析的实现 (28) 16. GIS基本概念集锦 (30) 17. AE开发中矢量图层叠加求交分析 (34) 18. 矢量数据分析 (38) 19. GIS空间信息基本分析方法 (39) 20. 如何判断图形间的逻辑运算 (42) 21. AE中2种方式overlay (43) 22. ArcEngine中实现捕捉功能 (47) 23. 在LAYER(i)上添加缓冲区 (69) 24. C#编码标准--编码习惯 (69) 25. 基于AE删除选择的要素- - (86) 26. 基于AO/AE获取要素信息 (87) 27. ArcEngine中拓扑的使用- - (90)

28. ArcEngine 渲染的使用 (93) 29. 利用ArcEngin进行空间分析的简单应用- - (100) 30. IfeatureSelection:SelectFeatures方法介绍 (105) 31. 常用数据入sde库的代码 (107) 32. ArcEngine开发感想 (112) 33. Geometry 对象浅析 (114) 34. AE开发中的一些基本方法(1)数据连接 (125) 2.用ArcEngine的工具条添加图层要素 发现AE比起其它的组件GIS来要好用的多 但也有一些bt的地方 比如说AE没有提供图层编辑的工具条 但最近因为程序里要添加图元 必须得开发图层编辑的功能 于是去找了找资料 发现自带的帮助里有一个MapEditing的示例 但是从AO的示例改造而来 需要从按钮写起 想想如果这样搞的话 倒不如直接用AO算了 一直想省点事 在AE自带的工具条上做点文章 其实AE中也有一组相似的编辑按钮,是用于编辑Graphics的 自然就有了一个想法:能不能先生成一个Graphic,然后将其加载进来

基于ArcGISEngine组件开发教程

目录 1引言 (2) 1.1 ArcGIS 9总览 (2) 1.2 读者定位与预期效果 (4) 1.3 ArcGIS Engine的功能 (5) 1.4 ArcGIS Engine组成部分 (6) 2软件安装 (8) 2.1 安装前准备 (9) 2.2 安装Visual Studio 2005 (9) 2.3 安装ArcGIS Engine Runtime9.3 (13) 2.4 安装ArcGIS Engine Developer Kit For Microsoft .NET Framework 9.318 2.5 ArcGIS Engine Developer Kit的授权 (21)

1引言 1.1ArcGIS 9总览 ArcGIS为用户提供了一整套功能强大的GIS框架。本文将主要关注如何快速的建立和发布使用ArcGIS Engine定制的GIS应用程序。ArcGIS Engine 对于应用系统中需要加入地理信息功能的用户来说是非常好的一个选择。 在ArcGIS 9系列产品中,ArcGIS Desktop、ArcGIS Engine和ArcGIS Server都是基于核心组件库ArcObjects搭建。 ArcObjects组件库有3000多个对象可供开发人员调用,其中有细粒度的小对象,例如:Geometry对象;也有粗粒度的大对象,例如Map对象,通过这些对象开发人员可以操作控制文档(mxd,3dd,sxd等)、和空间数据库进行交互。ArcObjects组件库为开发人员集成了大量的GIS功能,可以快速的帮助开发人员进行GIS项目的开发。由于ArcGIS Desktop、ArcGIS Engine和ArcGIS Server三个产品都是基于ArcObjects搭建的应用,那么对于开发人员来说ArcObjects的开发经验在这三个产品中是通用的。开发人员可以通过

ArcGIS Engine开发入门教程

C#,ArcGIS Engine开发入门教程 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用 Lcwld 整理 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤。 你可以在下面的目录下找到相应的样例程序: <安装目录>\DeveloperKit\Samples\Developer_Guide_Scenarios\ ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer 注:ArcGIS样例程序不包含在ArcGIS Engine开发工具包“典型”安装方式中。如果你没有安装它们,则可以重新运行开发工具包安装向导,选择“定制”或“修改”方式,并选择软件开发包下的样例项进行安装。 一、项目描述 利用视窗控件建立应用程序的目标是演示并使你熟悉在微软Visual Studio .NET API中使用标准ArcGIS 控件开发和部署GIS应用所需的步聚。本节中使用了Visual Studio .NET开发环境中的MapControl、 PageLayoutControl、TOCControl和ToolbarControl等视窗控件。COM、Java和C++程序员应该参考如下章节:利用ActiveX建立应用程序、利用可视化JavaBeans建立应用程序、建立命令行方式的Java应用和建立命令行方式的C++应用。 本节演示了创建查看ArcMap和ArcGIS桌面应用图形文档的GIS应用程序的步骤。此节包含了以下技术: ●在微软Visual Studio .NET中加载和嵌入ArcGIS控件。 ●向PageLayoutControl和MapControl中加载图形文档。 ●设置ToolbarControl和TOCControl的绑定控件。 ●处理窗口缩放。 ●向ToolbarControl添加ArcGIS Engine命令和工具。 ●创建弹出式菜单

ArcGIS+Engine+的开发与部署_看过

ArcGIS Engine库 System SystemUI GeoAnalyst Geometry 3DAnalyst Display GlobeCore Server SpatialAnalyst Output GeoStatisticalAnalyst Geodatabase Publisher GISClient ArcReaderControl GeoDatabaseDistributed DataSourcesFile DataSourcesOleDB DataSourcesRaster Cato Location NetWorkAnalysis Controls 主要Library Library介绍介绍 System:System库是ArcGIS框架中最底层的一个库,它包含了一些被其他库使用的一些组件。SystemUI:SystemUI库定义了一些在ArcGIS中被用户界面组件使用的类型。象Icommand和Itool这样的接口就在这里定义。 Geometry:几何库包含了核心的几何对象,比如点,面,线等。在几何库中还定义和实现了空间参考的对象,包括投影坐标系和几何坐标系。 Display:显示库包含了支持在输出设备上显示图形的组件,屏幕显示,符号,颜色等都在这个库中定义。Controls:控件库包含了应用程序开发中用到的控件,包括在控件中使用的命令和工具。

Carto Carto库包含了为数据显示服务的对象。PageLayout和Map对象在这个库中,以及支持各种数据类型的图层,渲染。这个库中也包括了MxdServer和MapServer对象,它们通常被Server用来显示地图数据。 GeoDatabase GeoDatabase包含了所有相关数据组织的定义类型。要素,表,网络,TIN都在这个库中定义。其中一些类型的实现在各自的数据来源的库中。

相关文档
相关文档 最新文档