ArcGIS_Engine+C_实例开发教程
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;// 在绘制前,清除axMapControl2 中的任何图形元素pGra.DeleteAllElements();// 鹰眼视图中添加线框pGra.AddElement((IElement)pFillShapeEle, 0);// 刷新鹰眼pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}当鼠标点击鹰眼窗体时,主窗体Extent随之改变。
Arc Engine开发个人手册
第一章Arc Engine 介绍第二章Arc Engine结构一、Arc Engine包含的主要库文件1、System库ArcGIS结构中最底层的库,包含为其它库提供服务的组件。
2、SystemUI包含为用户界面组件(在ArcEngine中可以进行扩展)定义的接口,包括:ICommand, ITool, 和ItoolControl接口。
3、Geometry处理存储在要素类或其它图形元素中的几何图形要素。
我们经常遇到的基本几何目标有Point, MultiPoint, Polyline 和Polygon4、Display包含显示地理数据的像,如:symbols,colors 等。
我们通常通过类似Map或PageLayout 对像提供的视图(view)来访问Display5、Server包含用来连接到ArcGIS Servers的对像。
我们可以通过GISServerConnection对象访问ArcGIS Server。
6、Output用来将图形输出到设备上,如printers、plotters和hardcopy formats(如:EMF,JPG,BMP等)。
可扩展7、GeoDatabase为geodatabase提供API函数。
可以扩展以支持特定数据格式(Features, Classes, etcetera),可通过PlugInDataSource对象加入自定义的矢量数据源。
Geodatabase支持的本地数据类型无法扩展8、GISClient用来接受ArcIMS和ArcGIS Server.提供的网络服务。
9、DataSourcesFile包含以文件为数据源的(shapefile,coverage, TIN, CAD, SDC, StreetMap, and VPF)部分GeoDatabase API函数的实现。
10、DataSourcesGDB包含以数据库为数据源(Microsoft Access、ArcSDE—IBM DB2, Informix, Microsoft SQL Server, and Oracle)部分GeoDatabase API函数的实现。
ArcEngine二次开发入门介绍
2021/5/27
4
AO的功能
通过AO你可完成以下GIS功能:
❖ 空间数据的显示、查询检索、编辑和分析;
❖ 创建各种专题图和统计报表;
❖ 高级的制图和输出功能;
❖ 空间数据管理和维护;
❖ ……
2021/5/27
5
AO编程基础----COM
❖
❖
❖
❖
COM是Component Object Model的缩写
❖
属性
哑铃形状的图标
Property Get
(read)
❖
Property Set
(write)
方法
2021/5/27
18
设置属性
❖
属性传值: 大部分 ArcObjects的属性
属性保存了一个对象的值或者一个拷贝
不需要使用Set关键字
= "Port Moresby" 'No Set keyword
❖
2021/5/27
27
ArcGIS Engine 组成
两个产品:
❖ Engine开发包是创建自定义的GIS和制图应
用的工具包
❖ Engine运行时是为了运行自定义的Engine应
用的可分发的ArcObjects.
2021/5/27
28
ArcGIS Engine 开发包
❖
❖
组件,APIs,工具的集合,开发人员可以用来创建高级的
平台上。
COM通常的发布形式是:以win32动态链接库(DLL)或可执
行文件(EXE)的形式发布。
2021/5/27
6
COM的目标和特性
❖
ArcEngine_开发文档(ArcGIS AO开发)
ArcEngine 开发1.基础篇1.1.开发环境1.1.1.如何在ArcMap的VBA环境中编程ArcMap是ArcGIS家族的成员之一,它内置了一种集成编程环境―VBA (Visaul Basic for Apllications)。
通过VBA编程,用户不但可以扩展ArcMap 的菜单、工具条等,而且可以完成大多数用户的特定需求。
ArcMap中VBA编程的方法有两种,一种是写VBA宏,另一种是创建UIControl 并在其事件中写入实现用户需求的代码。
下面列出两种方法的一般步骤。
方法一:写VBA宏(直接在VBA编辑器中编辑函数和过程)1、如图1,单击菜单栏中的<Tools>命令,选择<Macros>的<Visual Basic Editor>项, 直接启动ArcMap的VBA编辑器;或者选择<Macros>的<Macros>项,进入如图2所示Macro对话框,在“Macro Name”文本框中输入要创建的宏的名称,并点<Create>按钮,启动VBA编辑器。
图1 启动Macro对话框/启动VBA编辑器图2 Macro对话框2、在图3所示的窗口中,用户可以根据实际选择在Normal节点或者Project 节点的ThisDocument、Forms、Modules中编写宏(函数或过程),Normal节点下所写的宏系统自动保存,除非用户删除,否则它将始终存在并在任何工程中都有效;而在Project节点下所写得宏随工程保存(如不保存工程,则宏也将不被保存),并只在工程中有效。
图3 VBA编辑器(VBE)3、运行VBA宏在VBA编辑器中写好VBA代码后,有两种方式运行:第一,点击VBA编辑器工具条中的(运行)按钮,可立即运行写好的代码;第二,退出VBA编辑器,重新启动Macro对话框,如图2,选择要运行的VBA宏名称,点击<Run>按钮即可运行相应的VBA宏。
ArcEngine二次开发入门介绍
ArcObjects OMD图表上的虫洞
概念上,这是一个对象模型 事实上, 被分别在几张图表里存放
虫洞表现了图表与图表间的连接关系
虫洞
Element on ArcMap OMD
FeatureLayer on Map Layer OMD
例子: MxDocument > Map > layer
或者通过另一个类的实例化来创建对象。
在OMD中的关系类型主要有: 类型继承(AT和yBpe为in普h通eri类ta对nc象e),C为组件类对象,D为一普通类, 创建(Inst如an下tia面tio代n码): 组成(ComAp=osBit.iwornit)eA:()对象间的主次关系
) 关联(AssAoc=iaCtio.wnrsiteA()
*
Layer
ILayer pLayer = pMap. get_Layer(1);
// Is( pLayer is IFeatureLayer ) {
FeatureLayer
MessageBox.Show( "Yes!, it’s a feature layer" ); }
从当前的文档中取得聚焦的Map (active data frame)
MxDocument 可以包含一些 Maps ( * )
从一个 Map中取得图层对象
MxDocument
图层对象有多种的类型 ( )
*
Map
IMxDocument pMxDoc = LoadMxdDoc (@"c:\Temp\test.mxd"); IMap pMap = pMxDoc.FocusMap;
������ GeoTransformations(地理变换)对象等。
arcgisengine二次开发实例
arcgisengine二次开发实例
ArcGIS Engine是ArcGIS系列软件产品之一,用于在分布式系统环境下构建ArcGIS 技术,实现GIS应用软件开发。
开发人员可以利用ArcGIS Engine来构建自定义GIS应用程序、地理空间分析应用程序以及分布式GIS解决方案。
ArcGIS Engine提供了一个强大的开发平台,它的几乎所有的开发框架以及资源都位于一个方便的框架中,开发人员可以使用其中的几中可视化控件进行ArcGIS地图和数据应用开发。
ArcGIS Engine是一款基于COM(Component Object Model)技术的GIS应用平台,它通过COM在用户定义的交互界面之间提供了独立的组件。
组件定义了一种行为和数据的概念,组件间的交互可以非常简单的实现。
ArcGIS Engine可以作为地图数据的可视化引擎,允许开发者使用统一的图形化界面控制地图的显示和操作。
此外它还可提供复杂的数据空间分析模块,在开发人员输入实际的空间数据后,可进行数据空间分析,产生对空间结果分析的可视化输出。
ArcGIS Engine可以让开发者灵活地构建系统架构,以满足自定义的GIS应用开发需求。
开发人员可以使用ArcGIS Engine的组件,使其在分布式的应用程序框架中更好的发挥作用。
比如可以使用专业矢量处理组件,在GIS信息系统中构建面板,并在面板上放入各种可视化控件,满足对空间数据的管理和空间数据分析需求。
ArcEngine入门详细教程
22
空间分析扩展
创建、查询和分析基于像元的栅格数据
坡度计算 坡向计算 用数字高程模型生成等高线 ……
2015-3-11
来吧,让我们一起走向成功!
23
3D分析扩展
实现数据的三维可视化 提供SceneControl和GlobeControl 创建表面和分析表面的多层3D数据 把3D功能嵌入到应用系统中。
来吧,让我们一起走向成功!
6
2、ArcGIS 的服务器端
ArcSDE
ArcSDE是ESRI的空间数据库引擎,用于对海量空间数据及其属性数据的管
理和驱动,为并发访问的客户端提供快速、安全的数据服务。ArcSDE支持 工业标准的DBMS平台(如:ORACLE、SQL Server、DB2、Informix等),
开发者使用的 包含了所有开发库和开发资源 可以进行所有的选项开发
两个产品都通过软件许可文件授权
2015-3-11 来吧,让我们一起走向成功! 12
ArcGIS Engine Developer Kit产品
用来创建独立、嵌入式的桌面应用程序
包含构建ArcGIS Engine应用程序所需的许可 构建在ArcObjects基础之上
是基于ArcGIS Engine应用的运行时
可分发安装
跨平台
Windows, UNIX & Linux
没有ArcGIS桌面应用框架或对话框 需要许可授权
通过代码或应用工具配置
2015-3-11
来吧,让我们一起走向成功!
15
ArcGIS Engine Runtime产品
ArcGIS Engine运行时包含:
2015-3-11 来吧,让我们一起走向成功! 10
牟乃夏 ArcEngine教程 第2章 桌面GIS应用软件的开发方式
2. 使用DLL进行桌面软件开发
• 运行程序后并没有显示ZoomIn工具,这时需要对DLL功能应用部 署。
3. 使用Add-In进行桌面软件开发
• Add-In是ArcGIS 10.0提供的一种能够快速扩展桌面应用程序的全新 的扩展方式。其特点包括:
• • • • 1). 容易创建 2). 更易共享 3). 更加安全 4). 更易安装和管理
1. 使用VBA进行桌面软件开发
• 通过VBA开发环境进行ArcGIS桌面软件的扩展和定制是最简单的 GIS软件开发方式。只需专注于ArcGIS软件不能提供的功能,对于 ArcGIS软件已经提供的工具,直接“拿过来”使用即可。并且VBA 环境本身已经提供了对整个应用程序和文档进行控制的变量,例 如在ArcMap中开发人员可以直接通过Application、ThisDocument 两个全局变量获取程序本身和程序所使用的文档对象,使开发更 为快捷和简单。 • 在ArcGIS 10.0版本中,进行VBA的开发需要单独安装VBA开发程序 模块,安装ArcGIS Desktop时不再附带VBA安装选项。根据操作方 式的不同,在ArcGIS Desktop中进行VBA编程的方法有两种:一种 是编写VBA宏命令,另一种是创建UIControl工具并在其事件中写 入实现代码。
3. 使用Add-In进行桌面软件开发
• 下面以“获取多边形选择集”为例,介绍如何采用Add-In开发方 式进行桌面程序的扩展。 • 1)启动Visual Studio 2010,选择【文件】→【新建项目】,在弹 出对话框左侧“Visual C#”选择项下,选择 “ArcGIS”→“Desktop Add-Ins”,在右侧窗口中,选择 “ArcMap Add-in”方式,输入新建项目的名称 “SampleArcMapAddin”,选择项目的存储位置“C:\”,点击 【确定】按钮,创建Add-In示例项目。
基于.NET的ArcGIS Engine 的开发
目录实验目的 (2)实验内容 (2)实验步骤 (2)结论 (11)基于.NET的ArcGIS Engine 的开发实验目的.NET框架引入一个改进的安全模式,.NET框架不会自动使用当前版本公共语言运行库来运行使用以前版本的.NET框架构建应用程序,因此,在.NET4框架下运行以前的运用程序,使用Visual Studio的项目的属性中制定的目标.NET框架来重新编译你的应用程序,或者在应用程序的配置文件中使用元素来指定支持的运行时刻库。
实验内容将应用程序用到的ArcGIS控件和其他的ArcGIS Engine库引用装载到开发环境之中。
实验步骤1、Visual ,从“新建项目”对话框中创建一个新的Visual C# “windows窗体应用程序”项目,如图1所示。
图12、将项目命名为“Sample”,并选择“位置”保存该项目。
3、单击“视图”菜单,选择“工具箱”子菜单项。
4、4、在“工具箱”空白处右键,在弹出的快捷菜单中选择“添加选项卡”,然后在新增选项卡上输入“ESRI”作为选项卡标签,如图2。
图25、在弹出的对话框中选择“NET Framework组件”选项卡,选中“AxMapControl”、“AxPageLayoutControl”、“AxToCControl”和“AxToolbarControl”等复选框,单击“确定”,将所选的控件添加到工具栏上,如图3。
图36、在“项目”菜单上选择“添加引用”项添加引用,如图4所示,添加如下项目。
图47、打开.NET窗体,双击“工具箱”中“ESRI”标签栏中的AxMapControl控件,将MapControl加入到窗体上,再将AxToolbarControl也添加到窗体上,如图5。
图58、在窗体上双击显示窗体代码窗口,加载图层到MapControl中,在FormLoad事件中添加地图文档加载代码,代码如下图6中所示。
图69、设置ToolbarControl与MapControl控件关联。
优-ArcGIS Engine 的一些实现代码C#二次开发ArcGis
IQueryFilter pQueryFilter = new QueryFilter(); pQueryFilter.WhereClause = "POP > 10"; IFeatureSelection pFeatSel = pFeatureLayer as IFeatureSelection; pFeatSel.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false); axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null); //在新定义图层的基础上进行的查询
●·● 实现:只显示筛选的要素:
--------------------------------------------------------------------------------------------------------
●·● IFeatureLayerDefinition 接口:
●·● 实现:鼠标滑过显示要素 tip:
对于这个有两个方法: 第一种:通过将 axmapcontrol 自带的 ShowMapTips 属性设置为 true 来实现。 第二种:通过 .NET 自带的控件 ToolTip 来实现! 第一种代码:
怎样在没有授权的状态下开发ArcGIS Engine
注意在这里,使用esriLicenseProductCodeArcInfo表示使用ARC/INFO的授权来运行程序,咱没有AGER的授权。
因为没有AGED的授权,所有空间的属性页面中不提供对控件的属性设置了,如工具条根本就没有办法在上面添加工具。所有的属性设置及相应的一些操作都必须采用Program的方式来进行。如设置Buddy以及添加工具:
axToolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
axToolbarControl1.AddItem("esriControls.ControlsMapPanTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
这个窗口很恐怖吧,所有的AGE控件上都有一堆文字提示你没有授权的问题。此外比较麻烦的是,系统不住的弹出未授权的警告信息(要想办法去掉,否则没办法玩)。
在开发过程中,如果使用了LicenseControl,大概一分钟左右,VS会提示你AGER没有授权,然后直接关闭VS。这个问题处理方法到也简单。实际上因为咱根本没有AGED授权,使用LicenseControl也是白搭,那就不要用了,采用Program的方式来进行授权就好了。直接在Program.cs中Main函数一开始的地方加入代码(不知道怎样贴代码才会漂亮一点):
怎样在没有授权的状态下开发ArcGIS Engine 102010年09月29日 下午 11:22很微妙的一点技巧。ArcGIS Engine 10的授权方式发生了变化,以前我经常安装好ArcGIS Desktop后直接进行ArcGIS Engine的授权进行开发,现在不能简单的采用这种方式了。
ArcGIS Engine基础实战
Engine 库 – 制图、绘制、选择、编辑等 Control 库 – 地图控件、布局控件、工具条等
APIs
COM、.NET、Java、C++
工具
文档、开发工具
ArcGIS Engine功能框架
基本服务 数据访问 地图分析
应用层需要用到的 ArcObjects 核心对象 几何图形的操作与显示 地理数据集,矢量,栅格数据
IQueryFilter、 IRaster、IRasterCursor、IRasterDataset、IRelationship、
IReplica、 ISelectionSet、ISurface、ITin、ITopology、 IVersion、
主要类库介绍—GeodataBase
DataSourcesFile
包含了为支持的矢量数据格式提供的工作空间工厂和工作空间。
ICoverageFeatureClass、ICadDrawingLayers、 IGPLayer、 ArcInfoWorkspaceFactory、CadWorkspaceFactory、SDCWorkspaceFactory、 ShapefileWorkspaceFactory、TinWorkspaceFactory、VpfWorkspaceFactory
PageLayoutControl、SceneControl、Snapping、Symbology、
TOCControl、ToolbarControl、ToolbarItem、、、
主要类库介绍—Display
Display
显示库包含了支持在输出设备上显示图形的组件,屏幕显示, 符号,颜色等都在这个库中定义。 BalloonCallout、ScreenDisplay 绘图跟踪器:EngineRotateTracker、EnvelopeTracker、 字体、颜色: RgbColor、CmykColor 点、线、面符号样式:简单符号、图片符号、专题符号 制图表达:RepresentationRule、 符号库:ServerStyleGallery、ServerStyleGalleryItem
ArcGIS Engine控件编程详解
ArcGIS Engine控件编程详解一、主要内容1、在 VB 中使用 ArcGIS Engine 的四个常用控件 MapControl、PageLayoutControl、TOCControl和 ToolBarControl;2、向地图控件中装载地图文档、增加不同类型的图层;3、伙伴控件的设置;4、ToolBarControl的设置;5、VB 窗体大小变化的控制事件 Form_Resize 的设置。
二、学时安排:2 学时三、预习内容回顾 ArcGIS Engine 的四个常用控件 MapControl、PageLayoutControl、TOCControl 和 ToolBarControl 所实现的接口及所包含的属性和方法,了解一些相关的常量。
四、ArcGIS Engine 控件编程1、实验准备1)在 D 盘上建立一文件,命名为 EnginePractice;2)启动 VB,新建一工程,命名为 EngineControl,并将其保存到 EnginePractice中;3)在 Form1 窗体中分别引入 MapControl、PageLayoutControl、TOCControl、两个 ToolBarControl、一个 TabStrip 控件及一个 CommonDialog 控件。
ØTabStrip 控件的引入如下图:Ø CommonDialog控件的引入如下图:4)将控件布局到窗体 Form1 上,并添加菜单,如下图:5)菜单的添加—选择[Tools]菜单项选择[Menu Editor… Ctrl+E]如下图:Ø编辑[File]菜单各子菜单分别命名为:LoadMenu、SaveMenu、SaveAsMenu 、AddNewLayerMenu 、AddShapeMenu 、AddLayerMenuØ编辑[Edit]菜单各子菜单分别命名为:LabelEditMenu 、AutomaticMenu、ManualMenuØ编辑[Tool]菜单各子菜单分别命名为:SelectFeaturemenu 、ClearSelectMen2、ArcGIS Engine 许可初始化1)按照实验三的方式引入类库:ESRI System Object Library、ESRI SystemUI Object Library 等,如下图:2)定义初始化对象Option ExplicitPrivate m_pAoInitialize As IAoInitialize3)在 Form_Load 事件中添加许可初始化代码:Set m_pAoInitialize = New AoInitializeIf m_pAoInitialize Is Nothing ThenMsgBox "Unable to initialize. This application cannot run!"Unload LabelEditExit SubEnd If'Determine if the product is availableIf m_pAoInitialize.IsProductCodeAvailable(esriLicenseProductCodeEngine) = esriLicenseAvailable ThenIf m_pAoInitialize.Initialize(esriLicenseProductCodeEngine) <> esriLicenseCheckedOut ThenMsgBox "The initialization failed. This application cannot run!"Unload LabelEditExit SubEnd IfElseMsgBox "The ArcGIS Engine product is unavailable. This application cannot run!"Unload LabelEditExit SubEnd If3、ToolBarControl 设置1)ToolBarControl1的设置使用属性对话框进行设置,单击[Add…]命令按钮进行添加,找到作用于 MapControl 控件的对象,Item 选项为:1-esri3D,如图:2)ToolBarControl2的设置使用属性对话框进行设置,单击[Add…]命令按钮进行添加,找到作用于 PageLayoutControl控件的对象,Item选项为:1-esri3D,如图:3)将 ToolBarControl1 和将 ToolBarControl2叠置在一起4、TabStrip 容器控件的设置在 Form_Load 事件中添加如下代码:TabStrip1.Tabs(1).Caption = "MapControl"TabStrip1.Tabs.Add 2, , "PageLayoutControl"Set TabStrip1.SelectedItem = TabStrip1.Tabs(1)5、TabStrip1_Click 事件设置用鼠标双击 TabStrip1 控件,将会显示 TabStrip1_Click 事件,在该事件中添加如下代 码(本段代码主要用于伙伴控件的设置):Private Sub TabStrip1_Click()'Toggle control visiblity and set the buddyIf TabStrip1.SelectedItem.index = 1 ThenPageLayoutControl1.Visible = FalseMapControl1.Visible = TrueToolbarControl1.Visible = TrueToolbarControl2.Visible = FalseTOCControl1.SetBuddyControl MapControl1ToolbarControl1.SetBuddyControl MapControl1ElsePageLayoutControl1.Visible = TrueMapControl1.Visible = FalseToolbarControl1.Visible = FalseToolbarControl2.Visible = TrueTOCControl1.SetBuddyControl PageLayoutControl1ToolbarControl2.SetBuddyControl PageLayoutControl1End IfEnd Sub6、MapControl1_OnMapReplaced 事件的设置此段代码是用于控制当 MapControl1 的内容改变时 PageLayoutControl1 的内容也随之 改变。
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# 创建shp图层,并将要素写入图层保存
{
public string shpPath;
///
/// 保存
///
///
public void ExportFeatureClassToShp(IFeatureClass apFeatureClass)
pInWorkspaceName = pShpWorkspaceFactory.Create(ExportFilePath, ExportFileShortName, null, 0);
//创建一个要素集合
IFeatureDatasetName pInFeatureDatasetName = null;
MessageBox.Show("导出成功", "系统提示");
}
catch (Exception ex)
{
MessageBox.Show("the following exception occurred:" + ex.ToString());
}
之前看了一位大侠的帖子,写的是跟这个差不多的,所以,我就直接copy下来再vs中做了一个类。大家可以直接拿过去用。
using System;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.Geodatabase;
//设置导出要素类的参数
IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();
IDataset pOutDataset = (IDataset)apFeatureClass;
优-ArcEngine基础开发教程C#二次开发ArcGis
优-ArcEngine基础开发教程C#二次开发ArcGisArcGIS Engine基础开发教程(1)——创建第一个ArcGIS Engine 桌面应用程序1创建第一个ArcGIS Engine桌面应用程序ArcGIS Engine9.3提供了丰富的GIS组件方便用户快速的定制开发一个GIS应用程序,无需写代码即可实现GIS 数据加载,地图操作等功能甚至可以实现高级编辑以及空间分析功能。
接下来使用ArcGIS Engine9.3提供了MapControl Application模块来创建第一个ArcGIS Engine桌面应用程序,并为桌面应用应用程序提供编辑功能。
1.1目标1.创建第一个ArcGIS Engine桌面应用程序2.为应用程序添加编辑功能。
1.2准备工作1 .IDE:Visual Studio 2005/2008 2. ArcGIS Engine Developer kit 9.3 3. 制作ArcGIS实验数据地图文档MXD 1.3设计流程图1.4制作地图文档在ArcMap中加载数据后,点击保存生成一个*.mxd地图文档,如图1所示:1.5创建第一个ArcGIS Engine桌面应用程序在Visual Studio2008中新创建项à选择àArcGISàEngineàMapControl Application,点击确定,如图2所示:可以看到在Visual Studio中看到在新创建的项目中自动加载了ToolBarControl、T ocControl、LicenseControl、MapControl四个ArcGIS Engine控件以及一个.NET ToolStripMenuItem菜单控件,如图3所示:1.6加载MXD地图文档数据单击F5键运行程序,然后单击打开MXD地图文档按钮打开MXD 地图文档,如图4所示:可以看到应用程序把MXD地图文档加载到MapControl地图上,可以使用ToolbarControl提供的常用GIS 功能如:放大,缩小,信息查询等功能。
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”前面打勾)。
ArcGIS Engine+C#_属性数据表的查询显示
ArcGIS Engine+C#_属性数据表的查询显示2012年06月19日星期二 14:33本讲的思路大体如下:首先根据图层属性中的字段创建一个空的DataTable,然后根据数据内容一行行填充DataTable数据,再将DataTable绑定到DataGridView控件,最后调用并显示属性表窗体。
1.创建属性表窗体新建一个Windows窗体,命名为“AttributeTableFrm.cs”。
从工具箱拖一个DataGridView控件到窗体,并将其Dock属性设置为“Fill”。
添加如下引用:using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Geodatabase;2.创建空DataTable首先传入ILayer,再查询到ITable,从ITable中的Fileds中获得每个Field,再根据Filed 设置DataTable的DataColumn,由此创建一个只含图层字段的空DataTable。
实现函数如下:/// <summary>/// 根据图层字段创建一个只含字段的空DataTable/// </summary>/// <param name="pLayer"></param>/// <param name="tableName"></param>/// <returns></returns>private static DataTable CreateDataTableByLayer(ILayer pLayer, string tableName) {//创建一个DataTable表DataTable pDataTable = new DataTable(tableName);//取得ITable接口ITable pTable = pLayer as ITable;IField pField = null;DataColumn pDataColumn;//根据每个字段的属性建立DataColumn对象for (int i = 0; i < pTable.Fields.FieldCount; i++){pField = pTable.Fields.get_Field(i);//新建一个DataColumn并设置其属性pDataColumn = new DataColumn();if ( == pTable.OIDFieldName){pDataColumn.Unique = true;//字段值是否唯一}//字段值是否允许为空pDataColumn.AllowDBNull = pField.IsNullable;//字段别名pDataColumn.Caption = pField.AliasName;//字段数据类型pDataColumn.DataType = System.Type.GetType(ParseFieldType(pField.Type));//字段默认值pDataColumn.DefaultValue = pField.DefaultValue;//当字段为String类型是设置字段长度if (pField.VarType == 8){pDataColumn.MaxLength = pField.Length;}//字段添加到表中pDataTable.Columns.Add(pDataColumn);pField = null;pDataColumn = null;}return pDataTable;}因为GeoDatabase的数据类型与.NET的数据类型不同,故要进行转换。
牟乃夏ArcEngine教程-第5章_地图制图详述
CharacterMarkerSymbol可以将点要素显示为字符,该类实现了 ICharacterMarkerSymbol接口,Font属性设置字体类型, Characterindex属性用于设置或返回要显示的字符。设置显示 的字符由ASCII码决定。
color类及其子类colorramp类及其子类colorramp类的对象可以产生颜色带这个类实现了icolorramp接口它定义了一系列颜色带的属性如size产生多少种颜色colors颜色带ienumcolorcolorramp是抽象类它有4个子类分别是presetcolorramp预设渐变色colorramp类及其子类colorramp类及其子类algorithmiccolorramp用起始颜色终止颜色确定一个颜色multipartcolorramp叠加产生颜色带randomcolorramp随机地创建一系列颜色presetcolorramp预设的颜色模式可存储13种颜色4种颜色带说明algorithmiccolorramp类介绍及代码示例algorithmiccolorramp是通过起止颜色来确定多个在这两个颜色之间的色带algorithmiccolorramp类实现了两个主要的接口
黄色(Yellow)和黑色(Black)四种颜色的油墨,使用分别从 0~100,也就是颜色从最浅到最深的数值。 数值越小颜色越浅,反之颜色则越深,当每种颜色都达 到最高值100时则为深黑色。
2)CMYK颜色模型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<<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,制版)。
选择“地图”选项卡,拖入MapControl控件,设置Dock属性为Fill。
选择“制版”选项卡,拖入PageLayoutControl控件,设置Dock属性为Fill。
最后将LicenseControl控件拖入到窗体的任意地方。
按F5编译运行,可以看到刚才布局好的程序界面了。
3、控件绑定通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。
分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1,如下图所示。
这样,工具条和图层控件就与地图控件关联了。
4、添加工具此时,工具条中还没有任何工具,添加的方法也很简单。
右击ToolbarControl,选择“属性|Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、Redo、Undo即可将相应工具添加到工具条。
常见的工具有:Map Navigation中的导航工具,Map Inquiry中的查询工具,Feature Selection中的选择工具,你可以根据需要酌情添加工具。
5、编译运行按F5即可编译运行程序,至此桌面GIS应用程序框架基本框架已经搭建好了,你可以通过工具条的工具打开地图文档,浏览地图了,效果如开篇所示。
第二讲菜单的添加及其实现在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下。
在“属性”选项卡中,我们当时添加的是 DataGridView 控件,这个控件是用来显示数据表的,而专门用于属性的查询和设置的控件是 PropertyGrid 控件。
因此请你删除“属性”选项卡中的 DataGridView 控件,再把位于“工具箱 | 所有 Windows 窗体|PropertyGrid ”(如果没有,右击选择“选择项”以添加此控件)控件拖到该选项卡。
在这一讲中,主要讲解菜单的添加和实现。
1、添加菜单在设计视图中,单击菜单栏,会出现“请在此处键入”的提示,单击提示就可以键入菜单名称,如“文件”,再单击“文件”,即可输入其下拉子菜单,如下所示:[img]file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/T emporary%20Internet%20Files/Content.IE5/WVUJQZMD/20090512083746513%5B1%5D.j pg[/img]Tips :每创建一个菜单,请在其属性面板中设置 Name 属性,而且不要为中文,因此 Name 值将是此菜单响应函数的函数名的一部分,带中文的函数名,总是不好吧。
本讲中,我们将添加新建( New )、打开( Open )、添加数据( AddData )、保存( Save )、另存为( SaveAs )、退出( Exit )这些菜单,()内为相应的 Name 属性值。
Tips:你可以在属性面板中的 Text 属性中,把菜单名设置为中英文形式,如“打开O pen ”,带下划线的 O 表示此项菜单的快捷键是字母 O ,设置方法是在相应字母前加上“ & ”字符,如“打开&Open ”。
但这种快捷键只在打开此下拉菜单时才有效,即当你单击“文件”菜单弹出下拉菜单时,按下字母 O 就可以定位到“打开”菜单。
还有一种在程序运行时都有效的全局快捷键,可以在属性面板中的“ ShortCutKeys ”中设置。
你还可以在属性面板中的 Image 属性中设置你喜欢的菜单图标。
单击 Image 那一行右边的按钮,弹出如下菜单。
选择“项目资源文件”,再单击导入就可以选择你的图标了。
最终效果如下所示。
注意,在解决方案面板中,选中刚才添加的所有图标,在其属性面板中将生成操作设置为“嵌入的资源”,这一点很重要!2、实现相关菜单首先定义指针(写在 public partial class Form1 : Form 下面即可):private ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = null;private ESRI.ArcGIS.Controls.IPageLayoutControl2 m_pageLayoutControl = null; private IMapDocument pMapDocument;若以上指针无效,请添加以下引用:using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.SystemUI;在设计视图中的属性面板中,选择 Form1 ,即主窗体,单击事件按钮(闪电形状的那个按钮),打到“ Load ”事件并双击,添加此事件。
在 Form1_Load 函数中初始化这些指针:// 取得 MapControl 和 PageLayoutControl 的引用m_mapControl = (IMapControl3)this.axMapControl1.Object;m_pageLayoutControl = (IPageLayoutControl2)this.axPageLayoutControl1.Object;依次双击每个菜单项,添加菜单响应函数。
实现代码如下:/// <summary>/// 新建地图命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void New_Click(object sender, EventArgs e){// 本命令涉及到 MapControl 和 PageLayoutControl 同步问题,将在下一讲中实现}/// <summary>/// 打开地图文档 Mxd 命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Open_Click(object sender, EventArgs e){// 本命令涉及到 MapControl 和 PageLayoutControl 同步问题,将在下一讲中实现}/// <summary>/// 添加数据命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void AddData_Click(object sender, EventArgs e){int currentLayerCount = yerCount;ICommand pCommand = new ControlsAddDataCommandClass();pCommand.OnCreate(this.axMapControl1.Object);pCommand.OnClick();}/// <summary>/// 保存地图文档命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Save_Click(object sender, EventArgs e){// 首先确认当前地图文档是否有效if (null != m_pageLayoutControl.DocumentFilename &&m_mapControl.CheckMxFile(m_pageLayoutControl.DocumentFilename)){// 创建一个新的地图文档实例IMapDocument mapDoc = new MapDocumentClass();// 打开当前地图文档mapDoc.Open(m_pageLayoutControl.DocumentFilename, string.Empty);// 用 PageLayout 中的文档替换当前文档中的 PageLayout 部分mapDoc.ReplaceContents((IMxdContents)m_pageLayoutControl.PageLayout); // 保存地图文档mapDoc.Save(esRelativePaths, false);mapDoc.Close();}}/// <summary>/// 另存为地图文档命令/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void SaveAs_Click(object sender, EventArgs e){// 调用另存为命令ICommand command = new ControlsSaveAsDocCommandClass();command.OnCreate(m_controlsSynchronizer.ActiveControl);command.OnClick();}/// <summary>/// 退出程序/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Exit_Click(object sender, EventArgs e){Application.Exit();}3、编译运行按 F5 编译运行程序。