扫描二维码,下载安卓APP
下载安卓APP箭头
客服QQ
箭头给我发消息

客服QQ:2698585038

ArcGIS Engine 地理信息系统开发教程

综合评级:
★★★★★

定价:
¥72.00

作者:
牟乃夏,王海银,李丹,高松峰,戴洪磊

出版社:
测绘出版社

出版日期:
2015年4月

页数:
556

字数:
865000

ISBN:
9787503035753

书籍介绍

本书基于ArcGIS Engine 10,以C#.NET 2010为开发语言进行讲解。内容包括ArcGIS Engine编程基础、GIS应用软件的开发方式、地图基本操作、查询统计、地图制图、数据编辑、空间分析、管网几何网络分析、交通网络分析、三维分析等。本书配有大量具有实际背景的编程案例,并给出实现思路和代码详解,随书光盘中包含所有实例的源代码和数据,供读者对照练习。

本书强调实用性、全面性和实战性,案例丰富、由易及难、便于自学,可作为高等学校GIS、测绘工程、RS等测绘类专业本科生和研究生的教材。

作者简介

牟乃夏(1973-),男,博士、博士后,山东科技大学测绘学院副教授,山东省基础地理与数字化技术重点实验室副主任。已主持和参与国家863项目、国家自然科学基金、国家科技支撑计划、国家重大科技专项以及中国博士后科学基金、山东省自然科学基金等国家和省部级科研项目及横向项目数十项。发表文章40余篇,出版教材2部,申请专利2项,获得软件著作权40余项。目前主要从事基于大数据的空间数据挖掘、智慧城市等方向的理论与应用研究以及GIS行业应用软件(城市管线GIS、环保GIS和应急决策GIS等)的研发工作。

目录

第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.3 Esri开发方式简介

1.3.1 AML语言开发方式

1.3.2 Avenue语言开发方式

1.3.3 MapObjects开发方式

1.3.4 VBA开发方式

1.3.5 ArcObjects开发方式

1.4 对象模型图

1.4.1 对象模型图中的类与接口

1.4.2 查看OMD图

1.5 ArcGIS 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 使用Addin进行桌面软件开发

2.3.1 Addin开发方式

2.3.2 Addin的安装部署

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 条件分析

8.11 本章小结

 

第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.4.2 实例程序

......

前言

桌面GIS、WebGIS和移动GIS是GIS软件开发的三种模式。桌面GIS的功能更为丰富,软件设计更加灵活,加之历史溯源,GIS软件开发的初学者往往都是从桌面GIS的开发入门,这也符合软件开发的一般学习规律。具体到ArcGIS的开发,就需要学习者从ArcGISEngine入手。由于ArcGIS的桌面、服务器和移动端是采用一套ArcObjects构建的,因此在掌握了ArcGISEngine的开发思路和开发接口以后,就会很容易地过渡到WebGIS和移动GIS的开发上来。同时,由于基于ArcGISEngine进行二次开发已经成为业界桌面GIS开发的事实上的标准,因此GIS行业的开发者大都是从学习ArcGISEngine开始的。

地理信息科学专业学生的专业技能往往被简单描述为,掌握GIS的基础理论(可以理解为本科所学的理论课程),掌握一门GIS软件(往往特指ArcGIS),学会使用一种语言进行GIS软件开发(基于ArcGISEngine使用C#语言开发是最常见的方式)。以作者多年的教学经验来看,绝大多数学生经过四年的学习能够基本掌握GIS的理论知识,大部分学生能够熟悉ArcGIS软件的操作,但是只有少数学生能够掌握ArcGIS软件的开发。这是因为,一个专业的所有理论课程是一个前后衔接、互相支持的体系,当所有课程学完这个体系也就比较容易建立起来。ArcGIS软件尽管体系庞大,学习有一定难度,但它是专业理论知识的体现和印证,经过多次练习也是能够掌握其操作过程的。软件开发不仅需要熟悉编程语言,熟悉ArcGISEngine纷繁芜杂的接口,还要熟悉软件架构与软件设计的有关知识,而且软件开发具有一定的灵活性和创造性,使得学习难度加大,导致学生普遍存在畏难心理。由此,尽管存在强烈的学习愿望,实践上却往往停留在语言的语法学习和ArcGISEngine的接口学习层面上,一遍遍翻阅书本却不去写下一行代码,导致眼高手低、心有余而力不足。当然缺少一本合适的参考书也是一个重要的因素。

本书站在学生的角度,面向工程的实际应用,充分兼顾不同层次读者的知识结构和知识水平来设计。具有权威性、全面性和实战性,由易及难、由浅入深、循循善诱、内容丰富,既使基础比较薄弱而又有强烈的ArcGISEngine开发欲望的读者容易入门,又使具有一定基础的读者有提高水平的余地。

全书分为4篇12章。第1篇是入门篇,包括第1~2章,在总体上介绍了ArcGISEngine编程的基本概念和开发桌面GIS应用软件的几种不同的方式。第2篇是数据篇,包括第3~6章,主要讲解地图的基本操作、空间查询与统计、地图制图和数据编辑等。这一部分内容是任何一个GIS系统都必须具备的功能。第3篇是分析篇,包括第7~11章,主要讲解矢量和栅格数据空间分析、几何网络分析、交通网络分析和三维分析等内容。第4篇是实例篇,包括第12章,介绍了Esri杯全国软件开发大赛总决赛一等奖的获奖作品,并提供了全套的源代码,供读者学习参考。

在学习过程中,建议所有读者都读一下第1章和第2章,从总体上了解ArcGISEngine编程的概念和方法。第2章介绍的ArcGIS二次开发的历史有助于读者了解ArcGISEngine的由来,便于更好地理解ArcGISEngine的程序设计与架构。第3章是地图的基本操作,包括数据加载、地图浏览、量测、书签、数据视图和布局视图、鹰眼和图层控制等内容。这一章是初学者必须认真学习的章节。一是该章内容是所有GIS软件必备的,二是该章接口较少、相对简单,便于自学。从未进行过编程的读者,建议将这一章的代码按照光盘逐字逐句地重新敲一遍,以体会软件编译与简单调试的技巧。第4章查询与统计对应于ArcGIS的选择菜单,包括属性查询、空间查询和图形查询,还包括选择集的设置和统计分析等功能。第5章介绍地图的样式与符号化、专题制图、地图整饰等内容。第6章数据编辑以一个编辑流程的操作顺序为主线进行空间数据编辑的详细讲解。这几部分内容是一个GIS软件的功能框架,如果读者特别是在校学生熟练掌握这些内容,也就能算一个基本合格的GIS程序员了。空间分析篇的内容有一定的深度,读者可以根据需要有选择地学习。第7章矢量分析介绍了空间拓扑和空间关系、叠加分析、数据格式转换、添加XY 数据和使用GP工具进行分析等内容。第8章栅格分析的内容对应于ArcGIS的空间分析,可实现空间插值、填挖方的计算、密度分析等工程中常用的功能。鉴于广大读者对网络分析很感兴趣,而现有的教材和参考书对这一部分往往语焉不详,或者概念不甚清楚。本书特意安排了第9章几何网络分析和第10章交通网络分析两章供读者甄别学习,几何网络分析主要解决城市管线的网络分析,对应于ArcGIS的UtilityNetworkAnalyst工具条;交通网络分析用于模拟现实世界的交通网络,对应于NetworkAnalyst工具条。第11 章三维分析介绍了MultiPatch 和TIN 的各种分析,还给出了SceneControl和GlobeControl进行三维可视化的方法,并给出了一个三维数字校园的综合实例,贴近学生生活,激发学习兴趣。第12章是Esri大赛全国总决赛一等奖的获奖作品,全部由在校本科生完成。读者特别是在校学生可以此为对照,看看自己的编程水平处在一个什么样的位置。在你认真学习完本书并掌握了本书的内容后,相信你的编程水平定会超过获奖作品的水平。

本书读者应该特别注意光盘代码和数据的配合使用。本书代码都经过严格测试,确保都能正确运行,如果在使用中发现不能正常运行的情况,首先应该检查自己的软件配置和数据情况,然后再去考虑代码是否存在错误。本书的代码来源于作者的长期积累,包括很多实际工程的代码,其中必然有来自于ArcGISEngine帮助和网上的代码,但是这些代码经过了多次加工,已无法溯源,也就无法一一标引。由此,尽管本书的代码大多来源于工程实践且具有很强的工程价值,但作者并不授权读者将这些代码应用于商业活动。同时在编入本书的过程中,为了方便读者的学习,减弱了很多代码的封装力度,但是考虑工程上往往具有较强的封装性,在本书的后几章中对代码进行了适度封装,读者要注意哪些函数是自己编写的,哪些函数是系统提供的。还有,不同章节在实现类似功能的时候,代码也不完全一样,作者刻意保留了这些差别,目的是使读者认识到同一个功能可以具有不同的实现方法,便于开阔视野、打开思路。

除了第3章建议从未编过程序的读者一个个字母敲入之外,当掌握了代码输入的基本技巧和熟悉了基本的调试方法后,其他章节的代码建议直接拷贝到自己的工程中,或者直接运行光盘的代码,在你体会到程序正确运行的喜悦的同时,也进一步激发了你学习编程的兴趣和克服困难的信心,这对于快速入门是大有裨益的。因为很多初学者都是在学习了较长一段时间后,发现自己的代码总是不能运行而慢慢地磨掉了学习的信心和乐趣,从而放弃学习编程的。

此外读者在学习ArcGISEngine编程的时候,要注意编程实现的功能和ArcGIS已有功能的联系。实际上,大多工程项目的功能如果不编写程序,仅仅使用ArcGIS也基本上可以满足要求,之所以还要编程,目的无非是更便捷化、智能化、个性化一些。在某种程度上来讲,编程序不就是把软件多次点击实现的功能合并成一次点击而实现吗? 在这种意义上说,读者要想学好编程,首先应该熟悉ArcGIS软件,在实现一些功能的时候,建议先在ArcGIS中操作一遍,看看它是如何设计和操作的,这将有助于优化代码编写和功能实现的流程。

为使本书博采众长,特意邀请了多个高校的教师和企事业单位的一线程序员参加编写。本书架构由山东科技大学的牟乃夏、戴洪磊,青岛市勘察测绘研究院的王海银,南阳师范学院的李丹,河南城建学院的高松峰、武汉理工大学的詹云军和济南大学的冯群等多次讨论确定并各负责了一部分内容的编写。参加本书编写的人员还有山东科技大学的张灵先、杨腾飞、王普乐、祝帅兵、张园园,青岛积成电子有限公司的李乃林,北京洛斯达科技发展有限公司的刘永涛,福建省地质测绘院厦门分院的洪平卫等。研究生骆川、杨佰义、张昌景、郭俏琳、赵雨琪、张娟、朱海川、徐玉静、赵明月等,对各章节的文稿和代码进行了反复的检查和测试。为了验证初学者,特别是在校本科生对本书的需求与期望,本科生林尚纬等人也对部分文稿进行了学习和编程,他们从一个初学者的角度提出了中肯的意见。测绘出版社的编辑为本书的出版付出了大量心血,在此一并表示衷心感谢!

本书从2012年开始规划和编写,由于体系庞大,参与人员众多,着实遇到了不少困难,加之我个人工作的羁绊、中途个别参编人员的更换,也曾有过放弃的念头。但此时我以山东省高级访问学者和博士后身份来到中科院地理所陆锋研究员的团队进行学习和科研,这个团队奋发向上的激情、精益求精的理念、团结务实的态度和孜孜以求的精神使我在各种困难中学会了坚持和坚强,也促使了本书的出版,再次特别向这个团队表示感谢和敬意!

尽管本书近90万字,但是依然不能全面阐述ArcGISEngine编程的所有内容。ArcGISEngine的帮助才是最全面、最丰富的编程知识库,读者在熟悉了ArcGISEngine的编程后,要学习和习惯使用它的帮助来完成本书没有覆盖的功能。

虽然本书编写用了两年半的时间,所有章节多次易稿,但由于我们水平所限,错误与不妥之处在所难免,敬请读者批评指正。读者的批评和建议请致信mounaixia@163.com,或者访问作者的新浪博客和微博@山东科大牟乃夏老师GISer,作者将不定期发布本书的勘误,读者的建议、意见和学习指导等。