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