ArcGIS Engine二次开发

本文档详细介绍了ArcGIS Engine的二次开发过程,包括安装环境配置、面向对象基础、核心UI控件的使用,如图层属性获取、地图操作、矢量数据查询和栅格数据处理,以及初步涉及三维开发。内容涵盖了接口、类、对象的创建以及各种GIS操作的实现。
摘要由CSDN通过智能技术生成

1 安装环境配置

  • VS高版本添加工具
    打开自己的注册表编辑器:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\12.0
    新建字符串值:ShellFolder和InstallDir如下
    在这里插入图片描述

2 参考资料

D:\Program Files (x86)\ArcGIS\DeveloperKit10.2\Diagrams
在线参考资料

3 面向对象基础

接口——类——对象
ICar——CarA——myCar

3.1 接口

新建——添加——类——接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Car
{
   
    interface Icar
    {
   
        string color {
    get; set; }
        void jiaShu();
    }
}

3.2 类

新建——添加——类——类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Car
{
   

    class carA : Icar
    {
   
        private string _color;
        public string color
        {
   
            get
            {
   
                return _color;
            }
            set
            {
   
                _color = value;
            }
        }

        public void jiaShu()
        {
   
            MessageBox.Show("加速中");
        }
    }
}

3.3 对象

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Car
{
   
    public partial class Form1 : Form
    {
   
        public Form1()
        {
   
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
   
            Icar car = new carA();
            car.color = "白色";
            car.jiaShu();

            MessageBox.Show("汽车实例化成功!!");
        }
    }
}

3.4 面向对象的三大特性

封装:把属性和方法封装在一起,使用时不用在意实现的细节,只关注结果
继承:一个对象获得另一个对象的属性和方法的过程。继承有三种形式:接口和类、接口和接口、类和类
多态:同一操作作用于不同对象,可以有不同的解释,产生不同的结果。重点是重写和重载。

4 对象模型图和ArcGIS Engine开发帮助

4.1 对象模型图(OMD)

对象模型图(Object Model Diagram),是了解和熟悉ArcGIS Engine体系框架的基础
抽象类:不能直接创建新对象,必须通过之类去继承
实例化类:不能直接创建新对象,需要通过其他类的方法或属性来创建
可创建类:唯一可以用New关键字来创建的

5 核心UI控件

Mapcontrol:显示ArcGIS支持的地图数据
Toccontrol:用来控制显示图层
Scenecontrol:用来进行三维显示
Licensecontrol:为ArcGIS Engine程序提供许可服务
ArcGIS Engine10以上许可的添加:

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);

5.1 获取图层属性

//引入IFeatureLayer对应的命名空间
using ESRI.ArcGIS.Carto;
        private void button1_Click(object sender, EventArgs e)
        {
   
            try
            {
   
                IFeatureLayer featureLayer = axMapControl1.get_Layer(0) as IFeatureLayer;
                //设置不显示
                featureLayer.Visible = false;
                //更新显示
                axMapControl1.Refresh();
            }
            catch (Exception ex)
            {
   
                MessageBox.Show(ex.Message);
            }
        }

案例:对矢量图层的字段进行增加、删除和查找

        private void button_add_Click(object sender, EventArgs e)
        {
   
            IFeatureLayer featureLayer = axMapControl1.get_Layer(0) as IFeatureLayer;
            IFeatureClass featureClass = featureLayer.FeatureClass;
            IFieldEdit fieldEdit = new FieldClass();
            fieldEdit.Name_2 = "new";
            fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            fieldEdit.Length_2 = 10;
            //添加字段函数
            featureClass.AddField(fieldEdit as IField);
            axMapControl1.Refresh();

        }

        private void button_delete_Click(object sender, EventArgs e)
        {
   
            int fields_length;
            int fields_length2;
            IFeatureLayer featureLayer = axMapControl1.get_Layer(0) as IFeatureLayer;
            IFeatureClass featureClass = featureLayer.FeatureClass;
            IFields fields = featureClass.Fields;
            //获取图层的字段数
            fields_length = fields.FieldCount;
            //输出字段数
            MessageBox.Show(fields_length.ToString());
            IField field = fields.get_Field(fields_length - 1);
            //直接删除最后一个字段
            featureClass.DeleteField(field);
            fields_length2 = fields.FieldCount;
            //输出修改后的字段数
            MessageBox.Show(fields_length2.ToString());
        }

读取相应字段的属性值

            IFeatureLayer feature = axMapControl1.get_Layer(0) as IFeatureLayer;
            IFeatureClass featureClass = feature.FeatureClass;
            IFeature feature1 = featureClass.GetFeature(0);
            //获取字段索引
            int index = featureClass.FindField("NAME");
            //获取值
            string nm = Convert.ToString(feature1.get_Value(index));
            MessageBox.Show(nm);

5.2 添加数据

        //添加数据
        private void button1_Click(object sender, EventArgs e)
        {
   
            ICommand command = new ControlsAddDataCommandClass();
            command.OnCreate(axMapControl1.Object);
            command.OnClick();
        }

5.3 地图放大

        private void button2_Click(object sender, EventArgs e)
        {
   
            //添加默认数据
            axMapControl1.AddShapeFile(@"E:\Secondary_development\C#\资料\第七章(第二讲)\第七章第二讲程序\data", "餐饮_point.shp");
            //判断是否激活工具
            if (axMapControl1.CurrentTool == null)
            {
   
                //激活工具
                ESRI.ArcGIS.SystemUI.ICommand identify;
                ESRI.ArcGIS.SystemUI.ITool identifytool = new ControlsMapZoomInToolClass();
                axMapControl1.CurrentTool = identifytool;
                identify = identifytool as ESRI.ArcGIS.SystemUI.ICommand;
                identify.OnCreate(axMapControl1.Object);
                identify.OnClick();

            }
            else
            {
   
                axMapControl1.CurrentTool = null;

            }

        }

5.4 地图缩小

        private void button3_Click(object sender, EventArgs e)
        {
   
            //添加默认数据
            axMapControl1.AddShapeFile(@"E:\Secondary_development\C#\资料\第七章(第二讲)\第七章第二讲程序\data", "餐饮_point.shp");
            //判断是否激活工具
            if (axMapControl1.CurrentTool == null)
            {
   
                //激活工具
                ESRI.ArcGIS.SystemUI.ICommand identify;
                ESRI.ArcGIS.SystemUI.ITool identifytool = new ControlsMapZoomOutToolClass();
                axMapControl1.CurrentTool = identifytool;
                identify = identifytool as ESRI.ArcGIS.SystemUI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值