中图网文创礼盒,买2个减5元
欢迎光临中图网 请 | 注册
> >>
地理信息系统底层开发教程

地理信息系统底层开发教程

作者:李响著
出版社:科学出版社出版时间:2016-06-01
开本: 26cm 页数: 299页
本类榜单:教材销量榜
中 图 价:¥65.6(8.3折) 定价  ¥79.0 登录后可看到会员价
加入购物车 收藏
运费6元,满69元免运费
?快递不能达地区使用邮政小包,运费14元起
云南、广西、海南、新疆、青海、西藏六省,部分地区快递不可达
本类五星书更多>

地理信息系统底层开发教程 版权信息

地理信息系统底层开发教程 内容简介

本书是根据作者近五年的教学经验总结的一本教材, 它主要面向地理信息系统专业本科生或研究生, 讲授如何通过程序语言实现地理信息系统的基本功能, 包括空间数据与属性数据的管理、分析及可视化等。全书内容均为底层开发, 不依赖于任何商业地理信息系统软件, 各种算法或数据操作方法均有详细介绍, 且深入浅出, 适合教师讲授或学生自学之用。

地理信息系统底层开发教程 目录

目录
丛书序
前言
第1章 一切从“●”开始 1
1.1 *简单的空间对象 1
1.2 让空间对象变成程序代码 2
1.3 **个迷你GIS 6
1.4 总结 10
第2章 更完整的类库 11
2.1 建立一个新的项目 11
2.2 空间对象体系 11
2.3 重新实现迷你GIS 16
2.4 总结 18
第3章 屏幕坐标与地图坐标 19
3.1 坐标系统 19
3.2 两种坐标之间的转换 21
3.3 再次更新迷你GIS 25
3.4 总结 28
第4章 制作可浏览的地图 29
4.1 地图缩放 29
4.2 地图平移 32
4.3 更丰富的迷你GIS 33
4.4 总结 35
第5章 从Shapefile中读取点实体 36
5.1 获得Shapefile白皮书 36
5.2 读取shp文件 37
5.3 图层的引入 42
5.4 更新的GIS 44
5.5 总结 48
第6章 从Shapefile中读取线和面实体 49
6.1 更完善的GISLine及GISPolygon 49
6.2 读取线与面shp文件 53
6.3 功能更加完善的GIS 56
6.4 总结 57
第7章 读取Shapefile中的属性数据 58
7.1 建立属性数据的字段结构 58
7.2 dbf文件驱动程序及读取 59
7.3 再次完善GIS 62
7.4 总结 64
第8章 读写自己的空间数据文件 65
8.1 数据类型与文件结构 65
8.2 写入文件头与图层名 66
8.3 写入字段信息 69
8.4 写入空间和属性数据值 71
8.5 读取自定义文件 74
8.6 测试读写过程 78
8.7 总结 78
第9章 点选点实体和线实体 79
9.1 建立一个选择的框架 79
9.2 点选点实体 82
9.3 点选线实体 84
9.4 测试点选功能 87
9.5 总结 88
第10章 点选面实体 89
10.1 建立点选面实体的框架 89
10.2 Include函数——判断点面位置关系 90
10.3 更友好的点选结果显示 93
10.4 总结 97
第11章 属性窗口与地图窗口的互动 98
11.1 **标识符 98
11.2 修改后的属性窗口 99
11.3 让彼此记住并认识 100
11.4 从地图窗口到属性窗口 101
11.5 从属性窗口到地图窗口 103
11.6 总结 105
第12章 更有效的显示方法 106
12.1 为什么会闪烁 106
12.2 用双缓冲解决闪烁问题 107
12.3 解决地图内容消失和变形的问题 108
12.4 加快显示效率 111
12.5 总结 112
第13章 鼠标的作用 113
13.1 定义鼠标的功能 113
13.2 鼠标按钮被按下 114
13.3 鼠标移动和抬起按钮 115
13.4 选择操作 117
13.5 放大操作 119
13.6 缩小操作 121
13.7 移动操作 122
13.8 切换鼠标功能 123
13.9 总结 125
第14章 多图层问题 126
14.1 地图文档类GISDocument 126
14.2 为GISDocument添加函数 127
14.3 添加与删除图层操作 129
14.4 调整图层显示顺序 132
14.5 存储操作 134
14.6 总结 136
第15章 地图窗口的简化 137
15.1 与地图窗口的联动 137
15.2 修改地图窗口 138
15.3 实现对图层管理对话框的调用 141
15.4 总结 143
第16章 开发一个集成的控件 144
16.1 扩大化的MyGIS 144
16.2 从Form1到GISPanel 145
16.3 测试GISPanel 146
16.4 总结 147
第17章 **值专题地图 148
17.1 GIS Thematic类 148
17.2 **值地图 151
17.3 扩充图层管理对话框 153
17.4 总结 156
第18章 独立值地图与分级设色地图 158
18.1 支持多种专题地图方式的图层定义 158
18.2 独立值地图 160
18.3 分级设色地图 163
18.4 支持专题地图的图层管理对话框 166
18.5 总结 170
第19章 栅格图层 171
19.1 栅格文件结构 171
19.2 扩充的图层类定义 172
19.3 针对新的图层类更新类库 176
19.4 构建栅格数据 182
19.5 总结 185
第20章 网络数据模型基础 186
20.1 基本的网络要素 186
20.2 建立拓扑关系 188
20.3 *短路径分析 190
20.4 展示分析结果 194
20.5 总结 195
第21章 操作网络数据模型 196
21.1 生成弧段及结点图层 196
21.2 单一文件多图层读写 198
21.3 网络分析对话框设计 200
21.4 实现对话框功能 203
21.5 总结 210
第22章 约简、纠错、完善与优化 211
22.1 关于图层名 211
22.2 关于保存图层 213
22.3 Peerchar的问题 216
22.4 解除dbf文件长度的限制 216
22.5 处理空值字段 217
22.6 提高文件读取效率 219
22.7 属性窗口的快速打开 221
22.8 纠正图层管理对话框的错误 222
22.9 避免无效显示 222
22.10 总结 224
第23章 空间索引的构建 225
23.1 空间索引基础 225
23.2 定义结点 226
23.3 开始种树 228
23.4 结点的插入 229
23.5 结点的分裂 232
23.6 树的调整 235
23.7 在图层中引入R-Tree 236
23.8 总结 240
第24章 空间索引的应用与维护 241
24.1 树的搜索 241
24.2 优化后的GISSelect 242
24.3 更快的图层绘制 245
24.4 树的存储 247
24.5 修改图层的索引选项 250
24.6 数据结点的删除 252
24.7 总结 254
第25章 空间参考系统 255
25.1 WGS 1984及UTM 255
25.2 单个点的坐标转换 256
25.3 空间实体坐标转换 259
25.4 带有空间参考系统的图层定义 261
25.5 图层坐标转换 265
25.6 总结 268
第26章 做*后的整合工作 269
26.1 真正的产品 269
26.2 “Hello World” 270
26.3 总结 271
附录:MyGIS类库说明 272
展开全部

地理信息系统底层开发教程 节选

第1章 一切从“●”开始 本章将介绍几个*基本的空间对象,以及如何用计算机语言把这些基本的空间对象编码成一个个的“类”,并组织到“类库”中去。不仅如此,还会基于类库,实现一个超级迷你GIS,它具有空间数据和属性数据的输入、显示及查询功能。 1.1 *简单的空间对象 作为本书正文的开篇,可以说一切从零开始,但本章题目中的“●”指的并不是“零”,而是指GIS中的“点”——一个零维的,也是*简单的空间对象。在现实世界中,并不存在一个“点”的对象,任何一个微小的地理实体,都是一个“体”,有长、宽、高。但是在计算机世界里,可以将一个与研究区面积相比起来尺寸非常小的面(在二维空间中)或体(在三维空间中)简单地表达成一个点对象。例如,在中国小比例尺国家地图中,可以用一个点来代表一个城市。 “点”对象非常简单,用两个或三个数字,或者说一个坐标对,就可准确地描述出这个对象在二维或三维空间中的位置。此外,点对象也是构成其他空间对象的*基本单元,由两个点可以构成一条线段,由多个有序的点可以构成一段折线或者一个面,同时,一个单独的点也可以是具有实际意义的一个空间对象,如前文所说的在一个小比例尺地图中用来代表城市的点。因此,从GIS的角度出发,总结定义了以下三种点对象。 节点(vertex):用于构成其他空间对象实体(feature),如线实体、面实体等,也可以指代空间中的任意一个位置。 结点(node):是节点的一种,仅指在构成折线实体的一系列有序节点集中的起始和终止节点。 点实体(point):由一个单独节点构成的空间对象实体。 其中,空间对象实体指的是能够代表一个客观世界实际存在的实体或现象(如一个校园、一座大楼、一条马路、一场台风经过的路径等)的计算机模型,其中点实体就是一种空间对象实体。其他还包括线实体、面实体等,如图1-1所示。 这里需要提醒的是,节点与结点并非一个空间对象实体,而是构成一个空间对象实体的重要元素。此外,节点与结点在以往的使用中经常被混淆,上述的定义把它们明确地区分开来,而一个*好的实例就是线实体。如图1-2所示,任何复杂、曲折或者光滑的线实体都是由节点构成的,如图中菱形和圆形的点,而其中圆形的点又是该线实体的端点,也即一种特殊的节点,被称为结点。结点在网络数据结构中具有重要的作用,将在今后相关章节中做进一步的讨论。 图1-1 点实体、线实体及面实体 图1-2 构成线实体的节点(菱形)和结点(圆形) 1.2 让空间对象变成程序代码 至此,开始启动VS,把上述的想法代码化。在运行VS之前,需要建立一个新的目录用来存放项目,例如,在D盘建立一个“GISBook”的目录,然后运行VS,选择“Visual C#”作为程序开发模板,建立一^个Windows窗体应用程序(Windows forms application),它会包含一个缺省的解决方案(solution)和一个缺省的项目,在该项目之下又有一些代码文件。对于一个复杂的工程来说,通常包含多个项目,每个项目又包括多个代码文件。在VS中,“解决方案”就指的是上述的工程。在本书中,希望把每节课的项目都放在一个统一的解决方案下,这样将比较容易管理。为此,将缺省的解决方案重命名为“AllLessions”,项目名称也改为“Lession_1”,文件存储位置指向新建的目录“D:\ GISBook”,如图1-3所示。 在图1-3的界面中点击【0K】,就正式进入了 VS的集成开发环境中。如图1-4所示,其中*醒目的“Form1”就是这个程序的初始图形界面,目前看来它还什么都没有,暂时不管它,因为需要先把之前提到的几个与点有关的空间对象代码化。 首先,需要建立一个文件用于存储这些代码。在解决方案资源管理器中,选择“Lesson_1”,点击右键,在菜单中选择“Add”,在接下去的菜单中选择“New Item ”,上述过程也可以通过快捷键“Ctrl+Shift+A”一步实现。如图1-5所示,在弹出的“Add New Item-Lesson_1”对话框中,选择“Code File”(代码文件),然后给出一个文件名,这里给的名字是“BasicClasses”,就是说这个代码文件将记录定义的一些基本类。 图1-3 建立**个VS程序 图1-4 **个程序的集成开发环境 在图1-5中点击【Add】按钮后,将出现一个空白的文本编辑器,用于编辑Lesson_1项目中的BasicClasses cs文件。请先把以下代码复制到编辑器中,之后会对它进行详细的解释。 图1-5 为Lesson_1添加一个新的代码文件 每一个C#代码文件都包括文件头及一个命名空间体(namespace),其中文件头用于列出需要引用的其他类库,在上述文件中还没有用到,而命名空间体就是用关键词 namespace及一对大括号括起来的代码,并且在namespace后面要给出一个名称,这个名称实际上就是包含在这个命名空间体中的所有类的“姓”,通过这个“姓”加上类名就可以比较方便地引用一个类。通过命名空间的方式可以比较容易地把各种类有效组织起来,便于管理和使用。在同一个项目中,不同的代码文件如果使用了同样的“姓”,那么在类之间的相互引用时就可以直接用类名,因为它们已经是同一家族的兄弟姐妹了。在本项目中,Form1.cs (在解决方案资源管理器中,选择“Form1.cs”,点击右键,在菜单中选择“View Code”即可看到该文件的代码)中的命名空间是“Lesson_1”,即项目的名称,在BasicClasses.cs中,定义了另外的命名空间,称为“MyGIS”。 在命名空间体中,为节点(vertex)及点实体(point)两个空间对象分别定义了两个类:GISVertex及GISPoint,其中GISVertex用于描述节点,而GISPoint表示点实体,至于结点(node),将在本书后续章节涉及网络数据结构时再加以介绍。在类名中加入“GIS”前缀的目的是便于与已有的C#类相区别。从GISVertex的类定义中可以很容易看出,双精度浮点数(double)变量x及y记录的是这个节点的坐标位置,而在GISPoint的类定义中仅包含一个GISVertex属性,用来记载这个点实体的位置。接下来继续定义线实体和面实体。 线实体:类名为GISLine,由一系列节点构成的空间对象实体。 面实体:类名为GISPolygon,同样由一系列节点构成,只不过代表的是一个闭合面。 根据上述描述,可以把以下代码添加到BasicClasses. cs文件中。 当将上述代码复制到代码文件中后,会发现List〈GISVertex〉下面出现了红色的波浪线,代表有错误发生。List是一个可变数组,尖括号中的类代表了这个数组中元素的数据类型,之所以出现了错误,是由于没有把包含List定义的类库添加到文件头中来,解决方法非常简单,只要把鼠标移到红色波浪线的前端,就会出现一个小的下拉菜单,点击其中的**项“using System. Collections.Generic;”,就能实现类库的自动添加。添加后,在namespace上面,就会出现如下内容。 类GISLine和GISPolygon定乂是一样的,都是记录一系列节点而已。关于GISPolygon有以下两点需要注意:首先是节点数量,例如,一个四边形,可以用四个节点记载,当然,也可以用五个节点,也就是说首节点和尾节点是一样的,出于节省空间考虑,可以仅用四个点来记载,就是要记住首节点和尾节点之间也存在一条边,但有时为了计算方便,也可以用五个点记载。其次是节点顺序,可以是顺时针记录,也可以是逆时针记录,这在一些计算中可能会产生不同的结果,如计算面积。所以,通常需要约定全部采用一种固定的方式。关于在本书中节点数量和顺序的考虑将在后续章节涉及面实体时具体讨论。 1.3 **个迷你GIS 基于目前定义的类,开发一个迷你GIS,它具有三个功能:①空间数据和属性数据的输入;②空间数据和属性数据的显示;③根据空间对象查询属性数据。为了尽快实现这一系统,约定目前只处理点实体对象,为此,要完善GISPoint的类定义,给它增加一些成员和函数,修改后的GISPoint类如下,其中新添加部分用粗体标出。 修改后的GISPoint类有很多错误提示,暂且不管,先解释一下相关的修改内容。成员 Location前面增加了一个public关键词,目的是让这个属性在类之外也可以被引用;Attribute是一个新的字符串类型的类成员,用来记录这个点实体的属性,它也有一个public 关键词修饰;“public GISPoint (GISVertex onepoint, string onestring)”是一个构造函数,也就是实例化(即新定义、新生成)一个点实体时需要运行的函数,每个构造函数前面必须加public前缀,而且不能有返回值(其实它有一个缺省返回值就是类实例本身),这个函数的作用就是给类的两个成员赋值;“public void DrawPoint (Graphics graphics)”的作用是画一个点实体,参数graphics是一个画图工具类,它具有很多画图的功能,是VS提供的标准类,这个函数实际上是以这个点实体的所在位置为圆心,以给定个数像素(这里是3)为半径画了一个红色的圆,具体函数调用方法的解释请参照C#的帮助文档。其中应注意到,x及y是来自于成员Location的,而Location是GISVertex类的一个实例,x、y均为double型数据,而graphics需要的输入参数是整数类型,因此需要用int函数来实现

商品评论(0条)
暂无评论……
书友推荐
本类畅销
编辑推荐
返回顶部
中图网
在线客服