ArcGIS Engine+C#缓冲区分析文档及完整源码
牟乃夏ArcEngine教程:第1章 ArcGIS Engine编程基
1.1 ArcGIS Engine概述
ArcGIS Engine开发工具包的组成
1.1 ArcGIS Engine概述
• ArcGIS Engine运行时
➢ArcGIS Engine运行时是能够保证基于ArcGIS Engine开发的软件正常运行的 ArcObjects组件产品,是运行由ArcGIS Engine开发的应用程序的基础软件 环境。
• 2.CoClass类 • CoClass类,即可创建类。该类可以通过new关键字直接实例化对
象,它的实例对象不依赖其他对象的存在而存在,其生存周期也 不由其它的对象管理。如QueryFilter是一个组件类,可以用new关 键字来创建一个对象。
1.4 对象模型图(OMD图)
• 3. Class类 • Class类,即可实例化类。该类不能直接使用new关键字创建对
1.2 ArcGIS Engine开发资源
• 1.帮助文档
• 【开始】→【所有程序】→【ArcGIS】 →【Developer Help】→【ArcObjects Help for .NET】,即可启动ArcObjects 的帮助系统。
• 2.自带示例
• 在安装完ArcObjects SDK后,在 “..\Program Files\ArcGIS\DeveloperKit10.0\Samples” 文件夹下,包含有许多自带的代码示 例工程,这些都是开发人员学习 ArcGIS Engine开发很好的资源。
1.4 对象模型图(OMD图)
• 2)组合关系 • 组合关系指其中一个类对象是另外一个类对象的组成部分,由组
成对象控制被组成对象的整个生命周期,在OMD图中用实心菱形 表示。
Layer是Map的一部分,当Map消失的时候,Layer也 将不复存在。在ArcGIS Engine中,地图文档由多个地 图组成,工具条控制对象由多个工具项组成,这些
ArcGIS Engine指导书3
ArcEngine开发实例三一、实例目标及其实现的主要功能1、学习编程实现打开、保存,另存地图文档的方法;2、运用工具栏工具进行地图要素的添加;3、运用状态栏控件实现地图坐标信息的显示。
二、具体的实现过程及代码1、如指导书中的过程,新建一个C#工程项目,并为默认建立的窗体分别添加“ToolBarControl”“TOCControl”“MapControl”“LicenseControl”控件,执行与MapControl 控件的绑定操作,并通过“dock”属性排好。
为工具栏添加如下图所示的工具按钮。
2、添加菜单控件,依次添加菜单栏的主菜单text属性为“文件”,其name属性为“menuFile”,依次添加子菜单,其text属性分别为“打开文档”,“新建文档”,“保存文档”,“另存为….”,“退出”,其name属性分别为“menuOpenDoc”,“menuNewDoc”,“menuSaveDoc”,“menuSaveAsDoc”,“menuExitApp”。
3、打开工具箱,通过添加选项,添加statusBar控件,并双击添加到窗体上。
4、添加ArcGIS的引用ESRI.ArcGIS.Geodatabase和ESRI.ArcGIS.ADF类库,在第一个窗体的代码窗口导入命名空间:using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.ADF;using ESRI.ArcGIS.SystemUI;5、在public partial class Form1 : Form代码下添加如下的初始化语句:private IMapControl3 m_mapControl = null;private string m_mapDocumentName = string.Empty;private IContainer components;6、为窗体添加load事件,并添加以下代码:private void Form1_Load(object sender, EventArgs e){m_mapControl = (IMapControl3)axMapControl1.Object;menuSaveDoc.Enabled = false; }7、为菜单“menuOpenDoc”添加click事件,并添加如下代码:ICommand command = new ControlsOpenDocCommandClass();command.OnCreate(m_mapControl.Object);command.OnClick();8、为菜单“menuSaveDoc”添加click事件,并添加如下代码:if (m_mapControl.CheckMxFile(m_mapDocumentName)){IMapDocument mapDoc = new MapDocumentClass();mapDoc.Open(m_mapDocumentName, string.Empty);if (mapDoc.get_IsReadOnly(m_mapDocumentName)){MessageBox.Show("Map document is read only!");mapDoc.Close();return;}mapDoc.ReplaceContents((IMxdContents)m_mapControl.Map);mapDoc.Save(esRelativePaths, false);mapDoc.Close();}9、为菜单“menuSaveAsDoc”添加click事件,并添加如下代码::ICommand command = new ControlsSaveAsDocCommandClass();command.OnCreate(m_mapControl.Object);command.OnClick();10、为菜单“menuExitApp”添加click事件,并添加如下代码:Application.Exit();11、为菜单“menuNewDoc”添加click事件,并添加如下代码:ICommand command = new CreateNewDocument();command.OnCreate(m_mapControl.Object);command.OnClick();12、为控件“axMapControl1”添加OnMouseMove事件,并添加如下代码:statusBar1.Text = string.Format("{0}, {1} {2}", e.mapX.ToString("#######.##"),e.mapY.ToString("#######.##"), axMapControl1.MapUnits.ToString().Substring(4));13、为控件“axMapControl1”添加OnMapReplaced事件,并添加如下代码:m_mapDocumentName = m_mapControl.DocumentFilename;if (m_mapDocumentName == string.Empty){menuSaveDoc.Enabled = false;statusBar1.Text = string.Empty;}else{menuSaveDoc.Enabled = true;statusBar1.Text = Path.GetFileName(m_mapDocumentName);}三、操作通过操作调试该程序源码,观察并掌握AE中对于地图文件保存的操作方法。
ArcGISEngineVC
+ ArcEngine一、初步开始 (1)二、鹰眼功能实现 (3)三、将地图导出为图片 (4)四、打印功能实现(如ArcMap中的打印对话框) (5)五、点击查询 (6)六、mapControl和 pageLayoutControl切换问题 (11)七、mapControl和 pageLayoutControl同步问题 (11)初步开始一、初步开始1.新建exe工程;2.在Application Type中选择SingleDocument单文档模式;在Generated Classes中选择CFormView,创建工程。
3.打开Dialog菜单下的IDD_EMEVALUATION_FORM,点击Toolbox,点击右键,选择Choose Items,弹出对话框,选择Com Components,选择Esri的控件,MapControl控件,TocControl控件(图层控制),LicenseControl控件,ToolbarControl控件等常用的控件。
4.在Toolbox中可以观察到添加了以上选择的控件,在对话框IDD_EMEV ALUATION_FORM中添加MapControl控件,TocControl控件(图层控制),LicenseControl控件,ToolbarControl控件;5.为以上控件添加变量;在*View.cpp中的OnSize函数中添加以下代码:if(0 == cx || 0 == cy || 0 == m_mapControl || 0 == m_tocControl || 0 == m_toolbarControl || 0 ==m_mapEyeControl) return;m_toolbarControl.MoveWindow(0,0,int(cx*0.5),25,TRUE);m_toolbarPLayControl.MoveWindow(int(cx*0.5),0,cx,25,TRUE);m_tocControl.MoveWindow(0,25,300,cy-250,TRUE);m_pagelayoutControl.MoveWindow(300,25,cx-300,cy-25,TRUE);m_mapControl.MoveWindow(300,25,cx-300,cy-25,TRUE);m_mapEyeControl.MoveWindow(0,cy-250,300,250,TRUE);将*.cpp中的m_pMainWnd->ShowWindow(SW_SHOWNORMAL)改为m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED)使窗口最大化。
ARCGIS Engine.C#开发GIS应用
利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用Dixon整理此过程说明适合那些使用.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中IColor、IRGBColor和Win32 Color和.Net中Color相互转换
AE中IColor、IRGBColor和Win32 Color和.Net中Color相互转换1 ArcGIS Engine与.Net中Color互转1.1 将.NET中的Color结构转换至于ArcGIS Engine中的IRgbColor接口''' <summary>''' 将.NET中的Color结构转换至于ArcGIS Engine中的IRgbColor接口''' </summary>''' <param name="pColor">.NET中的System.Drawing.Color结构表示ARGB颜色</param> ''' <returns></returns>''' <remarks></remarks>Public Function ConvertColorToIRgbColor(ByVal pColor As Color) As IRgbColorDim pRgbColor As IRgbColor = New RgbColorpRgbColor.RGB = pColor.B * 65536 + pColor.G * 256 + pColor.RReturn pRgbColorEnd Function#End Region1.2 将.NET中的Color结构转换至于ArcGIS Engine中的IColor接口''' <summary>''' 将.NET中的Color结构转换至于ArcGIS Engine中的IColor接口''' </summary>''' <param name="pColor">.NET中的System.Drawing.Color结构表示ARGB颜色</param> ''' <returns></returns>''' <remarks></remarks>Public Function ConvertColorToIColor(ByVal pColor As Color) As IColorDim pESRIColor As IColor = New RgbColorpESRIColor.RGB = pColor.B * 65536 + pColor.G * 256 + pColor.RReturn pESRIColorEnd Function#End Region1.3 将ArcGIS Engine中的IRgbColor接口转换至.NET中的Color结构''' <summary>''' 将ArcGIS Engine中的IRgbColor接口转换至.NET中的Color结构''' </summary>''' <param name="pRgbColor">IRgbColor</param>''' <returns>.NET中的System.Drawing.Color结构表示ARGB颜色</returns>''' <remarks></remarks>Public Function ConvertIRgbColorToColor(ByVal pRgbColor As IRgbColor) As ColorReturn ColorTranslator.FromOle(pRgbColor.RGB)End Function#End Region1.4 将ArcGIS Engine中的IColor接口转换至.NET中的Color结构''' <summary>''' 将ArcGIS Engine中的IColor接口转换至.NET中的Color结构''' </summary>''' <param name="pColor">IColor</param>''' <returns>.NET中的System.Drawing.Color结构表示ARGB颜色</returns>''' <remarks></remarks>Public Shared Function ConvertIColorToColor(ByVal pColor As IColor) As Color Return ColorTranslator.FromOle(pColor.RGB) '特别注意此处不能用Color.FromArgb(pColor.RGB),用该函数得到的将是R与B位置相反的颜色值End Function#End Region注:以上代码用编写2 .Net与Win32中的Color互转COLORREF类型颜色的值COLORREF cr=RGB(123,200,12);其中的R、G、B三个分量的排列顺序是BGR。
ArcGIS Engine C#程序开发
基于ArcGIS Engine+C#程序开发入门1、创建基于ArcEngine的Windows Application项目(EngineTest)2、设置ArcEngine功能模块(1) Standard ArcGIS Engine functionality//The standard ArcGIS Engine Runtime provides the core functionality of all ArcGIS applications.(2) ArcGIS Engine extensions//Geodatabase Update extension//Spatial extension//3D extension//Network extension//Maplex extension(New at 9.2)//Tracking extension//Schematics//Data Interoperability extension (New at 9.2)3、设置ArcEngine引用库●//System库是ArcGIS框架中最底层的一个库,它包含了一些被其他库使用的一些组件。
●//SystemUI库定义了一些在ArcGIS中被用户界面组件使用的类型。
象Icommand和Itool这样的接口就在这里定义。
●//Geometry几何库包含了核心的几何对象,比如点,面,线等。
在几何库中还定义和实现了空间参考的对象,包括投影坐标系和几何坐标系。
●//Display显示库包含了支持在输出设备上显示图形的组件,屏幕显示,符号,颜色等都在这个库中定义。
●//Controls控件库包含了应用程序开发中用到的控件,包括在控件中使用的命令和工具。
●//Carto库包含了为数据显示服务的对象。
PageLayout和Map对象在这个库中,以及支持各种数据类型的图层,渲染。
这个库中包括MxdServer和MapServer对象,它们通常被Server用来显示地图数据。
关于ArcgisEngine
关于ArcgisEngine
ArcGIS Engine 是“可嵌⼊的 GIS 组件”和“开发⼈员资源”的集合,允许您向现有应⽤程序添加动态地图和 GIS 功能,或允许您构建新的⾃定义地图应⽤程序。
在桌⾯或移动应⽤程序中,开发⼈员通过 ArcGIS Engine 的 .NET、Java 和 C++ 的 API,来部署 GIS 数据、地图和地理处理脚本。
以下是将 ArcGIS Engine ⽤于各种解决⽅案的⼀些⽅法:
快速构建⽀持 GIS 的应⽤程序(使⽤开箱即⽤的开发⼈员控件)。
创建和绘制图形要素,包括点、线、圆和多边形,以编辑地理数据(在应⽤程序中)。
对图形执⾏地理操作,以创建缓冲区、计算差异并查找图形的交集、联合或反向交集,以及更⾼级的操作。
求解并进⾏⽹络分析,以找到最佳路线和最近的设施点,并确定应分配的路线。
以 3D 形式有效地可视化和分析表⾯和地球数据。
ArcGIS Engine 产品受Windows和 Linux ⽀持,并可与Visual Studio和“其他受⽀持的 Java 和 C++ 开发环境”⼀起使⽤。
系统要求
有关 ArcGIS Engine 系统要求的列表,请参阅资源中⼼⽹站上的。
有关 ArcObjects SDK 系统要求,请参阅资源中⼼⽹站上的。
注意
从 ArcGIS 10 开始,进⾏基于 ArcGIS Engine 的开发,需要安装 ArcGIS Engine(即起码的 ArcObjects SDK for .NET、C++ 或 Java),以及 Engine 开发包的授权许可。
即使计算机上安装了 ArcGIS Desktop,这也是必需的。
ArcGISEngine拓扑规则转换为中文C#代码
ArcGISEngine拓扑规则转换为中文C#代码ArcGIS Engine拓扑规则转换为中文C#代码private void ConvertT opologyRuleType(ref string topoRuleType){switch (topoRuleType){case"esriTRTAreaNoGaps":topoRuleType = TopoErroType.面要素之间无空隙.T oString();break;case"esriTRTAreaNoOverlap":topoRuleType = TopoErroType.面要素间无重叠.ToString();break;case"esriTRTAreaCoveredByAreaClass":topoRuleType = TopoErroType.第二个图层面要素必须被第一个图层任一面要素覆盖.ToString();break;case"esriTRTAreaAreaCoverEachOther":topoRuleType = TopoErroType.两图层面要素必须互相覆盖.ToString();break;case"esriTRTAreaCoveredByArea":topoRuleType = TopoErroType.第一个图层面要素必须被第一个图层任一面要素包含.ToString();break;case"esriTRTAreaNoOverlapArea":topoRuleType = TopoErroType.图层间面要素不能相互覆盖.ToString();break;case"esriTRTLineCoveredByAreaBoundary":topoRuleType = TopoErroType.线要素必须跟面图层边界的一部分或全部重叠.ToString();break;case"esriTRTPointCoveredByAreaBoundary":topoRuleType = T opoErroType.点要素必须落在面要素边界上.ToString();break;case"esriTRTPointProperlyInsideArea":topoRuleType = TopoErroType.点要素必须落在面要素内.ToString();break;case"esriTRTLineNoOverlap":topoRuleType = T opoErroType.线要素间不能有相互重叠部分.ToString();break;case"esriTRTLineNoIntersection":topoRuleType = T opoErroType.线要素之间不能相交.ToString();break;case"esriTRTLineNoDangles":topoRuleType = TopoErroType.线要素不允许有悬挂点.ToString();break;case"esriTRTLineNoPseudos":topoRuleType = TopoErroType.线要素不允许有假节点.ToString();break;case"esriTRTLineCoveredByLineClass":topoRuleType = TopoErroType.第一个图层线要素应被第二个线图层线要素覆盖.ToString();break;case"esriTRTLineNoOverlapLine":topoRuleType = TopoErroType.第一个图层线要素不被第二个线图层线要素覆盖.ToString();break;case"esriTRTPointCoveredByLine":topoRuleType = TopoErroType.点要素应被线要素覆盖.ToString();break;case"esriTRTPointCoveredByLineEndpoint":topoRuleType = TopoErroType.点要素应在线要素的端点上.ToString();break;case"esriTRTAreaBoundaryCoveredByLine":topoRuleType = T opoErroType.面要素边界必须被线要素覆盖.ToString();break;case"esriTRTAreaBoundaryCoveredByAreaBoundary":topoRuleType = TopoErroType.面要素的边界必须被另一面要素边界覆盖.ToString();break;case"esriTRTLineNoSelfOverlap":topoRuleType = TopoErroType.线要素不能自重叠.T oString();break;case"esriTRTLineNoSelfIntersect":topoRuleType = TopoErroType.线要素不能自相交.T oString();break;case"esriTRTLineNoIntersectOrInteriorTouch":topoRuleType = TopoErroType.线要素间不能重叠和相交.ToString();break;case"esriTRTLineEndpointCoveredByPoint":topoRuleType = T opoErroType.线要素端点必须被点要素覆盖.ToString();break;case"esriTRTAreaContainPoint":topoRuleType = TopoErroType.面要素内必须包含至少一个点要素.ToString();break;case"esriTRTLineNoMultipart":topoRuleType = TopoErroType.线不能是多段.T oString();break;default:break;}}public enum T opoErroType{面要素之间无空隙=1,面要素间无重叠=3,第二个图层面要素必须被第一个图层任一面要素覆盖=4,两图层面要素必须互相覆盖=5,第一个图层面要素必须被第一个图层任一面要素包含=7,图层间面要素不能相互覆盖=8,线要素必须跟面图层边界的一部分或全部重叠=10,//线要素必须在面图层要素类=8,点要素必须落在面要素边界上=13,点要素必须落在面要素内=15,//面要素必须得包含一个点=11,线要素间不能有相互重叠部分=19,线要素之间不能相交=20,线要素不允许有悬挂点=21,线要素不允许有假节点=22,第一个图层线要素应被第二个线图层线要素覆盖=26, 第一个图层线要素不被第二个线图层线要素覆盖=28, 点要素应被线要素覆盖=29,点要素应在线要素的端点上=31,面要素边界必须被线要素覆盖=37,面要素的边界必须被另一面要素边界覆盖=38,线要素不能自重叠=39,线要素不能自相交=40,线要素间不能重叠和相交=41,线要素端点必须被点要素覆盖=42,面要素内必须包含至少一个点要素=43,线不能是多段=44};。
ArcGIS_Engine课件讲述
3、ArcGIS 与 ArcObjects
ArcGIS是构建在ArcObjects组 件库之上。
ESRI 使用 ArcObjects来开发软
件和应用程序。 开发者使用ArcObjects去客户化
软件与创建自己的应用程序。 ArcObjects 是 ArcGIS 的核心。
目录
1 ArcGIS体系结构 2 ArcGIS Engine是什么 3 ArcGIS Engine的主要功能 4 ArcGIS Engine类库 5 ArcGIS Engine控件 6 接口的概念 7 对象模型图的阅读 8 什么是地理数据库 9 ArcGIS Engine开发环境与流程
ArcGIS Engine类库:4、Display
❖ 用于控制地图显示。 ❖ 包含用于显示GIS数据的对象。 ❖ 包含符号、颜色等用来控制显示的对象。 ❖ 包含交互操作时提供给用户显示回馈的对象,如
MoveEnvelopeFeedback。
ArcGIS Engine类库:5、Server
❖ 用来连接并操作ArcGIS Server。 ❖ 访问ArcGIS Server的ServerObjectsManager对
Engine Developer Kit
.NET C++ VB Java
ArcObjects
Server Developer Kit
Java ADF
.NET ADF
C++
Customization
JavaScript
XML
HTML/DHTML .NET
Services
JSP ActiveX (ASP) Java ColdFusion
目录
1 ArcGIS体系结构 2 ArcGIS Engine是什么 3 ArcGIS Engine的主要功能 4 ArcGIS Engine类库 5 ArcGIS Engine控件 6 接口的概念 7 对象模型图的阅读 8 什么是地理数据库 9 ArcGIS Engine开发环境与流程
优-ArcEngine基础开发教程C#二次开发ArcGis
04/04/2011
第 5 页,共 80 页
山东农业大学资源与环境学院
世界有我精彩-【侯志伟】整理
//添加第一个点,不需要设置点的顺序,参数设置为 Type.Missing pMultipoint.AddPoint(pPoint1, ref o, ref o); //添加第二个点,不需要设置点的顺序,参数设置为 Type.Missing pMultipoint.AddPoint(pPoint2, ref o, ref o); ……//添加其他点 2.4.2Segment 几何对象
地理信息系统08-3
2.4.3Path 和 Ring 几何对象 2.4.3.1Path 几何对象 Path 是连续的 Segment 的集合,除了路径的第一个 Segment 和最后一个 Segment 外其余的 Segment 的起始点都 是 前 一 个 Segment 的 终 止 点 , 即 Path 对 象 的 中 的 Segment 不 能 出 现 分 离 , Path 可 以 是 任 意 数 的 Line,CircularArc,EllipticArc 和 BezierCurve 的组合。
一个 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 对象:
ArcGIS_Engine+C#实例开发教程+添加标注(完整资料).doc
【最新整理,下载后即可编辑】第一讲桌面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,制版)。
arcengine基于c#编程实例讲解
ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立作者: 文章来源:3SDN原创点击数:5743 更新时间:2009-5-12版权声明:《ArcGIS Engine+C#实例开发教程》为3SDN()原创教程,版权所有。
禁止商业用途转载(如需请联系作者),非商业用途转载请注明出处。
教程采用C#语言,以VS2005为开发工具。
读者对象:ArcGIS Engine(以下简称AE)开发初学者, 了解AE基本体系,了解C#基本语法,了解VS2005的基本使用方法。
预期学习效果:进一步理解AE的体系结构与开发方法,掌握基本的GIS桌面应用程序的开发。
教程目录:第一讲桌面GIS应用程序框架的建立第二讲菜单的添加及其实现第三讲MapControl与PageLayoutControl同步第四讲状态栏信息的添加与实现第五讲鹰眼的实现第六讲右键菜单添加与实现教程Bug及优化方案1第七讲图层符号选择器的实现1第七讲图层符号选择器的实现2第八讲属性数据表的查询显示------------------------------------------------------------------第一讲:桌面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。
ArcGISEngine+C缓冲区分析及完整源码6页
1 概述缓冲区分析(Buffer)是对选中的一组或一类地图要素(点、线或面)按设定的距离条件,围绕其要素而形成一定缓冲区多边形实体,从而实现数据在二维空间得以扩展的信息分析方法。
缓冲区应用的实例有如:污染源对其周围的污染量随距离而减小,确定污染的区域;为失火建筑找到距其500米范围内所有的消防水管等。
2 缓冲区的基础缓冲区是地理空间,目标的一种影响范围或服务范围在尺度上的表现。
它是一种因变量,由所研究的要素的形态而发生改变。
从数学的角度来看,缓冲区是给定空间对象或集合后获得的它们的领域,而邻域的大小由邻域的半径或缓冲区建立条件来决定,因此对于一个给定的对象A,它的缓冲区可以定义为:P={x | d(x , A)<=r}(d一般是指欧式距离,也可以是其它的距离,其中r为邻域半径或缓冲区建立的条件)缓冲区建立的形态多种多样,这是根据缓冲区建立的条件来确定的,常用的对于点状要素有圆形,也有三角形、矩形和环形等;对于线状要素有双侧对称、双侧不对称或单侧缓冲区;对于面状要素有内侧和外侧缓冲区,虽然这些形体各异,但是可以适合不同的应用要求,建立的原理都是一样的。
点状要素,线状要素和面状要素的缓冲区示意图如下。
3 定制工具的使用1 打开工程GPBufferLayer\CSharp\GpBufferLayer.sln2 在VS2005内选择重新生成解决方案3 开发需要添加工具的工程4 在ToolBarControl上点右键,选择属性5 选择条目,点击添加6 在命令类中选择“自定义工具集”,选择“缓冲区分析”,可通过双击或者拖放到工具条上。
7 运行程序8 使用“选择要素”命令,选择需要建立缓冲区的要素(点或线)9 点击工具条上的“缓冲区分析按钮”,弹出缓冲区分析对话框选择要素选择缓冲区分析按钮10 选择缓存分析的图层,选择距离及单位,设置输出的图层11 点击分析按钮,当出现“分析完成”字样时,工作完成12 这时通过附加新的图层,即可看到结果4 核心源代码分析4.1 BufferSelectedLayerCmd.cs主要完成定制command的相关代码,具体原理可参见《ArcGIS Engine 中文开发指南》4.2 BufferDlg.cs为缓冲区分析的输入对话框。
ArcGIS Engine开发入门介绍
ArcGIS Engine开发入门介绍
文/ 罗雄 客户及合作伙伴支持部 ArcGIS Engine是ESRI为广大开发者提供的一套基于 ArcObjects之上的,用于创建客户化GIS桌面应用程序的组 件,它包含ArcGIS客户端应用的核心功能,可以快速,方便 地构建所需的GIS应用.本文将为使用Engine开发的新手们 提供基础的思路和引导,让大家对Engine有一个快速的认识 和起步. ArcGIS Engine:嵌入式GIS组件库,可使用C++, COM,.NET和Java来构建自定义的,面向行业的应用软件; ArcGIS Server:GIS软件对象的共享库,用于构建企业 和网络计算框架内的应用软件.它使用.NET/ASP和Java/JSP 来构建基于SOAP的网络服务和网络应用程序; ArcIMS:GIS网络服务,通过开放的因特网协议发布地
96
ArcGIS中国通讯
刊首语 技术讲座
2.3 ArcEngine与ArcObjects的关系
我们说AE是AO的一个子集,因此AE里包含的功能, AO都会有,但AO里的功能在AE里不一定有提供.先来看一 下组件差别:
图2 . ArcEngine组件内容
似的,因此我们初学者在使用AE开发的时候最好先研究一下 Desktop里相关功能的操作方式.
2. 多种开发方式
2.1 IDL独立开发
IDL作为一种面向矩阵的语言,具备命令行模式,可以 创建批处理程序,主程序文件和工程,能够快速建立原型系 统并发布成独立运行的程序. IDL可以灵活方便的进行数据的输入,输出,具有强大
图6 ArcEngine模板工程
使用自带的模板,一个基于ArcEngine的基础应用程序
ArcGIS Engine-C#实例开发教程
ArcGIS Engine+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,制版)。
ArcGISEngine二次开发——基础篇
ArcGIS Engine二次开发——基础篇1ArcGIS Engine二次开发——基础篇1.1第一个简单的ArcGIS 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”前面打勾)。
1ARCGIS ENGINE C# 实例开发教程:第一讲 桌面GIS应用程序框架的建立
ArcGIS Engine+C#实例开发教程:第一讲桌面GIS应用程序框架的建立本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。
最终成果预览如下:新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择Visual C#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。
在解决方案管理器中将“Form1.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。
添加控件选择工具箱中的“菜单和工具栏|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,制版)。
ArcGIS Engine
《ArcGIS Engine+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。
选择工具箱中的“容器|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,制版)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 概述
缓冲区分析(Buffer)是对选中的一组或一类地图要素(点、线或面)按设定的距离条件,围绕其要素而形成一定缓冲区多边形实体,从而实现数据在二维空间得以扩展的信息分析方法。
缓冲区应用的实例有如:污染源对其周围的污染量随距离而减小,确定污染的区域;为失火建筑找到距其500米范围内所有的消防水管等。
2 缓冲区的基础
缓冲区是地理空间,目标的一种影响范围或服务范围在尺度上的表现。
它是一种因变量,由所研究的要素的形态而发生改变。
从数学的角度来看,缓冲区是给定空间对象或集合后获得的它们的领域,而邻域的大小由邻域的半径或缓冲区建立条件来决定,因此对于一个给定的对象A,它的缓冲区可以定义为:P={x | d(x , A)<=r}
(d一般是指欧式距离,也可以是其它的距离,其中r为邻域半径或缓冲区建立的条件)
缓冲区建立的形态多种多样,这是根据缓冲区建立的条件来确定的,常用的对于点状要素有圆形,也有三角形、矩形和环形等;对于线状要素有双侧对称、双侧不对称或单侧缓冲区;对于面状要素有内侧和外侧缓冲区,虽然这些形体各异,但是可以适合不同的应用要求,建立的原理都是一样的。
点状要素,线状要素和面状要素的缓冲区示意图如下。
3 定制工具的使用
1 打开工程GPBufferLayer\CSharp\GpBufferLayer.sln
2 在VS2005内选择重新生成解决方案
3 开发需要添加工具的工程
4 在ToolBarControl上点右键,选择属性
5 选择条目,点击添加
6 在命令类中选择“自定义工具集”,选择“缓冲区分析”,可通过双击或者拖放到工具条上。
7 运行程序
8 使用“选择要素”命令,选择需要建立缓冲区的要素(点或线)
9 点击工具条上的“缓冲区分析按钮”,弹出缓冲区分析对话框
选择要素
选择缓冲区分析按钮
10 选择缓存分析的图层,选择距离及单位,设置输出的图层
11 点击分析按钮,当出现“分析完成”字样时,工作完成
12 这时通过附加新的图层,即可看到结果
4 核心源代码分析
4.1 BufferSelectedLayerCmd.cs
主要完成定制command的相关代码,具体原理可参见《ArcGIS Engine 中文开发指南》
4.2 BufferDlg.cs
为缓冲区分析的输入对话框。
其中最主要的是“分析”按钮的处理事件。
源代码及分析如下:
double bufferDistance;
//转换distance为double类型
double.TryParse(txtBufferDistance.Text, out bufferDistance);
if (0.0 == bufferDistance)
{
MessageBox.Show("Bad buffer distance!");
return;
}
//判断输出路径是否合法
if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(txtOutputPath.Te xt)) ||
".shp" != System.IO.Path.GetExtension(txtOutputPath.Text))
{
MessageBox.Show("Bad output filename!");
return;
}
//判断图层个数
if (m_yerCount == 0)
return;
//get the layer from the map
IFeatureLayer layer = GetFeatureLayer((string)cboLayers.SelectedItem);
if (null == layer)
{
txtMessages.Text += "Layer " + (string)cboLayers.SelectedItem + "cannot be found!\r\n";
return;
}
//scroll the textbox to the bottom
ScrollToBottom();
txtMessages.Text += "\r\n分析开始,这可能需要几分钟时间,请稍候..\r\n";
txtMessages.Update();
//get an instance of the geoprocessor
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
//create a new instance of a buffer tool
ESRI.ArcGIS.AnalysisTools.Buffer buffer
= new ESRI.ArcGIS.AnalysisTools.Buffer(layer,
txtOutputPath.Text, Convert.ToString(bufferDistance) + " " + (string)cboUnits.SelectedItem);
buffer.dissolve_option = "ALL";//这个要设成ALL,否则相交部分不会融合
//buffer.line_side = "FULL";//默认是"FULL",最好不要改否则出错
//buffer.line_end_type = "ROUND";//默认是"ROUND",最好不要改否则出错
//execute the buffer tool (very easy :-))
IGeoProcessorResult results=null;
try
{
results = (IGeoProcessorResult)gp.Execute(buffer, null);
}
catch (Exception ex)
{
txtMessages.Text += "Failed to buffer layer: " + + "\r\n";
}
if (results.Status != esriJobStatus.esriJobSucceeded)
{
txtMessages.Text += "Failed to buffer layer: " + + "\r\n";
}
//scroll the textbox to the bottom
ScrollToBottom();
txtMessages.Text += "\r\n分析完成.\r\n";
txtMessages.Text
+= "-----------------------------------------------------------------------------------------\r\n";
//scroll the textbox to the bottom
ScrollToBottom();。