ArcGIS二次开发——地图居中显示

ArcGIS二次开发——地图居中显示

一、创建 Engine 应用程序

1.启动 Visual Studio 2012,从“文件”->“新建”选中“项目”,在弹出的新建项目对话框中,首先选中Visual C#,然后在模板中选中 Windows 应用窗体程序,为该程序命名为“地图查询”,然后通过点击“浏览”按钮,指定一个存放工程文件的路径,点击“确定”。

ArcGIS二次开发——地图居中显示_第1张图片

2.创建 MapViewer 工程后,该工程会自动创建一个名称为Form1 的窗体,如下

ArcGIS二次开发——地图居中显示_第2张图片

  1. 在窗体上点击鼠标右键选择“属性”。在右边的属性列表中找到“Text”属性,输入“MapViewer”。窗体标题变化为“MapViewer”。

ArcGIS二次开发——地图居中显示_第3张图片

4.拖动窗体右下角,使窗体变大,点击左侧的“工具箱”。在弹出的工具箱中找到“ArcGIS Windows Forms”选项卡,点击选项卡前面的三角,展开该选项卡,双击或者拖动“ToolBarControl”到窗体上。

ArcGIS二次开发——地图居中显示_第4张图片

5.在 MapViewer 窗体界面上选中 ToolBarControl 控件,在属性窗口中找到“Dock”属性,点击下拉按钮,如下图选中“Top”部分。

ArcGIS二次开发——地图居中显示_第5张图片

6.同理和
ToolBarControl 的操作一样,依次将 TOCControl 控件和MapControl 控件拖到窗体上,选中该控件,在属性窗口中找到“Dock”属性,选中“Left”部分。将MapControl 控件的“Dock”属性,设为“Fill”,最后拖入 LicenseControl 控件。

ArcGIS二次开发——地图居中显示_第6张图片

至此 MapViewer 窗体的界面布局设置已经完成。窗体顶部是工具栏,左侧是图层列表,主工作区是地图控件。

7.这时我们需要在 ToolBarControl 上添加 Engine 提供的工具和命令。右键点击窗体上的 ToolbarControl 控件,选择“属性”。在弹出的对话框中,先设置“Buddy
Control”属性为axMapControl1,也就是说我们执行 ToolBarControl 上的工具时,是对 MapControl 进行操作的。然后点击“Items”选项卡。在“Items”选项卡中,点击“Add”按钮。该窗体中列出了所有 Engine 提供的,在 ToolBarControl上可以直接加载使用的工具和命令,这里我们只使用部分工具。在左边的分类中选中“Generic”,双击右侧的“Open”命令。这样“Open”命令加入到工具栏里面了。在左侧依次选中“Map Inquiry”和“Map Navigation”,把“Identify”,“Zoom In”,“Zoom Out”等工具添加到工具栏中。添加完成后效果如下,可以拖动更改这些工具的顺序,点击“OK”按钮。

ArcGIS二次开发——地图居中显示_第7张图片
8.在窗体上右键点击 TOCControl,选择“属性”菜单。设置“Buddy Control”属性为“axMapControl1”,也就是TOC 图层列表中显示的是 MapControl 中的图层。点击“OK”。右键点击 LicenseControl,点击“属性”菜单。浏览弹出的对话框,其中ArcGIS
Engine 已经选中,如果需要其它扩展模块的许可,可以在右侧选中对应的复选框,点击“OK”按钮。

ArcGIS二次开发——地图居中显示_第8张图片

9.开始调试程序,这时会弹出一个错误“ArcGIS version not specified. You must call RuntimeManager.Bind
before creating any ArcGIS components.”,提示我们需要使用 Bind 绑定 ArcGIS 产品。这是因为在
ArcGIS 10.0 版本开始,产品架构发生了一些变化,在开发的时候首先要做的就是绑定产品,绑定的位置放在使用 ArcObjects 对象之前,只需要添加如下代码:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine)。

ArcGIS二次开发——地图居中显示_第9张图片
ArcGIS二次开发——地图居中显示_第10张图片

10.再次运行程序,即可成功。点击工具栏上的“Open”按钮。打开地图文件,地图文档中包含的图层就加载到了地图控件和图层列表控件中。

ArcGIS二次开发——地图居中显示_第11张图片

二、添加数据

加载地图文档

  1. 在 VS2012 的工具箱中,展开菜单和工具栏,双击 MenuStrip控件,这样就在窗体上添加了一个菜单栏。在菜单上点击,输入“File”作为菜单的名称,在其下拉框中点击,输入“Open”菜单项和“Add Data”菜单项。

    ArcGIS二次开发——地图居中显示_第12张图片

  2. 选中“Open”菜单项,在属性框中点击“Events”按钮,在事件列表中双击“Click”事件或者直接双击该菜单项。自动生成的事件处理方法如下图所示,我们将在方法内输入处理代码。

OpenFileDialog pOpenFileDialog = new OpenFileDialog();

        pOpenFileDialog.Filter = "Map

Document(.mxd)|.mxd";

        pOpenFileDialog.InitialDirectory = @"E:\Data";

        pOpenFileDialog.Multiselect = false;

        pOpenFileDialog.Title = "Open Map

Document";

        if (pOpenFileDialog.ShowDialog() == DialogResult.OK)

        {

            string docName = pOpenFileDialog.FileName;

     
  if (axMapControl1.CheckMxFile(docName))

            {

axMapControl1.LoadMxFile(docName);

            }

       }
  1. 由于ArcGIS Engine10.2仍是32位应用程序,所以需要将程序的目标平台设为x86。在工程处右键选择“属性”,弹出页面中,左侧选择“生成”,右侧界面“目标平台”项设置为“x86”。

ArcGIS二次开发——地图居中显示_第13张图片

  1. 运行 Engine 程序,选择菜单项
    File->Open,弹出 Open Map Document 对话框,选择相应的地图文档,点击“Open”。这样就可以可以打开地图文件了。
    ArcGIS二次开发——地图居中显示_第14张图片

添加要素类(从数据源角度)

  1. 选中“Add Data”菜单项,直接双击该菜单项,添加 Click 事件。接下来开始使用 ArcGIS Engine 进行编码,首先需要添加 ArcGIS 的引用,在解决方案管理器中右键点击“引用”,选择“添加引用”。在引用管理器对话框中,左侧选择扩展,右侧选择ESRI.ArcGIS.DataSourcesFile 和 ESRI.ArcGIS.Geodatabase 类库,勾上其前面的可选框,点击“确定”。

ArcGIS二次开发——地图居中显示_第15张图片

这里需要注意,从.NET
Framework 4.0 平台开始,Reference 属性中新增加了 Embed Interop Types(嵌入互操作类型)选项,需要把ArcGIS相关的引用的嵌入互操作类型设为“False”,否则会报错。

  1. Form1.cs源代码文件中,在源代码的最顶部,导入命名空间,如下:

using System.IO;

using ESRI.ArcGIS.Carto;

using ESRI.ArcGIS.DataSourcesFile;

using ESRI.ArcGIS.Geodatabase;

using ESRI.ArcGIS.Display;

using ESRI.ArcGIS.Controls;

  1. 在 Click 事件处理方法中添加代码。

         IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
    

    OpenFileDialog pOpenFileDialog = new OpenFileDialog();

         pOpenFileDialog.Filter = "shapefile 文件(*.shp)|*.shp";
    
         pOpenFileDialog.InitialDirectory = @"C:\";
    
         pOpenFileDialog.Multiselect = false;
    
         DialogResult pDialogResult =
    

pOpenFileDialog.ShowDialog();

        if (pDialogResult != DialogResult.OK)

            return;

        string pPath = pOpenFileDialog.FileName;

        string pFolder = System.IO.Path.GetDirectoryName(pPath);

        string pFileName = System.IO.Path.GetFileName(pPath);

        axMapControl1.AddShapeFile(pFolder,

pFileName);

        axMapControl1.ActiveView.Refresh();

运行程序,点击“Add Data”菜单项,在弹出的对话框中,选择任意一个 shp 文件,点击“Open”,即可把
shp 文件加载到地图控件中。

ArcGIS二次开发——地图居中显示_第16张图片

属性查询

1.添加控件,在窗体中添加一个Label和一个TextBox,将Label控件的“Text”属性修改为“省名”,TextBox控件的Name属性修改为CityName。

ArcGIS二次开发——地图居中显示_第17张图片

2在控件TextBox的事件中选择KeyUp,在KeyUp事件中添加以下代码:

if (e.KeyCode == Keys.Enter)

        {

            IFeatureLayer pFeatureLayer;

            IFeatureCursor pFeatureCursor;

            IQueryFilter pQueryFilter;

            IFeature pFeature;



            pFeatureLayer = this.axMapControl1.Map.get_Layer(0) as IFeatureLayer;

            if (pFeatureLayer.Name != "chinaprj")

                return;

            this.axMapControl1.Map.ClearSelection();

            pQueryFilter = new QueryFilterClass();

            pQueryFilter.WhereClause = "NAME='" + CityName.Text + "'";

            pFeatureCursor =

pFeatureLayer.Search(pQueryFilter, true);

            pFeature =

pFeatureCursor.NextFeature();

            if (pFeature != null)

            {

                this.axMapControl1.Map.SelectFeature(pFeatureLayer,

pFeature);

                this.axMapControl1.Extent =

pFeature.Shape.Envelope;

            }

            else

            {

                MessageBox.Show("没有找到" + CityName.Text);

            }

        }

实验结果

运行程序后,添加数据,分别在编辑框中输入“湖北省”和“湖南省”及“湖北”。可以实现基本的Name属性查询及查询结果居中显示,但是不支持模糊查询。

ArcGIS二次开发——地图居中显示_第18张图片
ArcGIS二次开发——地图居中显示_第19张图片
ArcGIS二次开发——地图居中显示_第20张图片

你可能感兴趣的:(ArcGIS二次开发,ArcGIS,地图居中显示)