ArcGIS Engine 地理信息系统开发教程的内容简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArcGIS Engine 地理信息系统开发教程的内容简介相关的知识,希望对你有一定的参考价值。

参考技术A

第1章ArcGIS Engine编程基础
1.1 ArcGIS Engine概述
1.1.1 ArcGIS Engine简介
1.1.2 ArcGIS Engine功能
1.1.3 ArcGIS Engine与ArcObjects
1.1.4 ArcGIS Engine类库
1.1.5 ArcGIS Engine控件
1.2 ArcGIS Engine开发资源
1.2.1 帮助文档
1.2.2 自带示例
1.2.3 在线帮助
1.2.4 网上资源
1.3Esri开发方式简介
1.3.1AML语言开发方式
1.3.2Avenue语言开发方式
1.3.3MapObjects开发方式
1.3.4VBA开发方式
1.3.5 ArcObjects开发方式
1.4 对象模型图
1.4.1 对象模型图中的类与接口
1.4.2 查看OMD图
1.5ArcGIS Engine的安装
1.5.1 ArcGIS License Manager的安装
1.5.2 ArcGIS Engine Runtime for Windows的安装
1.5.3 ArcObjects SDK for the Microsoft.NET Framework的安装
1.6 本章小节
第2章 桌面GIS应用软件的开发方式
2.1 使用VBA进行桌面软件开发
2.1.1 VBA开发方式
2.1.2 VBA代码的安全性
2.2 使用DLL进行桌面软件开发
2.2.1 DLL开发方式
2.2.2 DLL功能的应用部署
2.3 使用Add in进行桌面软件开发
2.3.1 Add in开发方式
2.3.2 Add in的安装部署
2.4 使用ArcGIS Engine构建独立应用程序
2.5 不同开发方式的比较
2.6 本章小结
第3章 地图基本操作
3.1 空间数据与工作空间
3.1.1 空间数据
3.1.2 工作空间
3.2 MapControl控件接口
3.2.1 IMapControlDefault接口
3.2.2 IMapControl2接口
3.2.3 IMapControl3接口
3.2.4 IMapControl4接口
3.2.5 IMapControlEvents2接口
3.3 数据加载
3.3.1 加载地图文档
3.3.2 加载Shapefile数据
3.3.3 加载栅格数据
3.3.4 加载CAD数据
3.3.5 加载个人地理数据库数据
3.3.6 加载文件地理数据库数据
3.3.7 加载ArcSDE空间数据库数据
3.3.8 加载文本文件数据
3.4 地图文档保存
3.4.1 地图文档保存
3.4.2 地图文档另存为
3.5 地图浏览
3.5.1 放大与缩小
3.5.2 拉框放大与缩小
3.5.3 漫游
3.5.4 全图显示
3.5.5 历史视图切换
3.6 书 签
3.6.1 添加书签
3.6.2 书签管理
3.7 ICommand和ITool命令操作地图
3.8 量 测
3.8.1 状态栏坐标显示
3.8.2 距离测量
3.8.3 面积测量
3.9 要素选择操作
3.9.1 要素选择
3.9.2 缩放至选择
3.9.3 清除选择
3.10 地图导出
3.11 视图同步
3.11.1 鹰眼窗口
3.11.2 数据视图与布局视图的同步
3.12 TOCControl控件
3.12.1 TOCControl与数据视图的关联
3.12.2 图层显示顺序调整
3.12.3 TOCControl的右键菜单
3.13 本章小结
第4章 查询统计
4.1 属性查询
4.1.1 相关类与接口
4.1.2 实例详解
4.2 空间查询
4.2.1 相关类与接口
4.2.2 实例详解
4.3 图形查询
4.3.1 相关类与接口
4.3.2 实例详解
4.4 选择集
4.4.1 相关类与接口
4.4.2 实例详解
4.5 查询选项设置
4.5.1 相关类和接口
4.5.2 实例详解
4.6 统计分析
4.6.1 相关的类和接口
4.6.2 实例详解
4.7 本章小结
第5章 地图制图
5.1 颜色模型
5.1.1 颜色模型分类
5.1.2 颜色对象
5.2 地图符号化
5.2.1 点要素符号化
5.2.2 线要素符号化
5.2.3 面要素符号化
5.2.4 文本符号化
5.2.5 符号选择器
5.2.6 样式管理器
5.3 地图标注
5.3.1 TextElement标注
5.3.2 Annotation注记
5.3.3 MapTips显示
5.4 专题地图制图
5.4.1 单一符号化
5.4.2 唯一值符号化
5.4.3 唯一值多字段符号化
5.4.4 分级色彩符号化
5.4.5 分级符号化
5.4.6 比例符号化
5.4.7 点密度符号化
5.4.8 统计图表符号化
5.4.9 双值符号化
5.4.10 多比例尺符号化
5.5 地图整饰
5.5.1 添加图例
5.5.2 添加指北针
5.5.3 添加比例尺
5.5.4 添加地图格网
5.6 制图模板
5.7 空间参考
5.7.1 创建空间参考
5.7.2 同一基准面的坐标转换
5.7.3 不同基准面的坐标转换
5.8 打印输出
5.8.1 打印设置
5.8.2 打印预览
5.8.3 打印
5.8.4 地图输出
5.9 本章小结
第6章 空间数据编辑
6.1 简 介
6.1.1 操作步骤
6.1.2 实现思路
6.1.3 代码说明
6.2 编辑对象
6.2.1 几何对象
6.2.2 DisplayFeedback对象
6.3 开始编辑
6.3.1 IEngineEditor接口介绍
6.3.2 功能实现
6.4 设置编辑图层
6.4.1 IEngineEditLayers接口介绍
6.4.2 功能实现
6.5 设置编辑任务
6.5.1 IEngineEditTask接口介绍
6.5.2 功能实现
6.6 编辑操作
6.6.1 选择要素
6.6.2 移动要素
6.6.3 添加要素
6.6.4 删除要素
6.6.5 撤销操作
6.6.6 恢复操作
6.7 节点编辑
6.7.1 移动节点
6.7.2 添加节点
6.7.3 删除节点
6.8 属性编辑
6.9 保存编辑
6.10 结束编辑
6.11 本章小结
第7章 矢量数据空间分析
7.1 空间拓扑分析
7.1.1 相关类与接口
7.1.2 实例详解——缓冲区分析
7.1.3 实例详解——获取多边形要素边界
7.2 空间关系运算
7.2.1 相关类与接口
7.2.2 实例详解——查找一多边形要素的所有邻接要素
7.3 叠加分析
7.3.1 相关类与接口
7.3.2 实例详解——两相交面图层的裁剪分析
7.4 数据格式转换
7.4.1 相关类与接口
7.4.2 实例详解——将Shapefile数据导入File Geodatabase中
7.4.3 实例详解——通过数据解析方式实现Shapefile数据转CAD
格式数据
7.5 添加X、Y数据
7.5.1 相关类与接口
7.5.2 实例详解——将带有X、Y字段的Excel数据表转化为点数据
7.6 使用GP工具进行空间分析
7.6.1 相关类与接口
7.6.2 实例详解——利用GP工具实现缓冲区分析
7.6.3 实例详解——利用GP工具实现Shapefile数据转CAD数据
7.7 本章小结
第8章 栅格数据空间分析
8.1 环境设置
8.2 空间插值
8.2.1 反距离权重法
8.2.2 克里金法
8.2.3 样条函数法
8.2.4 趋势面法
8.2.5 自然邻域法
8.3 栅格表面分析
8.3.1 坡度计算
8.3.2 坡向计算
8.3.3 等值线计算
8.3.4 填挖方计算
8.3.5 山体阴影
8.3.6 曲率计算
8.3.7 可见性分析
8.4 栅格计算
8.4.1 IMathOp接口
8.4.2 ITrigOp接口
8.4.3 ILogicalOp接口
8.4.4 IBitwiseOp接口
8.5 栅格统计
8.6 密度分析
8.6.1 核密度分析
8.6.2 线密度分析
8.6.3 点密度分析
8.7 提取分析
8.7.1 按属性提取
8.7.2 按掩模提取
8.7.3 按形状提取
8.8 距离分析
8.8.1 欧氏距离
8.8.2 成本距离
8.8.3 成本路径
8.8.4 廊道分析
8.9 重分类
8.9.1 使用表重分类
8.9.2 使用ASCII文件重分类
8.9.3 分割
8.10 条件分析
第9章 管网网络分析
9.1 几何网络
9.1.1 几何网络元素
9.1.2 逻辑网络
9.1.3 几何网络属性
9.2 显示网络流向
9.2.1 相关类与接口
9.2.2 实例详解
9.3 网络追踪分析
9.3.1 相关类与接口
9.3.2 实例详解
9.4 爆管分析
9.4.1 实例详解
9.5 本章小结
第10章 交通网络分析
10.1网络数据集
10.1.1网络元素
10.1.2网络连通性
10.1.3网络属性
10.2最短路径分析
10.2.1相关类与接口
10.2.2实例详解
10.3查找服务区分析
10.3.1相关类与接口
10.3.2实例详解
10.4 设施点分析
10.4.1相关类和接口
10.4.2实例详解
10.5OD成本矩阵分析
10.5.1相关类和接口
10.5.2实例详解
10.6多路径配送分析
10.6.1相关类和接口
10.6.2实例详解
10.7位置分配分析
10.7.1相关类和接口
10.7.2实例详解
10.8本章小结,
11 三维分析
11.1 三维数据模型
11.1.1 3D要素数据
11.1.2 表面数据
11.2 Multipatch
11.2.1 Multipatch创建
11.2.2 Multipatch编辑
11.2.3 Multipatch分析
11.3 实例:基于Multipatch的地质钻孔三维可视化
11.4 TIN数据
11.4.1 加载TIN数据
11.4.2 TIN数据创建
11.4.3 TIN表面分析
11.5 实例:基于多层TIN的地层三维可视化
11.6 SceneControl三维可视化
11.6.1 三维数据加载
11.6.2 三维地图浏览
11.6.3 三维地图识别
11.6.4 遥感影像图与三维地形叠加
11.6.5 矢量图层与地形叠加
11.6.6 三维动画
11.7 GlobeControl三维可视化
11.7.1 三维数据加载
11.7.2 三维地图工具
11.7.3 三维效果
11.8 实例:基于GlobeControl的三维数字校园
12 Esri杯中国大学生GIS软件开发大赛一等奖获奖作品分析
——崂山森林火灾扩散模拟分析与决策系统
12.1 系统功能介绍
12.1.1 系统开发与运行环境
12.1.2 系统总体功能设计
12.1.3 系统登录
12.1.4 基本功能模块
12.1.5 数据管理模块
12.1.6 预报分析模块
12.1.7 火场模拟模块
12.1.8 辅助决策模块
12.1.9 损失评估模块
12.2 数据准备
12.3 代码阅读指南
12.3.1 DevExpress界面库
12.3.2代码组织与说明
12.4 加上如何配置运行程序

ArcGIS Engine开发之地图基本操作

ArcGIS Engine开发中数据库的加载

1、加载个人地理数据库数据

个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据的存储和管理,它将不同的数据统一纳入Access文件中,便于数据的管理与迁移,容量限制为2GB。个人地理数据库支持单用户编辑,不支持版本管理。在进行ArcGIS软件操作和开发的学习过程中,一般建议采用个人地理数据库进行数据的 组织和存储,同时也便于直接导到ArcSDE空间数据库中。加载个人地理数据库的用到的接口为:IFeatureDataset、IEnumDataset。

1.IFeatureDataset接口:继承自IDataset接口,在其基础上增加一个 创建要素类的功能CreateFeatureClass。

2.IEnumDataset接口:用于访问个人地理数据库中的所有数据集成员,有Reset和Next两个方法。Reset方法重置数据集序列,使指针位于第一个数据集之前;Next方法获取枚举序列的 下一个数据集。

实现的思路:

1)床架AccessWorkspaceFactory类的实例。

2)用IWorkspaceFactory接口的OpenFromFile方法打开.mdb数据集的工作空间,对工作空间里面的数据进行加载。

 

代码1:对加载数据库的方法进行函数封装

 #region
        //封装加载空间数据库方法:AddAllDataset函数,以便对其他空间数据库加载时直接调用。
        private void AddAllDataset(IWorkspace pWorkspace, AxMapControl mapControl)
        {
            IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);
            pEnumDataset.Reset();
            //将Enum数据集集中的数据一个一个地读到dataset 中
            IDataset pDataset = pEnumDataset.Next();
            //判断数据集是否有数据
            while (pDataset != null)
            {
                if (pDataset is IFeatureDataset)//要素数据集
                {
                    IFeatureWorkspace pFeatureWorkspac = (IFeatureWorkspace)pWorkspace;
                    IFeatureDataset pFeatureDataset = pFeatureWorkspac.OpenFeatureDataset(pDataset.Name);
                    IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;
                    pEnumDataset1.Reset();
                    IGroupLayer pGroupLayer = new GroupLayerClass();
                    pGroupLayer.Name = pFeatureDataset.Name;
                    IDataset pDataset1 = pEnumDataset1.Next();
                    while (pDataset1 != null)
                    {
                        if (pDataset1 is IFeatureClass)//要素类
                        {
                            IFeatureLayer pFeatureLayer = new FeatureLayerClass();
                            pFeatureLayer.FeatureClass = pFeatureWorkspac.OpenFeatureClass(pDataset1.Name);
                            if (pFeatureLayer.FeatureClass != null)
                            {
                                pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
                                pGroupLayer.Add(pFeatureLayer);
                                mapControl.Map.AddLayer(pFeatureLayer);
                            }
                        }
                        pDataset1 = pEnumDataset1.Next();
                    }
                }
                else if (pDataset is IFeatureClass)//要素类
                {
                    IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;
                    IFeatureLayer pFeatureLayer = new FeatureLayerClass();
                    pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset.Name);
                    pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
                    mapControl.Map.AddLayer(pFeatureLayer);
                }
                else if (pDataset is IRasterDataset)//栅格数据
                {
                    IRasterWorkspaceEx pRasterWorkspace = (IRasterWorkspaceEx)pWorkspace;
                    IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(pDataset.Name);
                    //影像金字塔的判断和创建
                    IRasterPyramid3 pRasterPyramid;
                    pRasterPyramid = pRasterDataset as IRasterPyramid3;
                    if (pRasterPyramid != null)
                    {
                        if (!(pRasterPyramid.Present))
                        {
                            pRasterPyramid.Create();//创建金字塔
                        }
                    }
                    IRasterLayer pRasterLayer = new RasterLayerClass();
                    pRasterLayer.CreateFromDataset(pRasterDataset);
                    ILayer pLayer = pRasterLayer as ILayer;//进行继承
                    mapControl.AddLayer(pLayer, 0);
                }
                pDataset = pEnumDataset.Next();
            }
            mapControl.ActiveView.Refresh();
            //同步鹰眼
            // SynchronizeEagleEye();
        }
        #endregion

代码2:调用个人地理数据库

  ////加载个人地理数据库
            OpenFileDialog pOpenFileDialog = new OpenFileDialog();
            pOpenFileDialog .Title ="打开PersonGeoDatabase文件";
            pOpenFileDialog.Filter = "Personal GeoDatabase(*.mdb)|*.mdb";
            pOpenFileDialog.ShowDialog();
            string pFullPath = pOpenFileDialog.FileName;
            if (pFullPath == "") return;
            AccessWorkspaceFactory pAccessWorkspaceFactory = new AccessWorkspaceFactoryClass();
            //获取工作空间
            IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(pFullPath ,0);
            ClearAllData();
            AddAllDataset(pWorkspace,mainMapControl );

2.加载文件地理数据库

文件地理数据库(File GeoDatabase)是以文件夹形式存储各种类型的GIS数据集,可以存储查询和管理空间数据和非空间数据,支持地理数据库的大小为1TB,在不使用数据库管理系统的情况下能够扩展并存储大量的数据,是继个人地理数据库之后esr推出的新的数据管理系统。文件地理数据库支持单用户编辑,不支版本管理。

实现的思路:

1)由于文件地理数据库是以文件夹的形式存在的,因此可以使用FolderBrowserDialog选择文件夹进行加载。首先创建FileGDBWorkspaceFactoryClass类的实例。

2)使用IWorkspaceFactory接口的OpenFromFile方法打开文件地理数据库的工作空间,对工作空间中的文件夹进行加载。

////加载文件地理数据库数据
            FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog();
            if(dlg.ShowDialog ()!=DialogResult .OK ) return ;
            string pFullth=dlg.SelectedPath ;
            if(pFullth =="") return ;
            //使用esri.arcgis.DataSourseGDB
            FileGDBWorkspaceFactory pFileGDBWorkspaceFactory=new FileGDBWorkspaceFactoryClass();
            ClearAllData ();
            //获取工作空间
            IWorkspace pWorkspac=pFileGDBWorkspaceFactory .OpenFromFile (pFullth ,0);
            AddAllDataset (pWorkspac,mainMapControl);

3.加载ARCSDE空间数据库数据

ArSDE(Spatial Database Engine空间数据库引擎)是在现有的关型数据库上进行的空间扩展,它使空间数据能保存在关系数据库中(如oracle,sqlserver中)ArcSDE空间数据库的一个重要的特点就是支持多用户并发操作,并且可以通过版本来表现空间数据编辑的状态。当完成数据编辑后,可将多人的编辑状态进行版版本合并,若多个用户对同一个要素进行了编辑,且编辑的状态不一样,将会出现“版本冲突”,提示用户采用哪一版本的数据。版本最后确定取决于用户对于数据管理的权限。

1、ArcSDE的组成

由ArcSDE服务管理进程、专用服务器进程、ArcSDE客户端三部分组成。

ArcSDE服务器管理进程负责维护ArcSDE和监听来自客户端的链接请求。ARCSDE启动就是ArcSDE服务器管理进程,利用管理员账户管理ArcSDE与RDBMS的连接,处理客户端的连接请求。

专用服务器进程由ArcSDE服务器管理进程创建,用于每一个特定的客户端应用程序与数据库的连接。

ArcSDE客户端通过ArcSDE服务器管理进程和专用服务器进程建立和RDBMS的连接,实现对数据库的操作。

2ArcSDE数据库的连接方式

ArcSDE提供了应用服务器连接和直接连接两种连接方式。当服务器性能较好时可采用应用服务器连接,否则采用直接连接,为了减轻服务器的压力,建议采用直接连接的方式进行连接。

应用服务器连接和直接连接的主要区别是属性参数的设置不同:

1)应用服务器连接参数的设置

服务器(Server):SDE服务器的主机名称。

数据库实例(Instance):安装SDE时选择的端口,默认为5151或esri_sde。

数据库(DataBase).根据不同的DBMS决定是否填写。Oracle系列不用填,而SQlServer需要填写。

用户名(Usename):需要填写

密码(Password):需要填写。

2)直接连接的参数设置

服务器(Server):不用填写

数据库实例(Instance):SDE数据类型,例如:如果是Oracle 11g,则为SDE:Oracle:11g:Orcl。其中orcl为数据库的服务名。

数据库(Database):根据不同的DBMS决定是否填写。

用户名(Username):需要填写

密码(password):需要填写

3)两种连接方式的异同

直接连接就是通过ArcSDE访问数据库,并在本地完成对数据库的各种操作(如空间分析、编辑等):而应用服务器连接就是通过ARCSDE访问数据表后,在服务器端完成对数据的各种操作,再把操作结果返回客户端。因此,即便服务器上SDE服务没有启动,采用直接连接的方式也可以直接访问和操作SED数据库,而应用服务器连接只有在SDE服务器启动后才能访问和操作SDE数据库。

SDE 数据库的加载主要用到IPropertySet接口。属性几何(PropertySet)对象是一个专门用于设置属性的对象,它是一种【名称】——【值】对应的集合,类似于哈希表或字典。

4)实例程序的思路:

① 创建SdeWorkspaceFactoryClas类的实例。

②通过SDE连接的连接属性打开SDE数据库的工作空间,对工作空间里面的数据进行加载。

 private void btnFileDatabase_ItemClick(object sender, ItemClickEventArgs e)
        {
            ////加载文件地理数据库数据
            FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog();
            if (dlg.ShowDialog() != DialogResult.OK) return;
            string pFullth = dlg.SelectedPath;
            if (pFullth == "") return;
            //使用esri.arcgis.DataSourseGDB
            FileGDBWorkspaceFactory pFileGDBWorkspaceFactory = new FileGDBWorkspaceFactoryClass();
            ClearAllData();
            //获取工作空间
            IWorkspace pWorkspac = pFileGDBWorkspaceFactory.OpenFromFile(pFullth, 0);
            AddAllDataset(pWorkspac, mainMapControl);
        }
        /// <summary>
        /// 服务器连接,以Oracle数据库为例
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnaddSDEByServer_ItemClick(object sender, ItemClickEventArgs e)
        {
            IWorkspace pWorkspace;
            pWorkspace = arcSDEWorkspaceOpen("192.168.70.110", "esri_sde", "sde", "sde", "", "SDE.DEFAULT");//调用定义的函数

        }
        /// <summary>
        /// 定义函数arcSDEWorkspaceOpen(),用于连接数据库
        /// </summary>
        /// <returns></returns>

        private IWorkspace arcSDEWorkspaceOpen(string server, string instance, string user, string password, string database, string version)
        {
            IWorkspace pWorkSpace = null;
            //创建和实例化数据集
            IPropertySet pPropertySet = new PropertySetClass();
            pPropertySet.SetProperty("SERVER", server);
            pPropertySet.SetProperty("SERVER", server);
            pPropertySet.SetProperty("INSTANCE", instance);
            pPropertySet.SetProperty("USER", user);
            pPropertySet.SetProperty("PASSWORD", password);
            pPropertySet.SetProperty("DATABASE", database);
            pPropertySet.SetProperty("VERSION", version);
            IWorkspaceFactory2 pWorkspaceFactory = new SdeWorkspaceFactoryClass();

            try
            {
                pWorkSpace = pWorkspaceFactory.Open(pPropertySet, 0);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return pWorkSpace;
        }
        /// <summary>
        /// 直接连接数据库
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnaddSDEByDriect_ItemClick(object sender, ItemClickEventArgs e)
        {
            IWorkspace pWorkspace;
            pWorkspace = arcSDEWorkspaceOpen("", "sde:oracle11g:orcl", "sde", "sde", "", "SDE.DEFAULT");
            //如果工作空间不为空,则进行加载
            if (pWorkspace != null)
            {
                AddAllDataset(pWorkspace, mainMapControl);
            }

        }

 

以上是关于ArcGIS Engine 地理信息系统开发教程的内容简介的主要内容,如果未能解决你的问题,请参考以下文章

《ArcGIS Engine+C#实例开发教程》第八讲 属性数据表的查询显示

ArcGIS Engine 10.2

《ArcGIS Engine+C#实例开发教程》第五讲 鹰眼的实现

《ArcGIS Engine+C#实例开发教程》第六讲 右键菜单添加与实现

《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步

《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现