ArcGIS Engine是ArcGIS的一套软件开发引擎,可以让程序员创建自定义的GIS桌面程序。
它是ESRI在ArcGIS9版本才开始推出的新产品,它是一套完备的嵌入式GIS 组件库和工具库,使用ArcGIS Engine开发的GIS应用程序可以脱离ArcGIS Desktop而运行。
https://baike.baidu.com/item/ArcGIS%20Engine/10318973?fr=aladdin
>>ArcGIS Engine与国土资源:
ESRI在线支持:https://support.esri.com/zh-cn/products/developers/arcgis-engine/arcgis-engine/10-2-2 http://resources.arcgis.com/en/help/
最好的帮助文档其实是arcobject sdk帮助文档和samples.....
但是,有一本参考书还是必要的。
本书共16章。第一部分为基础篇:第1~9章,主要是控件。第二部分为应用提高篇:空间分析。第10章。第三部分:第11~12章,实例应用。第四部分为空间数据库的操作。
第1章 开发基础
ArcGIS的类库总体可以分为界面控件类和操作组件类。控件和组件是不一样的,控件是有界面的,组件是没有界面的。所以它们的引用方式是不一样的。需要注意它们的区别。具体可以看:COM组件
System类库:System类库是Engine中最底层的类库。
SystemUI类库:主要定义了ArcGIS系统中所使用的用户界面组件类型。
Geometry类库:包含了核心几何对象,如点、线、多边形及其几何类型和定义。
Display类库:包含了支持向输出装置绘制符号体系的组件。
Server类库:包含了用于获取到ArcGIS Server的连接的对象。
Output类库:包含了生成输出所必须的对象,通常是从地图或页面布局输出到打印机、绘图仪,或导出到文件中。
Geodatabase类库:Geodatabase类库:包含了所有与数据访问相关的定义的类型,为地理数据提供了编程API,是建立在标准工业关系型和对象关系数据库技术之上的地理数据库。
GISClient类库:
DataSourcesFile类库:
DataSourcesGDB类库:
DataSourcesOleDB类库:
DataSourcesRaster类库:
GeoDatabaseDistributed类库:
Carto类库:Carto类库:该类库支持地图的创建和显示,PageLayout 对象是地图及其底图元素的容器。地图元素包括指北针、图例、比例尺等。Map对象包括地图.上所有图层都有的属性,如空间坐标系、地图比例尺以及地图图层的操作。此对象可以加载各种类型的图层,不同类型的图层由相应的对象处理,如FeatureLayer对象处理矢量数据,RasterLayer 对象处理栅格数据,TinLayer 对象处理TIN数据等。通常图层都有一个相关的Renderer对象,来控制数据在地图中的显示方式。Renderer通常用Display类库中的符号来进行绘制,Renderer 只是将特定符号与待绘制实体属性相匹配。
Location类库:
NetworkAnalysis类库:
Controls类库:
GeoAnalyst类库:
3Danalyst类库:
GlobeCore类库:
SpatialAnalyst类库:
>>第一个例子:基于.NET的ArcGIS Engine的开发
这里需要注意,创建C#类库(组件)和创建C#应用是不同的。。它们最大的显著不同是生成的文件为dll和exe
创建C#应用之后,还需要添加ArcGIS类库引用(ESRI.ArcGIS.Carto、ESRI.ArcGIS.Display、ESRI.ArcGIS.Geometry、ESRI.ArcGIS.System、ESRI.ArcGIS.SystemUI、ESRI.ArcGIS.Utility)
如果控件不显示(控件和组件的区别),新建选项夹->右键,选择项->添加AxMapControl
private void Form1_Load(object sender, EventArgs e)
{
string path = @"D:\BaiduNetdiskDownload\ArcGIS Engine从入门到精通\第2章\sample\lesson1\data\World\";
string fileName = @"World.mxd";
//加载地图文件
axMapControl1.LoadMxFile(path + fileName);
//将地图全屏最大化
axMapControl1.Extent = axMapControl1.FullExtent;
}
Toolbar右键->属性,
第2章 ArcGIS Engine中的控件
制图控件,如MapControl、PageLayoutControl,其中MapControl控件主要用于地理数据的显示和分析,PageLayoutControl 用于生成一幅成品地图。MapControl 封装了Map对象,而PageI ayoutControl则封装了PageLayout对象。这两个控件都实现了IMxContents接口,因此不仅可以读取ArcMap创建的地图文档,而且可以将自身的地图内容写到一个新的地图文档中。
2.1 制图控件介绍
2.1.1 地图控件MapControl控件封装了Map对象,并提供了其他的属性、方法和事件,用于管理控件的外观、显示属性和地图属性,管理、添加数据图层,装载地图文档,显示、绘制跟踪图层。
2.1.2 页面布局控件PageLayoutControl控件主要用于页面布局与制图。该控件封装了PageLayout类,提供了布局视图中控制元素的属性和方法,以及其他的事件、属性和方法。
>>第二个例子:控件使用实例
该实例是一个较全的GIS常用功能集合,本实例只是简单介绍了一些常用功能的开发,让大家对GIS的这些功能涉及的接口、类,有个大概的了解,后续的章节中对这些类和接口会有更详细的介绍。
//加载Mxd地图文档,显示到控件
private void 加载地图文档ToolStripMenuItem_Click(object sender, EventArgs e)
{
//加载地图文档
System.Windows.Forms.OpenFileDialog openFileDialog;
openFileDialog = new OpenFileDialog();
openFileDialog.Title = "打开地图文档文件";
openFileDialog.Filter = "map documents(*.mxd)|*.mxd";
if(openFileDialog.ShowDialog() == DialogResult.OK){
string filePath = openFileDialog.FileName;
if (axMapControl1.CheckMxFile(filePath))
{
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass;
axMapControl1.LoadMxFile(filePath, 0, Type.Missing);
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;
//loadEagleEyeDocument(filePath);
axMapControl1.Extent = axMapControl1.FullExtent;
}
else {
MessageBox.Show(filePath + "不是有效的地图文档");
}
}
}
这里面的Map.mxd文档中的每个layer都是shp文件,如果是.lyr图层的话就无法显示
图层的操作是GIS中常用的功能,涉及图层的添加、删除、移动等,下面的示例演示了,图层的添加、删除、移动功能。
添加图层可以是*.lyr格式的图层文件,也可以是*.shp文件,使用MapControl自带的AddLayerFromFile方法,提供lyr图层文件的路径,即可加载到地图控件中。
private void 添加图层ToolStripMenuItem_Click(object sender, EventArgs e)
{
System.Windows.Forms.OpenFileDialog openFileDialog;
openFileDialog = new OpenFileDialog();
openFileDialog.Title = "打开图层文件";
openFileDialog.Filter = "map documents(*.lyr)|*.lyr";
if(openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
try {
axMapControl1.AddLayerFromFile(filePath);
}catch(Exception ex)
{
MessageBox.Show("添加图层失败"+ex.ToString());
}
}
}
效果很棒,但是这里的layer文件是怎么保存的
图形绘制是GIS系统中的一个很重要、很常用的功能,MapControl提供了常用的线、圆、矩形、多边形等形式的绘制,例如,绘制圆形,则在axMapControl1_OnMouseDown事件中设置绘制方法,具体如下所示:
//绘制线、圆、矩形
private void drawMapShape(IGeometry geometry)
{
IRgbColor rgbColor;
rgbColor = new RgbColorClass();
rgbColor.Red = 255;
rgbColor.Green = 255;
rgbColor.Blue = 0;
object symbol = null;
if (geometry.GeometryType == esriGeometryType.esriGeometryPolyline || geometry.GeometryType == esriGeometryType.esriGeometryLine)
{
ISimpleLineSymbol simpleLineSymbol;
simpleLineSymbol = new SimpleLineSymbolClass();
simpleLineSymbol.Color = rgbColor;
simpleLineSymbol.Width = 5;
symbol = simpleLineSymbol;
}
else {
ISimpleFillSymbol simpleFillSymbol;
simpleFillSymbol = new SimpleFillSymbolClass();
simpleFillSymbol.Color = rgbColor;
symbol = simpleFillSymbol;
}
axMapControl1.DrawShape(geometry, ref symbol);
}
布局控件与地图控件关联
在GIS系统中经常使用到地图的制图,在地图上标记指北针、图例、比例尺等,进行地图输出,Engine提供了PageLayoutControl控件,该控件可以添加图元要素等进行地图修饰,下面代码演示了布局控件与地图控件关联,要实现该功能的核心接口是IObjectCopy,该接口提供了Copy方法用于地图的复制,
private void copyToPageLayout()
{
IObjectCopy objectCopy = new ObjectCopyClass();
object copyFromMap = axMapControl1.Map;
object copyMap = objectCopy.Copy(copyFromMap);
object copyToMap = axPageLayoutControl1.ActiveView.FocusMap;
objectCopy.Overwrite(copyMap, ref copyToMap);
}
private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e)
{
copyToPageLayout();
}
private void axMapControl1_OnAfterScreenDraw(object sender, IMapControlEvents2_OnAfterScreenDrawEvent e)
{
IActiveView activeView = (IActiveView)axPageLayoutControl1.ActiveView.FocusMap;
IDisplayTransformation displayTransformation = activeView.ScreenDisplay.DisplayTransformation;
displayTransformation.VisibleBounds = axMapControl1.Extent;
axPageLayoutControl1.ActiveView.Refresh();
copyToPageLayout();
}
布局控件中属性设置与绘制元素
第3章 几何对象和空间坐标系
第4章 地图组成及图层控制
第5章 地图制图
第6章 空间数据管理
第7章 数据编辑
第8章 栅格数据
第9章 三维可视化
第10章 空间分析
第11章 符号库管理系统的开发
第12章 空间数据管理系统
第13章 空间数据库连接与释放
第14章 空间数据库加载
第15章 程序出错和异常
第16章 其他经验技巧
>>根据属性domain个数分类图层。