1ARCGIS ENGINE C# 图层符号选择器的实现

合集下载

arcgisengine 圆弧处理

arcgisengine 圆弧处理

arcgisengine 圆弧处理圆弧处理是在ArcGIS Engine平台中常用的功能之一,它可以用于地理信息系统(GIS)中的空间数据分析和地图制作。

圆弧处理可以在地理数据中绘制和分析圆弧,从而提供更精确和准确的空间分析结果。

本文将介绍ArcGIS Engine中圆弧处理的原理和应用。

在GIS中,地理数据通常以点、线和面的形式进行表示。

然而,在实际应用中,很多地理现象并不是简单的点、线或面,而是具有曲线形状的。

为了更好地模拟和分析这些曲线形状的地理现象,ArcGIS Engine提供了圆弧处理功能。

圆弧处理的原理是通过一系列的圆弧线段来逼近和表示真实的曲线。

在ArcGIS Engine中,可以通过输入一组控制点来创建圆弧,然后可以对这些圆弧进行进一步的编辑和分析。

圆弧处理在GIS中有着广泛的应用。

例如,在地图制作中,通过使用圆弧处理可以更好地表示自然地物的曲线形状,使地图更加真实和美观。

在道路规划中,圆弧处理可以用于绘制和分析道路的曲线形状,从而提供更准确的导航和路径规划结果。

在地质勘探中,圆弧处理可以用于绘制和分析地质构造的曲线形状,从而帮助地质学家更好地理解地质现象。

除了以上的应用,圆弧处理还可以用于空间分析。

例如,在缓冲区分析中,可以使用圆弧处理来模拟缓冲区的曲线形状,从而提供更准确的分析结果。

在空间插值中,圆弧处理可以用于拟合和插值地理现象的曲线特征,从而提高插值结果的准确性。

在ArcGIS Engine中,圆弧处理的实现主要依赖于相关算法和数据结构。

例如,可以使用贝塞尔曲线算法来创建和编辑圆弧,通过控制点和控制线可以调整圆弧的形状和方向。

此外,还可以使用地理坐标系和投影坐标系来处理和分析圆弧,以满足不同应用场景的需求。

圆弧处理是ArcGIS Engine中重要的功能之一,它可以用于地理数据的绘制、分析和处理。

通过圆弧处理,可以更好地模拟和表示地理现象的曲线形状,从而提供更准确和精确的空间分析结果。

ArcGIS Engine中自定义工具

ArcGIS Engine中自定义工具

ArcGIS Engine中创建自定义工具ArcEngine除了其内置120多种常用工具外,我们还可以根据我们的需要定义自己的工具,大概过程是创建一个类,使其继承BaseCommand或BaseTool,重写其构造函数和鼠标时间等。

最好生成可以复用的dll。

这种自定义工具的最大的优点是极大的提高了代码的可重用性,如上生成的dll动态链接库可以在任意程序中引用以实现该工具的功能。

此外工具的外观和鼠标样式也是可以修改的。

以下为具体过程。

和例子有点不一样,附带原理注释。

1. 从新建项目对话框创建一个新的Visual C# “类库”项目。

2. 将项目命名为“Commands”,并选择保存位置存贮之。

3. 单击项目菜单并选择“添加引用(R)…”。

4. 在添加引用对话框中,复选“ESRI.ArcGIS.Carto”,“ESRI.ArcGIS.Display”,“ESRI.ArcGIS.Geometry”,“ESRI.ArcGIS.System”,“ESRI.ArcGIS.SystemUI”,“ESRI.ArcGIS..Utility”和“ESRI.ArcGIS.ControlCommands”。

5. 在项目中增加一个类,名字叫AddDateTool。

6. 点击项目菜单并选择添加现有项,浏览样例源码目录并找到date.bmp文件将其加入到你的项目。

7. 在解决方案资源管理器中点击date.bmp在属性窗口显示其属性。

改变生成操作属性为嵌入的资源。

这张位图将被用来作为命令按钮的外观。

8. 改变AddDateTool的命名空间的名称为CSharpDotNETCommands。

namespace CSharpDotNETCommands{……注:要在Visual Basi .NET中改变命名空间的名称,则在解决方案资源管理器的项目上点击右键并选择属性,在项目属性页中选择常规并改变根命名空间后,按确定。

9. 在AddDateTool类代码窗口的顶部增加以下引用。

arcgisengine二次开发实例

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要素范围

arcengine要素范围

arcengine要素范围ArcGIS Engine 是由 Esri 公司开发的一种 GIS 开发平台,它提供了一套强大的工具和功能,用于构建和定制地理信息系统 (GIS) 应用程序。

ArcEngine 主要针对开发人员提供各种 GIS 功能来构建自定义 GIS应用程序,包括地理数据处理、地理分析、地图显示等。

ArcGIS Engine 提供了丰富的要素操作范围,用于管理、分析和描述地理信息。

以下是 ArcGIS Engine 的要素范围的主要特点和用途:1. 空间数据模型:ArcGIS Engine 提供了多种不同的要素类型,用于存储和管理空间数据。

其空间数据模型包括点、线、面、多点、多线、多边形等要素类型,可以满足不同类型的空间数据存储和查询需求。

3. 空间查询:使用 ArcGIS Engine,可以进行空间查询来查找满足特定空间条件的要素。

开发人员可以根据地理位置信息进行查询,例如查找一些区域内的所有建筑物或道路。

4. 地理分析:ArcGIS Engine 提供了一套强大的地理分析工具,可以对空间数据进行统计、分析和建模。

开发人员可以使用 ArcObjectsAPI 进行地理分析,以实现自定义的 GIS 分析功能。

5. 地图显示和渲染:ArcGIS Engine 支持地图的创建、显示和渲染。

开发人员可以根据需要配置地图的显示样式和符号,以满足不同应用程序的需求。

此外,还可以实现地图的交互功能,例如缩放、平移和选择等。

6. 数据输出和导出:ArcGIS Engine 允许将地理数据输出到不同的格式,包括图片、PDF、Excel等。

开发人员可以使用 ArcObjects API进行数据导出,以便将地理信息以各种形式分享给用户。

7. 数据库连接和管理:ArcGIS Engine 支持与各种类型的数据库进行连接和管理,例如 ESRI Geodatabase、Oracle、SQL Server等。

这使得开发人员可以使用实际的地理数据来进行应用程序的开发和测试。

arcgisengine 圆弧处理

arcgisengine 圆弧处理

arcgisengine 圆弧处理ArcGIS Engine是一款功能强大的地理信息系统(GIS)开发平台,它提供了丰富的地理空间分析和处理工具,其中包括圆弧处理功能。

圆弧处理是GIS中常用的一种空间分析方法,用于处理和分析曲线形状的空间数据。

本文将详细介绍ArcGIS Engine中的圆弧处理功能及其应用。

我们需要了解什么是圆弧。

在地理空间分析中,圆弧是由一系列点组成的曲线,它可以用来表示地球上的道路、河流、边界等。

而圆弧处理则是对这些曲线进行各种操作和分析的过程。

ArcGIS Engine提供了丰富的圆弧处理功能,包括圆弧生成、圆弧拟合、圆弧插值等。

其中最常用的是圆弧生成功能,它可以根据给定的点集生成圆弧。

例如,我们可以通过给定的三个点来生成一个圆弧,这个圆弧可以用来表示一条道路或河流的曲线形状。

除了圆弧生成,ArcGIS Engine还提供了圆弧拟合功能。

当我们有一条曲线,但不确定它是由多个圆弧组成的时候,可以使用圆弧拟合功能来估计曲线的圆弧参数。

这样可以更好地描述曲线的形状,方便后续的分析和处理。

ArcGIS Engine还提供了圆弧插值功能。

在某些情况下,我们可能需要在已有的圆弧之间插入新的点,使得整条曲线更加平滑。

圆弧插值功能可以根据已有的圆弧和插入点的位置,生成一条新的圆弧,从而实现曲线的平滑化。

除了这些基本的圆弧处理功能,ArcGIS Engine还提供了许多其他的圆弧分析工具,如圆弧长度计算、圆弧与直线的交点计算等。

这些工具可以帮助我们更好地理解和分析曲线形状的空间数据。

在实际应用中,圆弧处理在许多领域都有广泛的应用。

例如,在交通规划中,我们可以使用圆弧处理来生成道路的曲线形状,从而更好地模拟车辆行驶的轨迹。

在地图绘制中,我们可以使用圆弧插值功能来平滑地图上的道路、河流等曲线要素,使得地图更加美观。

在地理空间分析中,我们可以使用圆弧拟合功能来估计曲线的圆弧参数,从而更好地理解和分析曲线的形状。

ArcGIS Engine中IColor、IRGBColor和Win32 Color和.Net中Color相互转换

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。

ArcGISEngine+C实例开发教程

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。

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简介

ArcGIS Engine简介1.3 ArcGIS Engine简介ArcGIS是美国ESRI(Environmental Systems Research Institute, Inc. 美国环境系统研究所公司)推出的一条为不同需求层次用户提供的全面的、可伸缩的GIS产品线和解决方案。

ESRI是GIS领域的拓荒者和领导者,而ArcGIS也代表了当前GIS行业最高的技术水平。

1.3.1 ArcGIS产品框架ArcGIS是一个可伸缩的GIS平台,可以运行在桌面端、服务器端和移动设备上。

它包含了一套建设完整GIS系统的应用软件,这些软件可以互相独立或集成配合使用,为不同需求的用户提供完善的解决之道。

ArcGIS的主要产品包括4种:n ArcGIS Desktop——运行在桌面端的专业GIS软件套件,这套软件包括ArcReader、ArcView、ArcEditor和ArcInfo四个级别的产品,每个产品都拥有逐步增强的功能和ArcGIS扩展模块。

n ArcGIS Engine——为开发嵌入式GIS和独立运行的GIS桌面端应用程序而推出的二次开发组件库,它是GIS开发者产品的主要部分。

n 服务器端GIS——ArcIMS、ArcGIS Server和ArcGIS Image Server,它们是运行在服务器端的数据管理和发布软件,也是ESRI产品发展的趋势。

n 移动GIS——ArcPad及ArcGIS Mobile,它们是运行在PDA等移动设备上的GIS软件。

ArcGIS是基于一套共享的GIS组件开发实现的,这套组件被命名为ArcObjects,它包含了大量可编程组件,实现了ArcGIS的全部功能。

因此,ArcObjects 可以被认为是ArcGIS产品的核心,熟悉ArcObjects的过程同时也是熟悉ArcGIS Engine的过程。

关于ArcObjects的基础知识,读者可以翻阅相关书籍。

ArcGIS可以访问的数据包括各种类型的文件型数据、多用户DBMS数据、Web Service和多种应用程序数据通道。

ArcEngine简介(自己写)

ArcEngine简介(自己写)

ArcEngine 简介1、ArcGIS的体系结构1)ArcGIS Desktop(桌面GIS)2)ArcGIS Engine(嵌入式GIS)3)Mobile GIS Application(移动GIS)4)Application servers(GIS服务)2、ArcEngine1)定义ArcEngine是开发人员用于建立自定义应用程序的嵌入式GIS组件的一个完整类库。

2)组成ArcEngine由一个软件开发工具包(SDK)和一个可以重新分发的、为所有ArcGIS应用程序提供平台的运行时(Runtime)组成。

3、AE与AO1)相似点(1)ArcEngine包括核心AO的功能,是对AO的大部分接口、类等进行封装所组成的嵌入式插件;(2)AE中的组件接口、方法、属性与AO是相同的。

2)二者的区别(1)开发环境AO必须依赖于ArcGIS Desktop平台;AE是独立嵌入式组件,不依赖于Desktop平台,直接安装Runtime和SDK后,即可进行在不同开发环境中的开发。

(2)功能AE是AO的子集,仅包含一部分AO的功能。

AE具有灵活、易用、可移植性强的特点。

4、ArcEngine的功能组成1)基本服务由AE中最核心的AO组件构成,几乎所有的应用程序都需要调用,如要素几何体(Feature Geometry)和显示(Display);2)数据存取包含访问矢量或栅格数据以及地理数据库(Geodatabase)的所有的接口和类组件;3)地图表达包含在应用程序中用于数据显示、数据符号化、要素标注和专题图制作的组件。

4)开发组件用于快速开发应用程序的用户接口控件,如MapControl、GlobeControl 等;5)运行时选项包含许多高级功能,如空间分析、三维分析、网络分析和数据互操作等。

注:ArcGIS Engine标准版的License中并不包含组件许可,他们只是作为一个扩展而存在,需要特定的License才能运行。

ArcEngine复习指导

ArcEngine复习指导

GIS开发与应用GIS开发与应用——ArcEngine方法独立开发模式宿主型开发模式(组件式GIS 基本思想)组件式GIS 开发模式第1章GIS 二次开发概述1.1 GIS 开发模式GIS开发与应用——ArcEngine方法1.2 组件式GIS组件式 GIS (ComGIS) :采用了面向对象技术和组件式软件的GIS 系统(包括基础平台和应用系统)。

COM是组件式对象模型是组件式对象模型(Component Object Model) 的英文缩写。

GIS开发模式包括:开发模式包括:独立开发模式、宿主型开发模式、组件式GIS 开发模式。

组件式GIS 开发平台的结构有三种:基础组件、高级通用组件、行业性组件。

GIS开发与应用——ArcEngine方法基础组件——面向空间数据管理,提供基本的交互过程。

面向空间数据管理,提供基本的交互过程。

高级通用组件——面向通用功能。

行业性组件——抽象出行业应用的特定算法,固化到组件中,进一步加速开发过程。

GIS开发与应用——ArcEngine方法第二章 ArcEngine 基础2.1 ArcObjects 与ArcEngine 区别与联系2.2 ArcEngine 功能2.4 组件对象模型COM2.5 理解对象模型图OMD2.6 ArcEngine 类库结构GIS开发与应用——ArcEngine方法ArcEngine 从功能层次上分为五部分:1.基本服务—由GIS 核心ArcObjects 构成,几乎所有GIS应用程序都需要,如要素几何体(Feature geometry)和显示(Display)。

2.数据存取—ArcGIS Engine 可以对许多栅格和矢量格式进行存取,包括强大的地理数据库(Geodatabase)。

3.地图表达—创建和显示带有符号和标注的地图。

4.开发组件—用于快速开发应用程序的界面控件。

5.运行时选项—ArcGIS Engine 运行时可以与标准功能或其它高级功能一起部署GIS开发与应用——ArcEngine方法6-72.4.1 基本概念对象和类( Objects and Class )对象:系统中用来描述客观事物的一个实体,构成系统的一个基本单位。

ArcEngineC选择对象取消选择设置可选图层

ArcEngineC选择对象取消选择设置可选图层

ArcEngine C# 选择对象、取消选择、设置可选图层//全局变量public enum enumToolFlag{Select}IEnumFeature globalEnumFeature; // 选中要素集全局变量private void btnSelect_Click(object sender, EventArgs e) //选择对象axMapControlMain.MousePointer= esriControlsMousePointer.esriPointerDefault;flag = enumToolFlag.Select;}在axMapControl1_OnMouseDown中写如下代码:Switch (flag){case enumToolFlag.Select: //选择元素{//选择要素IGeometry pGeometry = axMapControlMain.TrackRectangle(); IEnvelope pEnv;IActiveView pActiveView = axMapControlMain.ActiveView;//IMap pMap = axMapControlMain.Map;pEnv = pGeometry as IEnvelope;if (pEnv.IsEmpty == true){ESRI.ArcGIS.Display.tagRECT r;r.bottom = e.y + 5;r.top = e.y - 5;r.left = e.x - 5;r.right = e.x + 5;pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4);pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference;pGeometry = pEnv as IGeometry;}axMapControlMain.Map.ClearSelection();axMapControlMain.Refresh();axMapControlMain.Map.SelectByShape(pGeometry, null, false);axMapControlMain.Refresh();//获取选中要素IMap pMap = axMapControlMain.Map;globalEnumFeature = axMapControlMain.Map.FeatureSelection as IEnumFeature;globalEnumFeature.Reset();}break;}取消选择:private void btnClearSelect_Click(object sender, EventArgs e) //取消选择{axMapControlMain.MousePointer=esriControlsMousePointer.esriPointerDefault;axMapControlMain.Map.ClearSelection();axMapControlMain.Refresh();}设置可选图层://全局变量中添加string selectedlayerName; // 选择图层名private void btnSetSelectLayer_Click(object sender, EventArgs e){try{//初始设置所有图层不可选ILayer iLayer;IFeatureLayer iFeatureLayer;for (int i = 0; i &lt; yerCount; i++){iLayer = Tool.GetLayerByName(axMapControlMain.get_Layer(i).Name, axMapControlMain);iFeatureLayer = (IFeatureLayer)iLayer;iFeatureLayer.Selectable = false;}frmSetSelectLayer selectLayerFrm;selectLayerFrm = new frmSetSelectLayer(axMapControlMain); selectLayerFrm.ShowDialog();selectedlayerName = selectLayerFrm.selectedLayerName;if (selectedlayerName == null) return;if (selectedlayerName == &quot;所有图层&quot;){for (int i = 0; i &lt; yerCount; i++){iLayer = Tool.GetLayerByName(axMapControlMain.get_Layer(i).Name, axMapControlMain);iFeatureLayer = (IFeatureLayer)iLayer;iFeatureLayer.Selectable = true;}}elseiLayer = Tool.GetLayerByName(selectedlayerName, axMapControlMain); iFeatureLayer = (IFeatureLayer)iLayer;iFeatureLayer.Selectable = true;}}catch (Exception ex){MessageBoxEx.Show(ex.ToString());}}GetLayerByName函数:public static ILayer GetLayerByName(string strLyrName, AxMapControl axMapControlMain){ILayer pLayer = null;bool bFindLayer = false;for (int i = 0; i &lt; yerCount; i++){pLayer = axMapControlMain.Map.get_Layer(i);if (pLayer is IGroupLayer || pLayer is ICompositeLayer){ICompositeLayer pComLyr = pLayer as ICompositeLayer;for (int j = 0; j &lt; pComLyr.Count; j++) {pLayer = pComLyr.get_Layer(j);if (.Equals(strLyrName)) {bFindLayer = true;break;}else{pLayer = null;}}}else{if ( == strLyrName) {bFindLayer = true;}else{pLayer = null; }}if (bFindLayer) {break;}}return pLayer; }。

ArcGIS Engine题库

ArcGIS Engine题库

一、选择题1.ArcMap 中,当一个要素被选中的时候,选中标记出现的目的是(D)A 当该要素被旋转的时候,会围绕这个选择点来旋转B 它仅仅是一种符号指示,通过有颜色的边框标示要素被选中了C 它可以用来捕捉线和顶点,将选择的要素连接到其他的要素上D A 和C2. 哪一种ArcGIS 的许可文件,可以让你将 GIS 数据导成CAD 的格式(A)A ArcInfoB ArcEditorC ArcViewD A 和B3. 在一个ArcMap 的 MXD 文件中,通过下列哪一个选项的属性对话框,可以更改图层所显示的投影信息:(A)A data frameB data layerC feature datasetD feature class4.在一个要素数据集中,所有的要素类必须有相同的:(B)A 数据源B 空间参考C 字段类型D 元数据5.在ArcMap 中只能通过标注管理器进行标注的操作。

(B)A 正确B 错误6.在ArcMap中,sketch可以被定义为:(A)A 一个临时的图形对话框,显示正在被编辑的要素的几何属性B 使用Draw 工具栏中的工具创建的任意图形C 一个正在被编辑的要素D 在要素类之间复制、粘贴的要素7.下面哪个不是 Editor 工具栏中的编辑任务选项(A)A Rotate FeatureB Mirror FeatureC Create2-Point Line FeaturesD Reshape Feature 8.选择对要素类最佳的描述:(B)A 拥有相同空间参考的要素类型的组合B 拥有相同几何类型和属性字段的要素C 拥有相同属性字段的要素类型的组合D 拥有相同的几何类型和不同的属性字段的要素9.关于向ArcMap 添加数据,下面陈述中哪项是正确的( D)A drag and drop ”方法仅对空间数据集有效B 添加数据对话框中,一次只能添加一个单独的要素类C 从一个coverage 中不可能只添加一个要素类D 添加一个要素数据集就是添加该数据集所包含的所有要素类10.已知水表所在的位置到两栋多边形建筑拐角的距离,请问添加一个水表使用哪一种 Sketch Construction 工具最好(C)A Intersection toolB Midpoint toolC Distance-Distance toolD Direction-Distance tool 11.下面关于 ArcGIS 的描述哪项是错误的(B)A Geodatabase 中的关系类能够在ArcCatalog 的目录树中看到B ArcCatalog 是编辑属性数据和创建地图的主要应用程序C ArcGIS 的一个personal geodatabase 通常可以使用微软的Access 作为它的 RDBMS,而企业级geodatabase 可以使用诸如Oracle 或SQL Server 这样的 RDBMSD Coverage 格式的数据在ArcGIS 中是不可编辑的12.地理数据的基本组成是(C)A属性、数据类型和几何特征B属性、行为、和数据类型C 几何特征、属性、和行为D 几何特征、数据类型、和行为13.关于 ModelBuilder 的描述哪项是错误的(B)A ModelBuilder 可以通过toolbox 打开B ModelBuilder 可以通过ArcObjects 进行定制C 单个模型所包含的模型元素数量没有限制D 可以在一个模型中创建模型14.下面对cardinality的最佳描述是(B)A 在geodatabase 中空间数据和属性数据之间的联合B 描述相互关联的两种类型的数量或对象之间的关系C 在一个连接中,主键字段和名称字段之间的联系D 在geodatabase 中,用来描述不同主键值数量的表的属性15.在ArcGIS 中元数据以哪种格式存储(C)A HTMLB XSLC XMLD FGDC16.域可以为存储在 geodatabase 中的非地理表而创建(A)。

优-ArcEngine基础开发教程C#二次开发ArcGis

优-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二次开发——基础篇

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”前面打勾)。

Engine 开发手册(1)

Engine 开发手册(1)
该库还包括大量可以有 ToolbarControl 调用的内置 commands、tools、Menus,它们可以极大地简化二次
开发工作。
◆ Extensions
在图中我们可看出,ArcEngine 的开发体系是一条纵线,功能丰富,层次清晰。最上层的 Extensions 包含
了许多高级开发功能,如 GeoDatabase Update、空间分析、三维分析、网络分析、Schematics 逻辑示意图
ometry 和 Display 等。
◆ Data Acce ss
包含了访问矢量或栅格数据的 GeoDatabase 所有的接口和类组件。
◆ Map Pre sentation
包含了 GIS 应用程序用于数据显示、数据符号化、要素标注和专题图制作等需要的接口和类
组件。
问中。ArcGIS 桌面和 ArcGIS Engine 可以运行在便携式电脑或平板电脑上,用户可以在野外进行数据采集、
分析和乃至制定决策。
ArcGIS Engine 介 绍
ArcGIS Engine 是一组完备的并且打包的嵌入式 GIS 组件库和工具库,开发人员可用来创建新的或扩展已
ArcGIS Engine 开发工具包是一个基于组件的软件开发产品,可用于构建自定义 GIS 和制图应用软件。它
并不是一个终端用户产品,而是软件开发人员的工具包,支持四种开发环境(C++, COM, .NET,以及
Java),适于为 Windows、 UNIX 或 Linux 用户构建基础制图和综合动态 GIS 应用软件。
一ArcGIS介绍 1
1、1ArcGIS Engine 中的类库 5
1、2 和ArcGIS Engine开发相关的C#知识

ArcEngine的安装

ArcEngine的安装

点【Browser..】选择license文件进行注册。
点击【完成】按钮,完成ArcEngine的安装。
第二步: 第二步 选择【I accept the license agreement】按
钮再点击【Next】进入下一步:
第三步:选择【typical】安装,按【Next】继续: 第三步
第四步:点击【Next】完成安装。 第四步
第五步:对安装软件进行注册。 第五步 • 点击【Register Now】,选择【Registration Options.】 中的【I have received an authorization from ESRI and am now ready to finish the registration process.】,点【下 一步】继续:
• 5. 点击“编辑” 按钮打开boot.ini 文件,将其中的 “/NoExecute=OptIn”改为“/NoExecute=AlwaysOff”。
Байду номын сангаас
• 6. 保存文件,重新启动计算机。
开始ArcEngine的安装 的安装 开始 第一步:点击ArcEngine的安装包,出现如下界面: 第一步 点击【Next】进入下一步:
arcenginearcengine是arcgis外部编程的接口为gis和非gis用户提供专门的空间解决方案
ArcEngine的安装
ArcEngine是ArcGis外部编程的接口,为 GIS和非GIS用户提供专门的空间解决方案 。 ArcGIS Engine 提供了COM、.NET和C++ 的应用程序编程接口 。
首先要关掉系统的数据保护,步骤如下: 首先要关掉系统的数据保护,步骤如下: • • • 1. 鼠标邮件点击“我的电脑”,选择“属性”菜单 2. 点击“高级”页。 3. 选择“启动与恢复”下的“设置”按钮。

C#+ARCGIS ENGINE开发查找地图元素并高亮显示代码

C#+ARCGIS ENGINE开发查找地图元素并高亮显示代码

C#+ARCGIS ENGINE开发查找地图元素并高亮显示代码1(2008-12-13 13:02:12)转载分类:程序源代码标签:杂谈这是我帮同学做的一个简单的上机作业,本来是想做查找最短路径和查找地图元素(高亮显示)两个功能的,只是查找最短路径的代码没有填进去,如果哪位朋友需要的话,可以发邮件给我啊(wang_cuntao@)~~下面是查找地图元素(高亮显示)的主要代码://frmMain.cs// Copyright 2006 ESRI//// All rights reserved under the copyright laws of the United States// and applicable international laws, treaties, and conventions.//// You may freely redistribute and use this sample code, with or// without modification, provided you include the original copyright// notice and use restrictions.//// See use restrictions at /arcgis/developerkit/userestrictions.using System;using System.Drawing;using System.Collections;using ponentModel;using System.Windows.Forms;using System.Data;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.SystemUI;using workAnalyst;// This is the main form of the application.namespace NAEngine{/// <summary>/// Summary description for Form1./// </summary>public class frmMain : System.Windows.Forms.Form{/// <summary>/// Required designer variable./// </summary>public IMapControl2 pMapControl;private ponentModel.Container components = null;private System.Windows.Forms.Splitter splitter1;private boBox cmbLayers;// Context menu objects for NAWindow's context menuprivate System.Windows.Forms.ContextMenu contextMenu1;private System.Windows.Forms.MenuItem miLoadLocations;private System.Windows.Forms.MenuItem miClearLocations;// ArcGIS Controls on the formprivate ESRI.ArcGIS.Controls.AxMapControl axMapControl1;private ESRI.ArcGIS.Controls.AxLicenseControl axLicenseControl1;private ESRI.ArcGIS.Controls.AxToolbarControl axToolbarControl1;private ESRI.ArcGIS.Controls.AxTOCControl axTOCControl1;// Listen for context menu on NAWindowprivate IEngineNAWindowEventsEx_OnContextMenuEventHandler m_onContextMenu; // Reference to Network Analyst Environmentprivate IEngineNetworkAnalystEnvironment m_naEnv;// Reference to NAWindow. Need to hold on to reference for events to work.private IEngineNAWindow m_naWindow;private MenuStrip menuStrip1;private ToolStripMenuItem oPENToolStripMenuItem;private Label label1;private Label label2;// Menu for our commands on the TOC context menuprivate IToolbarMenu m_menuLayer;public frmMain(){//// Required for Windows Form Designer support//InitializeComponent();}/// <summary>/// Clean up any resources being used./// </summary>protected override void Dispose(bool disposing){Support.AOUninitialize.Shutdown();if (disposing){if (components != null){components.Dispose();}}base.Dispose(disposing);}#region Windows Form Designer generated code/// <summary>/// Required method for Designer support - do not modify/// the contents of this method with the code editor./// </summary>private void InitializeComponent(){ponentResourceManager resources = new ponentResourceManager(typeof(frmMain));this.axMapControl1 = new ESRI.ArcGIS.Controls.AxMapControl();this.axLicenseControl1 = new ESRI.ArcGIS.Controls.AxLicenseControl();this.axToolbarControl1 = new ESRI.ArcGIS.Controls.AxToolbarControl();this.splitter1 = new System.Windows.Forms.Splitter();this.axTOCControl1 = new ESRI.ArcGIS.Controls.AxTOCControl();this.contextMenu1 = new System.Windows.Forms.ContextMenu();oadLocations = new System.Windows.Forms.MenuItem();this.miClearLocations = new System.Windows.Forms.MenuItem();this.menuStrip1 = new System.Windows.Forms.MenuStrip();this.oPENToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();bel1 = new bel();bel2 = new bel();((ponentModel.ISupportInitialize)(this.axMapControl1)).BeginInit();((ponentModel.ISupportInitialize)(this.axLicenseControl1)).BeginInit();((ponentModel.ISupportInitialize)(this.axToolbarControl1)).BeginInit();((ponentModel.ISupportInitialize)(this.axTOCControl1)).BeginInit();this.menuStrip1.SuspendLayout();this.SuspendLayout();//// axMapControl1//this.axMapControl1.Dock = System.Windows.Forms.DockStyle.Fill;this.axMapControl1.Location = new System.Drawing.Point(246, 52); = "axMapControl1";this.axMapControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axMapControl1.OcxState")));this.axMapControl1.Size = new System.Drawing.Size(466, 448);this.axMapControl1.TabIndex = 2;// axLicenseControl1//this.axLicenseControl1.Enabled = true;this.axLicenseControl1.Location = new System.Drawing.Point(797, 0); = "axLicenseControl1";this.axLicenseControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axLicenseControl1.OcxState")));this.axLicenseControl1.Size = new System.Drawing.Size(32, 32);this.axLicenseControl1.TabIndex = 1;//// axToolbarControl1//this.axToolbarControl1.Dock = System.Windows.Forms.DockStyle.Top;this.axToolbarControl1.Location = new System.Drawing.Point(0, 24); = "axToolbarControl1";this.axToolbarControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axToolbarControl1.OcxState")));this.axToolbarControl1.Size = new System.Drawing.Size(712, 28);this.axToolbarControl1.TabIndex = 0;this.axToolbarControl1.OnMouseDown += new ESRI.ArcGIS.Controls.IToolbarControlEvents_Ax_OnMouseDownEventHandler(this.axToolbar Control1_OnMouseDown);//// splitter1//this.splitter1.Location = new System.Drawing.Point(243, 52); = "splitter1";this.splitter1.Size = new System.Drawing.Size(3, 448);this.splitter1.TabIndex = 4;this.splitter1.TabStop = false;//// axTOCControl1//this.axTOCControl1.Dock = System.Windows.Forms.DockStyle.Left;this.axTOCControl1.Location = new System.Drawing.Point(0, 52); = "axTOCControl1";this.axTOCControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axTOCControl1.OcxState")));this.axTOCControl1.Size = new System.Drawing.Size(243, 448);this.axTOCControl1.TabIndex = 1;this.axTOCControl1.OnMouseDown += new ESRI.ArcGIS.Controls.ITOCControlEvents_Ax_OnMouseDownEventHandler(this.axTOCContro l1_OnMouseDown);// contextMenu1//this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {oadLocations,this.miClearLocations});//// miLoadLocations//oadLocations.Index = 0;oadLocations.Text = "Load Locations...";oadLocations.Click += new System.EventHandler(oadLocations_Click);//// miClearLocations//this.miClearLocations.Index = 1;this.miClearLocations.Text = "Clear Locations";this.miClearLocations.Click += new System.EventHandler(this.miClearLocations_Click);//// menuStrip1//this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {this.oPENToolStripMenuItem});this.menuStrip1.Location = new System.Drawing.Point(0, 0); = "menuStrip1";this.menuStrip1.Size = new System.Drawing.Size(712, 24);this.menuStrip1.TabIndex = 20;this.menuStrip1.Text = "menuStrip1";this.menuStrip1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.menuStrip1_ItemClicked);//// oPENToolStripMenuItem// = "oPENToolStripMenuItem";this.oPENToolStripMenuItem.RightToLeft = System.Windows.Forms.RightToLeft.Yes;this.oPENToolStripMenuItem.Size = new System.Drawing.Size(65, 20);this.oPENToolStripMenuItem.Tag = "";this.oPENToolStripMenuItem.Text = "查找地点";this.oPENToolStripMenuItem.Click += new System.EventHandler(this.oPENToolStripMenuItem_Click);//// label1//bel1.AutoSize = true;bel1.Location = new System.Drawing.Point(134, 7); = "label1";bel1.Size = new System.Drawing.Size(0, 12);bel1.TabIndex = 6;bel1.Click += new System.EventHandler(bel1_Click);//// label2//bel2.AutoSize = true;bel2.Location = new System.Drawing.Point(68, 6); = "label2";bel2.Size = new System.Drawing.Size(293, 12);bel2.TabIndex = 21;bel2.Text = "(点击查找地图功能之前,请确定已经打开一张地图~)";//// frmMain//this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);this.ClientSize = new System.Drawing.Size(712, 500);this.Controls.Add(bel2);this.Controls.Add(bel1);this.Controls.Add(this.axLicenseControl1);this.Controls.Add(this.axMapControl1);this.Controls.Add(this.splitter1);this.Controls.Add(this.axTOCControl1);this.Controls.Add(this.axToolbarControl1);this.Controls.Add(this.menuStrip1);this.Location = new System.Drawing.Point(10, 0);this.MainMenuStrip = this.menuStrip1; = "frmMain";this.Text = "GIS(作者:涛涛)";this.Load += new System.EventHandler(this.frmMain_Load);((ponentModel.ISupportInitialize)(this.axMapControl1)).EndInit();((ponentModel.ISupportInitialize)(this.axLicenseControl1)).EndInit();((ponentModel.ISupportInitialize)(this.axToolbarControl1)).EndInit();((ponentModel.ISupportInitialize)(this.axTOCControl1)).EndInit();this.menuStrip1.ResumeLayout(false);this.menuStrip1.PerformLayout();this.ResumeLayout(false);this.PerformLayout();}#endregion/// <summary>/// The main entry point for the application./// </summary>[STA Thread]static void Main(){Application.Run(new frmMain());}private void frmMain_Load(object sender, System.EventArgs e){pMapControl = (IMapControl2)axMapControl1.Object;// Add commands to the NALayer context menum_menuLayer = new ToolbarMenuClass();m_menuLayer.AddItem(new LoadLocations(), -1, 0, false, esriCommandStyles.esriCommandStyleTextOnly);m_menuLayer.AddItem(new RemoveLayer(), -1, 1, false, esriCommandStyles.esriCommandStyleTextOnly);m_menuLayer.AddItem(new ClearAnalysisLayer(), -1, 2, true, esriCommandStyles.esriCommandStyleTextOnly);m_menuLayer.AddItem(new NALayerProperties(), -1, 3, true, esriCommandStyles.esriCommandStyleTextOnly);m_menuLayer.SetHook(axMapControl1);// Add command for Network Analyst env properties to "Network Analyst" dropdown menuIToolbarItem item = axToolbarControl1.GetItem(2);item.Menu.AddItem(new NAProperties(), -1, 1, true, esriCommandStyles.esriCommandStyleTextOnly);// Initialize naEnv variablesm_naEnv = new EngineNetworkAnalystEnvironmentClass();m_naEnv.ZoomToResultAfterSolve = false;m_naEnv.ShowAnalysisMessagesAfterSolve = (int)(esriEngineNAMessageType.esriEngineNAMessageTypeInformative | esriEngineNAMessageType.esriEngineNAMessageTypeWarning);// Explicitly setup buddy control and initialize NA extension// so we can get to NAWindow to listen to window events// This is necessary the various controls are not yet setup and they// need to be in order to get the NAWindow's events.axToolbarControl1.SetBuddyControl(axMapControl1);IExtension ext = m_naEnv as IExtension;object obj = axToolbarControl1.Object;ext.Startup(ref obj);m_naWindow = m_naEnv.NAWindow;m_onContextMenu = new IEngineNAWindowEventsEx_OnContextMenuEventHandler(OnContextMenu);((IEngineNAWindowEventsEx_Event)m_naWindow).OnContextMenu += m_onContextMenu; }// Show the TOC context menu when an NALayer is right-clicked onprivate void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e){if (e.button != 2) return;esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;IBasicMap map = null;ILayer layer = null;object other = null;object index = null;//Determine what kind of item has been clicked onaxTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);// Only implemented a context menu for NALayers. Exit if the layer is anything else.if ((layer as INALayer) == null)return;axTOCControl1.SelectItem(layer);// Set the layer into the CustomProperty.// This is used by the other commands to know what layer was right-clicked on// in the table of contents.axMapControl1.CustomProperty = layer;//Popup the correct context menu and update the TOC when it's done.if (item == esriTOCControlItem.esriTOCControlItemLayer){m_menuLayer.PopupMenu(e.x,e.y,axTOCControl1.hWnd);ITOCControl toc = axTOCControl1.Object as ITOCControl;toc.Update();}}public bool OnContextMenu(int x, int y){System.Drawing.Point pt = this.PointToClient(System.Windows.Forms.Cursor.Position);contextMenu1.Show(this, pt);return true;}private void miLoadLocations_Click(object sender, System.EventArgs e){IMapControl3 mapControl = (IMapControl3)axMapControl1.Object;// Show the Property Page form for Network AnalystfrmLoadLocations loadLocations = new frmLoadLocations();if (loadLocations.ShowModal(mapControl, m_naEnv)){// If loaded locations, refresh the NAWindow and the ScreenINALayer naLayer = m_naWindow.ActiveAnalysis;mapControl.Refresh(esriViewDrawPhase.esriViewGeography, naLayer, mapControl.Extent);m_naWindow.UpdateContent(m_naWindow.ActiveCategory);}}private void miClearLocations_Click(object sender, System.EventArgs e){IMapControl3 mapControl = (IMapControl3)axMapControl1.Object;IEngineNetworkAnalystHelper naHelper = m_naEnv as IEngineNetworkAnalystHelper;IEngineNAWindow naWindow = m_naWindow;INALayer naLayer = naWindow.ActiveAnalysis;naHelper.DeleteAllNetworkLocations();mapControl.Refresh(esriViewDrawPhase.esriViewGeography, naLayer, mapControl.Extent);}private void axToolbarControl1_OnMouseDown(object sender, IToolbarControlEvents_OnMouseDownEvent e){}//public void gaoliang_xianshi(string didian)// {// //frmNAProperties tem=new frmNAProperties();// //tem.t// //textBox1.Text = "fa";// this.Text = didian;// //ifeaturecursor pcur = ifeatureclass.search(iqueryfilter pfilter);// //pfilter.whereclause = didian;//输入查询条件,也就是你寸地址的字段名=didian // //ifeature pfeat = pcur.nextfeature();// //axmapcontrol1.flashshape(pfeat.shape);// }private void sss_TextChanged(object sender, EventArgs e){}private void oPENToolStripMenuItem_Click(object sender, EventArgs e){//frmNAProperties Props = new frmNAProperties();//Props.Show();// FrmQuery fQuery = new FrmQuery(pMapControl);// fQuery.Show();frmNAProperties frm = new frmNAProperties(pMapControl);frm.Show();}private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e){}private void label1_Click(object sender, EventArgs e){}}}C#+ARCGIS ENGINE开发查找地图元素并高亮显示代码2(2008-12-13 13:13:20)转载分类:程序源代码标签:杂谈上接C#+ARCGIS ENGINE开发查找地图元素并高亮显示代码1//frmNAProperties.cs// Copyright 2006 ESRI//// All rights reserved under the copyright laws of the United States// and applicable international laws, treaties, and conventions.//// You may freely redistribute and use this sample code, with or// without modification, provided you include the original copyright// notice and use restrictions.//// See use restrictions at /arcgis/developerkit/userestrictions.using System;using System.Drawing;using System.Collections;using ponentModel;using System.Windows.Forms;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Carto;// This window shows the property pages for the Network Analyst environment. namespace NAEngine{/// <summary>/// Summary description for frmNAProperties./// </summary>public class frmNAProperties : Form{/// <summary>/// Required designer variable./// </summary>private ponentModel.Container components = null;private GroupBox groupBox2;private Label label7;private Label label6;private Label label1;private Label label2;private Label label3;private ComboBox cmbLayers;private ComboBox cmbFields;private Button btnShowAllValue;private Button btnQuery;private Button btnTable;private Button btnCancle;private GroupBox groupBox1;private ListBox listBoxValue;private bool m_okClicked;public IMapControl2 pMapControl;public IMap pMap;public int iLayerIndex;private ComboBox txtValue;private Label label4;private Label label5;private GroupBox groupBox3;public int iFieldIndex;public frmNAProperties(IMapControl2 pFMapControl){//// Required for Windows Form Designer support//InitializeComponent();pMapControl = pFMapControl;//pMap = pFMapControl.Map;pMap = pFMapControl.Map;}//public frmNAProperties()//{// //// // Required for Windows Form Designer support// //// InitializeComponent();//}/// <summary>/// Clean up any resources being used./// </summary>protected override void Dispose( bool disposing ){if( disposing ){if(components != null){components.Dispose();}}base.Dispose( disposing );}#region Windows Form Designer generated code/// <summary>/// Required method for Designer support - do not modify/// the contents of this method with the code editor./// </summary>private void InitializeComponent(){this.groupBox2 = new System.Windows.Forms.GroupBox();this.groupBox3 = new System.Windows.Forms.GroupBox();bel7 = new bel();bel6 = new bel();bel1 = new bel();bel2 = new bel();bel3 = new bel();this.cmbLayers = new boBox();this.cmbFields = new boBox();this.btnShowAllValue = new System.Windows.Forms.Button();this.btnQuery = new System.Windows.Forms.Button();this.btnTable = new System.Windows.Forms.Button();this.btnCancle = new System.Windows.Forms.Button();this.groupBox1 = new System.Windows.Forms.GroupBox();this.listBoxValue = new System.Windows.Forms.ListBox();this.txtValue = new boBox();bel4 = new bel();bel5 = new bel();this.groupBox2.SuspendLayout();this.groupBox1.SuspendLayout();this.SuspendLayout();//// groupBox2//this.groupBox2.Controls.Add(this.groupBox3);this.groupBox2.Controls.Add(bel7);this.groupBox2.Location = new System.Drawing.Point(20, 279); = "groupBox2";this.groupBox2.Size = new System.Drawing.Size(330, 141);this.groupBox2.TabIndex = 10;this.groupBox2.TabStop = false;//// groupBox3//this.groupBox3.Location = new System.Drawing.Point(4, -273); = "groupBox3";this.groupBox3.Size = new System.Drawing.Size(330, 25);this.groupBox3.TabIndex = 11;this.groupBox3.TabStop = false;//// label7//bel7.AutoSize = true;bel7.Font = new System.Drawing.Font("楷体_GB2312", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));bel7.Location = new System.Drawing.Point(30, 17); = "label7";bel7.Size = new System.Drawing.Size(293, 60);bel7.TabIndex = 9;bel7.Text = " 本系统是结合C#,ARCGIS ENGINE 开发的地理信息\r\n查询系统,主要具有地点查询和最短线路查询两个功\r\n能。

ArcGISEngine+C#缓冲区分析

ArcGISEngine+C#缓冲区分析

ArcGIS Engine+C#缓冲区分析2009-07-01版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明/logs/42207152.html1 概述\r\n缓冲区分析(Buffer)是对选中的一组或一类地图要素(点、线或面)按设定的距离条件,围绕其要素而形成一定缓冲区多边形实体,从而实现数据在二维空间得以扩展的信息分析方法。

缓冲区应用的实例有如:污染源对其周围的污染量随距离而减小,确定污染的区域;为失火建筑找到距其500米范围内所有的消防水管等。

\r\n2 缓冲区的基础\r\n缓冲区是地理空间,目标的一种影响范围或服务范围在尺度上的表现。

它是一种因变量,由所研究的要素的形态而发生改变。

从数学的角度来看,缓冲区是给定空间对象或集合后获得的它们的领域,而邻域的大小由邻域的半径或缓冲区建立条件来决定,因此对于一个给定的对象A,它的缓冲区可以定义为:\r\nP={x | d(x , A)<=r}(d一般是指欧式距离,也可以是其它的距离,其中r为邻域半径或缓冲区建立的条件)\r\n缓冲区建立的形态多种多样,这是根据缓冲区建立的条件来确定的,常用的对于点状要素有圆形,也有三角形、矩形和环形等;对于线状要素有双侧对称、双侧不对称或单侧缓冲区;对于面状要素有内侧和外侧缓冲区,虽然这些形体各异,但是可以适合不同的应用要求,建立的原理都是一样的。

点状要素,线状要素和面状要素的缓冲区。

3 定制工具的使用\r\n1 打开工程GPBufferLayerCSharpGpBufferLayer.sln\r\n2 在VS2005内选择重新生成解决方案\r\n3 开发需要添加工具的工程\r\n4 在ToolBarControl上点右键,选择属性\r\n5 选择条目,点击添加\r\n\r\n6 在命令类中选择“自定义工具集”,选择“缓冲区分析”,可通过双击或者拖放到工具条上。

\r\n7 运行程序\r\n8 使用“选择要素”命令,选择需要建立缓冲区的要素(点或线)\r\n9 点击工具条上的“缓冲区分析按钮”,弹出缓冲区分析对话框\r\n10 选择缓存分析的图层,选择距离及单位,设置输出的图层\r\n11 点击分析按钮,当出现“分析完成”字样时,工作完成\r\n12 这时通过附加新的图层,即可看到结果\r\n4 核心源代码分析\r\n4.1 BufferSelectedLayerCmd.cs\r\n主要完成定制command的相关代码,具体原理可参见《ArcGIS Engine中文开发指南》\r\n4.2 BufferDlg.cs\r\n为缓冲区分析的输入对话框。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
InitializeComponent(); this.pLegendClass = tempLegendClass; this.pLayer = tempLayer; }
(3) 添加 SymbolControl 的 SymbologyStyleClass 设置函数 SetFeatureClassStyle(),代码如 下:
ESRI.ArcGIS.Carto.ILegendGroup pLG = new LegendGroupClass();
if (unk is ILegendGroup)
{
pLG = (ILegendGroup)unk;
}
pLC = pLG.get_Class((int)data);
ISymbol pSym;
lblAngle
角度
其它
Label
lblOutlineColor
外框颜色
NumericUpDown nudSize
NumericUpDown nudWidth
NumericUpDown nudAngle
Button
btnColor
(设置为 空)
Button
btnOutlineColor
(设置为 空)
/// <summary> /// 初始化 SymbologyControl 的 StyleClass,图层如果已有符号,则把符号添加到 SymbologyCon trol 中的第一个符号,并选中 /// </summary> /// <param name="symbologyStyleClass"></param> private void SetFeatureClassStyle(esriSymbologyStyleClass symbologyStyleClas s) {
直接调用 ArcMap 中的符号选择器
(1)添加 ESRI.ArcGIS.DisplayUI 的引用。 分别在解决方案管理器和代码中添加引用。 (2)添加 TOCControl 的 Double_Click 事件。 (3)实现 TOCControl 的 Double_Click 事件。 因为种方法不是本讲的重点,故不对代码进行分析,有兴趣的读者请自行理解或结合后面的内容 理解。代码如下:
//确定图层的类型(点线面),设置好 SymbologyControl 的 StyleClass,设置好各控件的 可见性(visible)
IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)pLayer;
switch (((IFeatureLayer)pLayer).FeatureClass.ShapeType)
ArcGIS Engine + C# 图层符号选择器的实现
图1 在 AE 开发中,符号选择器有两种实现方式。 一是在程序中直接调用 ArcMap 中的符号选择器, 如下所示:
图2 二是自定义符号选择器,如图 1 所示。 由于第一种方式前提是必须安装 ArcGIS Desktop,其界面还是英文的,而对二次开发来说,大 部分用户希望应该是中文界面。因此开发人员通常选择第二种方式,本讲也着重讲解第二种方式。
初始化
(1) 添加 SymbolSelectorFrm 的全局变量,代码如下:
private IStyleGalleryItem pStyleGalleryItem; private ILegendClass pLegendClass; private ILayer pLayer; public ISymbol pSymbol; public Image pSymbolImage;
pSymbologyStyleClass.AddItem(currentStyleGalleryItem,0);
this.pStyleGalleryItem = currentStyleGalleryItem;
}
pSymbologyStyleClass.SelectItem(0);
}
(4) 添加注册表读取函数 ReadRegistry(),此函数从注册表中读取 ArcGIS 的安装路径,代码 如下:
/// <summary> /// 从注册表中取得指定软件的路径 /// </summary> /// <param name="sKey"></param> /// <returns></returns> private string ReadRegistry(string sKey) {
//Open the subkey for reading Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachi ne.OpenSubKey(sKey, true); if (rk == null) return ""; // Get the data from a specified item in the key. return (string)rk.GetValue("InstallDir"); }
{
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoin t:
pSym = pLC.Symbol;
ESRI.ArcGIS.DisplayUI.ISymbolSelector pSS = new
ESRI.ArcGIS.DisplayUI.SymbolSelectorClass();
bool bOK = false;
pSS.AddSymbol(pSym);
bOK = pSS.SelectSymbol(0);
//取得 ArcGIS 安装路径 string sInstall = ReadRegistry("SOFTWARE\\ESRI\\CoreRuntime");
//载入 ESRI.ServerStyle 文件到 SymbologyControl
this.axSymbologyControቤተ መጻሕፍቲ ባይዱ.LoadStyleFile(sInstall + "\\Styles\\ESRI.Ser verStyle");
ILayer iLayer = null;
IBasicMap iBasicMap = null;
object unk = null;
object data = null;
if (e.button == 1)
{
axTOCControl1.HitTest(e.x, e.y, ref toccItem, ref iBasicMap, ref i Layer, ref unk,
Filter 属性设置为:Styles 文件 |*.ServerStyle
ContextMenuStrip contextMenuStripMoreSymbol
添加引用 在解决方案资源管理器中添加 ArcGIS Engine 的 ESRI.ArcGIS.Geodatabase 引用,在 SymbolSelectorFrm.cs 文件中添加如下引用代码:
this.axSymbologyControl.StyleClass = symbologyStyleClass; ISymbologyStyleClass pSymbologyStyleClass = this.axSymbologyControl. GetStyleClass(symbologyStyleClass);
private void axTOCControl1_OnDoubleClick(object sender, ITOCControlEvents_OnD oubleClickEvent e) {
one;
esriTOCControlItem toccItem = esriTOCControlItem.esriTOCControlItemN
Button
btnMoreSymbols
更多符号
Button
btnOK
确定
DialogResult 属性设为 OK
Button
btnCancel
取消
GroupBox
groupBox1
预览
GroupBox
groupBox2
设置
ColorDialog
colorDialog
OpenFileDialog openFileDialog
if (this.pLegendClass != null)
{
yItem();
IStyleGalleryItem currentStyleGalleryItem = new ServerStyleGaller
= "当前符号";
currentStyleGalleryItem.Item = pLegendClass.Symbol;
ref data);
System.Drawing.Point pos = new System.Drawing.Point(e.x, e.y);
if (toccItem == esriTOCControlItem.esriTOCControlItemLegendClass)
{
ESRI.ArcGIS.Carto.ILegendClass pLC = new LegendClassClass();
if (bOK)
{
pLC.Symbol = pSS.GetSymbolAt(0);
}
this.axMapControl1.ActiveView.Refresh(); this.axTOCControl1.Refresh();
相关文档
最新文档