GIS二次开发:实验一 ArcGIS Engine 开发初步

article/2025/10/15 20:19:37

实验一 ArcGIS Engine 开发初步

一、实验目的

  1. 掌握ArcGIS Engine的安装;
  2. 熟悉ArcGIS Engine中几个常用的控件;
  3. 搭建第一个简单的ArcGIS Engine 程序;
  4. 通过ICommand接口添加地图浏览工具。

二、实验仪器与设备

计算机、visual studio 软件、ArcGIS engine 开发包

三、实验内容与步骤

  1. ArcGIS engine安装及环境配置。
    (1)安装ArcGIS License Manager

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)安装ArcGIS Engine 10.2,选择以下路径中的ESRI.exe 点击安装:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)打开ArcGIS管理器导向,选择ArcGIS Engine浮动:
在这里插入图片描述

  1. 搭建简单的ArcGIS Engine 程序
    (1)启动Visual Studio 2012,创建gis3.1工程
    在这里插入图片描述

(2)选择需要添加的ArcGIS引用项,在【License Checking】选项页中选择需要的软件许可授权和扩展模块许可授权。
在这里插入图片描述

(3)在【工具箱】面板中找到【ArcGIS Windows Forms】选项卡,此选项卡中包含有ArcGIS Engine中所有的可视化控件,选择需要的控件添加到【gis3.1】窗体中。
在这里插入图片描述

(4)添加地图浏览工具,打开工具条属性,执行以下操作。
在这里插入图片描述

(5)选中TOCControl控件,单击鼠标右键,选择【属性】,弹出对话框,在【General】选项卡的“Buddy”下拉列表中选择与其绑定的MapControl地图控件,这样当程序运行时TOCControl控件才可以与地图控件进行联动。
在这里插入图片描述

(6)选中MapControl控件,单击鼠标右键,选择【属性】,弹出对话框,在对话框中选择程序运行时加载的*.mxd地图文档,点击【确定】按钮完成对*.mxd文档的关联。
在这里插入图片描述

  1. 地图浏览工具的添加
    (1)在窗口中添加自定义工具条及相应按钮:
    在这里插入图片描述

(2)分别实现对应按钮的事件响应代码:

/// <summary>
/// 工具条
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// 打开文件夹
private void buttonI_opendata_Click(object sender, EventArgs e)
{ICommand pcommand = new ControlsAddDataCommandClass();pcommand.OnCreate(axMapControl1.Object);pcommand.OnClick();updatalayernametoconbox();
}
/// <summary>
/// 默认鼠标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonI_default_Click(object sender, EventArgs e)
{if (m_ControlsSynchronizer.ActiveViewType == "MapControl"){axMapControl1.CurrentTool = null;axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;}else{axPageLayoutControl1.CurrentTool = null;axPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;}
}
/// <summary>
/// 漫游
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonI_pan_Click(object sender, EventArgs e)
{if (m_ControlsSynchronizer.ActiveViewType == "MapControl"){ICommand pcommand = new ControlsMapPanToolClass();pcommand.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool = pcommand as ITool;}else{ICommand pcommand = new ControlsMapPanToolClass();pcommand.OnCreate(axPageLayoutControl1.Object);axPageLayoutControl1.CurrentTool = pcommand as ITool;}
}
/// <summary>
/// 放大
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonI_zoomin_Click(object sender, EventArgs e)
{if (m_ControlsSynchronizer.ActiveViewType == "MapControl"){ICommand pcommand = new ControlsMapZoomInToolClass();pcommand.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool = pcommand as ITool;}else{ICommand pcommand = new ControlsMapZoomInToolClass();pcommand.OnCreate(axPageLayoutControl1.Object);axPageLayoutControl1.CurrentTool = pcommand as ITool; }
}
/// <summary>
/// 缩小
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonI_zoomout_Click(object sender, EventArgs e)
{if (m_ControlsSynchronizer.ActiveViewType == "MapControl"){ICommand pcommand = new ControlsMapZoomOutToolClass();pcommand.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool = pcommand as ITool;}else            {ICommand pcommand = new ControlsMapZoomOutToolClass();pcommand.OnCreate(axPageLayoutControl1.Object);axPageLayoutControl1.CurrentTool = pcommand as ITool;}}
/// <summary>
/// 全局
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonI_fullscreen_Click(object sender, EventArgs e)
{           ICommand pcommand = new ControlsMapFullExtentCommandClass();pcommand.OnCreate(axMapControl1.Object);pcommand.OnClick();            
}
/// <summary>
/// 前一视图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonI_preview_Click(object sender, EventArgs e)
{if (m_ControlsSynchronizer.ActiveViewType == "MapControl"){ICommand pcommand = new ControlsMapZoomToLastExtentForwardCommandClass();pcommand.OnCreate(axMapControl1.Object);pcommand.OnClick();}else{ICommand pcommand = new ControlsMapZoomToLastExtentForwardCommandClass();pcommand.OnCreate(axPageLayoutControl1.Object);pcommand.OnClick();}
}
/// <summary>
/// 后一视图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonI_aftview_Click(object sender, EventArgs e)
{if (m_ControlsSynchronizer.ActiveViewType == "MapControl"){ICommand pcommand = new ControlsMapZoomToLastExtentBackCommandClass();pcommand.OnCreate(axMapControl1.Object);pcommand.OnClick();}else{ICommand pcommand = new ControlsMapZoomToLastExtentBackCommandClass();pcommand.OnCreate(axPageLayoutControl1.Object);pcommand.OnClick();}}
/// <summary>
/// 测量
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonI_measure_Click(object sender, EventArgs e)
{ICommand pcommand = new ControlsMapMeasureToolClass();pcommand.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool = pcommand as ITool;
}
/// <summary>
/// 鼠标移动显示坐标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void axMapControl1_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{toolStripStatusLabel2.Text = "x=" + e.mapX.ToString() + ",y=" + e.mapY.ToString();if (axMapControl1.LayerCount != 0){//ShowTips显示的要素类IFeatureLayer pFeatureLayer = axMapControl1.Map.get_Layer(0) as IFeatureLayer;if (pFeatureLayer is IFeatureLayer){pFeatureLayer.DisplayField = "DDMM"; //ShowTips显示的字段名称//pFeatureLayer.DisplayField = "Shape";//pFeatureLayer.DisplayField = "OBJECTID";//pFeatureLayer.DisplayField = "Shape_Leng";//pFeatureLayer.DisplayField = "Shape_Area";//将两个ShowTips属性设置为truepFeatureLayer.ShowTips = true;axMapControl1.ShowMapTips = true;}}}

四、实验结果
1.文件加载
在这里插入图片描述

2.放大
在这里插入图片描述

3.缩小
在这里插入图片描述

4.全局
在这里插入图片描述

5.测量
在这里插入图片描述

五、实验心得与体会

1.学会了在Visual Studio中安装部署ArcGIS engine,并且使用ArcGIS控件创建一个小程序。
2.学会了使用ArcGIS控件创建一个工具条,以及自己创建一个工具条两种方法。
3.对ArcGIS engine的理解进一步加深。


http://chatgpt.dhexx.cn/article/YUwnokWl.shtml

相关文章

Arcgis二次开发软件安装(Arcgis10.2、VS2012、AE10.2)

目录 一、序言 二、Arcgis10.2安装 &#xff08;一&#xff09;安装ArcGIS License Manager 1.1 ArcGIS License Manager安装 1.2 ArcGIS License Manager配置 &#xff08;二&#xff09;安装ArcGIS Desktop 1.1ArcGIS Desktop安装 1.2.ArcGIS文件替换 1.3中文显示与…

StackPanel 实现从上往下+从右往左 排列+RenderTransform特效实例分析

StackPanel:将子元素排列到可沿水平或垂直放置的行。 参考资料&#xff1a; 1. StackPanel类 2. Silverlight学习笔记&#xff08;九&#xff09;——RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】 3. MatrixTransform矩阵变换 stack表明StackPane…

控件篇 - 子控件在StackPanel里的居中问题

如下面代码&#xff1a; <StackPanel Width"200" Height"80" Background"Tomato"><TextBlock HorizontalAlignment"Center" VerticalAlignment"Center" Text"ABCD"/></StackPanel> 原意是想通…

Docker Stack

大规模场景下的多服务部署和管理是一件很难的事情。Docker Stack 为解决该问题而生&#xff0c;Docker Stack 通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理&#xff0c;这些功能都封装在一个完美的声明式模型当中。 Stack 能够在单个声明文…

StackPanel布局

StackPanel可以把内部元素在纵向或横向上紧凑排列&#xff0c;形成栈式布局。 示例代码&#xff1a; <Grid><GroupBox Header"请选择没有错别字的成语" BorderBrush"Black" Margin"5"><StackPanel Margin"5" Heig…

2.12 Stack

2.12 Stack Stack也是List接口的实现类之一&#xff0c;和Vector一样&#xff0c;因为性能原因&#xff0c;更主要在开发过程中很少用到栈这种数据结构&#xff0c;不过栈在计算机底层是一种非常重要的数据结构&#xff0c;下边将探讨下Java中Stack。 2.12.1 Stack的继承关系 …

wpf之StackPanel布局

注意两个参数&#xff1a; Orientation &#xff1a;控制排列是水平方向&#xff0c;还是垂直方向&#xff08;Horizontal 水平方向 Vertical垂直方向&#xff09; FlowDirection&#xff1a;控制控件排序是从右往左还是从左往右&#xff0c;写两个简单的demo如下&#xff…

四、StackPanel控件

StackPanel可以把内部控件在纵向或横向上紧凑排列、形成栈式布局&#xff0c;当上层控件不被删除时&#xff0c;剩余的控件会前移&#xff0c;填充空白 特点&#xff1a; 同类控件紧凑排列移除其中…

WPF 控制StackPanel用法

StackPanel是非常相似的WrapPanel&#xff0c;但至少有一个重要的区别&#xff1a;StackPanel的不换行的内容。相反&#xff0c;它将内容向一个方向拉伸&#xff0c;允许您将一项一项一项地堆叠在一起。让我们首先尝试一个非常简单的示例&#xff0c;就像我们对 WrapPanel 所做…

2021-08-16 WPF控件专题 StackPanel 控件详解

1.StackPanel 控件介绍 堆栈面板 —布局控件 —Panel 子元素排列成一行或一列 水平 垂直 FlowDirection 子元素的流动方向 Orientation&#xff1a;Horizontal 一行 一般设置VerticalAlignment&#xff1a;Top Bottom Center Stretch Vertical 一列 HorizontalAlignment Left…

WPF中StackPanel的尺寸的怪癖

前几天写了文章&#xff1a;WPF中的DataGrid控件的VerticalScrollBarVisibility属性失效 今天继续补充StackPanel的特点&#xff0c;可以作为对上述文章的进一步解释。 在WPF中&#xff0c;StackPanel是十分常用的布局元素。然而&#xff0c;该元素和很多其它元素不同&#x…

StackPanel

原文链接&#xff1a;http://www.cnblogs.com/Jennifer/articles/1987757.html Canvas、StackPanel、WrapPanel、DockPanel和Grid是WPF中主要的5种内建面板&#xff0c;这些面板类都位于System.Windows.Controls命名空间下。 StackPanel是一个受欢迎的面板&#xff0c;因为它方…

WPF中的StackPanel、WrapPanel、DockPanel

一、StackPanel StackPanel是以堆叠的方式显示其中的控件 1、可以使用Orientation属性更改堆叠的顺序 Orientation"Vertical" 默认&#xff0c;由上到下显示各控件。控件在未定义的前提下&#xff0c;宽度为StackPanel的宽度&#xff0c;高度自动适应控件中内容的高…

WPF布局控件之StackPanel

StackPanel Stack&#xff0c;英文意思是堆栈&#xff0c;StackPanel&#xff0c;意思是堆栈式布局&#xff0c;相当于把控件给堆起来。如果不设置StackPanel中控件的宽高&#xff0c;那么其中控件的宽高是默认和StackPanel一样的&#xff0c;如果设置控件宽高&#xff0c;那么…

WPF-StackPanel面板

StackPanel Orientation属性 Orientation属性决定SatckPanel中元素的排列方向&#xff0c;默认为垂直排列 Orientation“Vertical” <Window x:Class"StackPanel.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:…

WPF之路——StackPanel布局(堆栈面板)

StackPanel是一个受欢迎的面板&#xff0c;因为它方便好用&#xff0c;它会顺序对它的子元素进行排列。它是少数几个没有定义任何附加属性的面板之一。由于没有附加属性来排列子元素&#xff0c;只有一种方法可以定制StackPanel的行为——设置Orientation属性为Horizontal或Ver…

解决StackPanel滚动条无法显示

解决StackPanel滚动条无法显示 解决方法 1.添加容器:xtraScrollableControl 2.StackPanel隐藏属性 StackPanel.AutoScroll true (设计界面StackPanel控件无法找到该属性&#xff0c;代码设置) 配个显示效果图

ITS堆栈

ITS堆栈 1. ITS堆栈 - 参考体系结构2. C-V2X 重用汽车行业定义的上层3. C-V2X – DSRC 协议栈比较4. V2X 堆栈的演变&#xff08;欧盟版&#xff09;5. 802.11 和 IEEE 1609.X 规范6. 常见的 ITS 消息7. SAE International J2735 消息&#xff1a;示例8. ETSI CAM/DENM 消息&am…

布局之WrapPanel与StackPanel

布局之WrapPanel与StackPanel 一、WrapPanel WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列&#xff0c;当长度或高度不够是就会自动调整进行换行&#xff0c;后续排序按照从上至下或从右至左的顺序进行。 Orientation——根据内容自动换行。当Horizontal选项看…

布局之StackPanel面板

应用程序界面设计中,合理的元素布局至关重要,它可以方便用户使用,并将信息清晰合理地展现给用户。WPF提供了一套功能强大的工具-面板(Panel),来控制用户界面的布局。你可以使用这些面板控件来排布元素。如果内置布局控件不能满足需要的话,还可以创建自定义的布局元素。 面…