本书介绍开源WebGIS的基本原理与技术方法,选择了重要且技术成熟的开源GIS工具,包括MapServer、MapProxy、Leaflet等,并在第13章以自主开发的GISLite作为应用案例。作为应用方面的著作,本书对WebGIS技术体系进行了相对全面的介绍。书中内容侧重WebGIS地图发布与服务,从服务器的配置、发布到应用进行系统说明。并将技术与标准、规范进行融会贯通,在介绍技术的过程中与OGC、OSGeo等开放标准体系进行对应。原理与实例结合是本书特点,书中会用到一些数据与代码,这些资源都可以从配套网站中下载,并且网站上的内容也会有相应更新。
样章试读
目录
- 目录
前言
第1章 WebGIS 的概念与技术介绍 1
1.1 从地图到 WebGIS 2
1.1.1 地图与数字地图 2
1.1.2 数字地图的特点 3
1.1.3 WebGIS 的起源和发展 3
1.1.4 WebGIS 技术现状 5
1.1.5 WebGIS 的未来展望 7
1.2 WebGIS 的概念与特点 8
1.2.1 WebGIS 的概念 8
1.2.2 WebGIS 的特征 10
1.2.3 WebGIS 的功能和应用 10
1.2.4 WebGIS 的优点与缺点 12
1.3 开源 WebGIS 介绍 14
1.3.1 自由/开源软件 14
1.3.2 理解 FOSS 在网络地图中的应用 15
1.3.3 开源 WebGIS 的优势与特点 16
1.3.4 常见的开源 WebGIS 平台 17
1.4 开放数据和开放技术规范 17
1.4.1 开放式数据格式与开放数据 17
1.4.2 开放地理信息标准与规范 18
1.5 WebGIS 常用的数据格式 19
1.5.1 栅格数据文件格式 20
1.5.2 二进制存储矢量数据 20
1.5.3 文本存储矢量数据 21
1.5.4 空间数据库 23
1.6 阅读本书的注意事项 23
1.6.1 本书配套网站 24
1.6.2 本书示例与代码说明 24
1.6.3 网址使用说明 25
1.6.4 辅助工具介绍 26
第2章 MapServer 介绍与基本用法 28
2.1 MapServer 简介 29
2.1.1 MapServer 的发展历史 29
2.1.2 MapServer 的特点 30
2.1.3 MapServer 支持的数据格式 31
2.1.4 MapServer 的应用架构 32
2.1.5 MapServer 的两种运行模式 33
2.1.6 MapServer 和 GeoServer 的对比 36
2.2 Web 基础概念 36
2.2.1 HTTP 协议介绍 37
2.2.2 URL 的概念与规范 39
2.2.3 HTML 语言基础 40
2.3 MapServer 运行的 Web 技术环境 41
2.3.1 Apache Web 服务器 42
2.3.2 公共网关接口(CGI)的概念与技术 43
2.3.3 FastCGI 介绍 44
2.4 安装与配置 MapServer 44
2.4.1 安装与配置 MapServer 的基本要求 44
2.4.2 Debian/Ubuntu 系统下安装 MapServer 46
2.4.3 Debian/Ubuntu 系统下配置 Apache 47
2.4.4 Windows 下面安装与配置 MapServer 48
2.4.5 编译安装 MapServer 的说明 50
2.5 使用 MapServer 发布遥感影像 50
2.5.1 使用 MapServer 发布地图的步骤 51
2.5.2 在 Mapfile 中添加遥感影像 51
2.5.3 使用命令行工具 shp2img 生成结果 54
2.6 Mapfile 介绍 54
2.6.1 Mapfile 概述 55
2.6.2 Mapfile 的组成部分与配置步骤 55
2.6.3 Mapfile 中的主要对象 56
2.6.4 使用 Mapfile 的注意事项 58
2.7 Mapfile 的辅助工具 58
2.7.1 Mapfile 的编辑器 58
2.7.2 shp2img 命令行工具 59
2.7.3 mappyfile 解析工具 59
第3章 使用 MapServer 发布地图(1) 61
3.1 使用 MapServer 发布 DEM 栅格数据 61
3.1.1 栅格数据介绍 61
3.1.2 直接发布栅格数据 62
3.1.3 使用自动拉伸对数据进行预处理 63
3.1.4 根据属性值对栅格数据进行分类展示 65
3.1.5 在 MapServer 中控制地图范围 66
3.1.6 MapServer 的服务模式 67
3.2 通过 Web 查看地图 68
3.2.1 通过 HTTP 请求返回地图 68
3.2.2 通过 Web 浏览器查看结果 69
3.2.3 实时查看 Web 服务请求 70
3.2.4 Web 中的图层设计与交互元素 71
3.3 在地图中嵌入比例尺与图例 72
3.3.1 地图比例尺的概念 72
3.3.2 在 MapServer 中创建地图比例尺 72
3.3.3 地图图例的概念 74
3.3.4 在 MapServer 中创建图例 74
3.3.5 scalebar 与 legend 命令行工具 76
3.4 定义投影和范围 76
3.4.1 地图投影的概念及常用投影 76
3.4.2 使用 EPSG:4326 投影发布地图 78
3.4.3 在 Mapfile 中定义投影 79
3.5 在影像上标注文字 81
3.5.1 在 MapServer 中标注文字 81
3.5.2 MapServer 添加要素(Feature)定义 82
第4章 使用 MapServer 发布地图(2) 84
4.1 使用 MapServer 发布矢量数据 84
4.1.1 图层的概念 84
4.1.2 在 Mapfile 中定义矢量图层 85
4.1.3 使用两个图层的静态地图 87
4.1.4 数据的择舍显示 89
4.2 根据属性进行分类显示 91
4.2.1 MapServer 中分类展示的几种方法 91
4.2.2 使用字符串比较进行分类显示 92
4.2.3 使用正则表达式进行分类显示 93
4.2.4 使用列表表达式进行分类显示 95
4.3 基于逻辑表达式的分类显示 96
4.3.1 MapServer 中逻辑表达式的数据类型 96
4.3.2 在 Mapfile 中使用逻辑表达式 97
4.3.3 MapServer 中支持的操作符 98
4.4 在地图中定义与使用符号与样式 98
4.4.1 在 MapServer 中定义符号 99
4.4.2 点状符号的定义 99
4.4.3 线状符号与样式的定义 104
4.4.4 面状符号定义 107
4.4.5 在 MapServer 中使用自定义符号 109
4.5 对地图进行文字标注 110
4.5.1 Mapfile 中的字体定义 110
4.5.2 MapServer 文字标注功能 110
4.5.3 地图标注实例 115
4.5.4 标注的自动调整 116
4.5.5 文字标注的其他问题 116
4.6 定义 MapServer 输出格式 117
4.6.1 在 Mapfile 中定义输出格式 117
4.6.2 对比查看不同的输出结果 120
4.6.3 配置 MapServer 返回数据 121
第5章 创建交互式地图应用 123
5.1 MapServer 交互操作:CGI 变量及接口 123
5.1.1 MapServer CGI 程序处理流程 124
5.1.2 使用 MapServer CGI 程序的步骤 124
5.1.3 CGI 变量与模板文件 125
5.1.4 MapServer 初始化文件 125
5.1.5 配置 MapServer 临时文件夹位置 126
5.2 创建可交互地图:响应鼠标单击事件 127
5.2.1 在 Mapfile 中定义 Web 对象 127
5.2.2 创建初始化模板文件 128
5.2.3 MapServer 的模板文件定义 128
5.2.4 CGI 请求结果说明 130
5.3 MapServer 地图的缩放控制 132
5.3.1 控制比例尺优化地图内容 132
5.3.2 在 Mapfile 中定义比例尺可见内容 133
5.3.3 实现地图的放大与缩小 135
5.4 MapServer GGI 图层开关控制 136
5.4.1 控制图层开关的方法 136
5.4.2 HTML 模板文件中的定义 136
5.4.3 地图控制说明 138
5.5 使用 MapServer 参照地图 138
5.5.1 参照地图的概念 139
5.5.2 HTML 页面的定义 140
5.5.3 参照地图实例说明 140
5.6 使用独立比例尺与图例对象 142
5.6.1 比例尺控件的使用 142
5.6.2 图例控件的使用 143
5.7 在 MapServer 中进行属性查询 144
5.7.1 MapServer 的查询功能 145
5.7.2 使用查询功能 145
5.7.3 单图层检索模式 147
5.7.4 多图层检索模式 148
5.7.5 “查询地图”功能说明 149
第6章 OGC 与 OpenGIS 标准、规范及技术工具 151
6.1 WebGIS 服务介绍 152
6.1.1 Web 服务的概念与技术 152
6.1.2 地理信息服务 153
6.1.3 空间数据共享 154
6.1.4 空间信息 Web 服务技术发展过程 155
6.2 OGC 标准介绍 156
6.2.1 Web 服务规范基础概念 157
6.2.2 WMT 项目与作用 157
6.2.3 OGC Web 服务介绍 158
6.3 OGC Web 服务与技术实践 159
6.3.1 OWS 服务体系 159
6.3.2 OWS 请求及版本协商 160
6.3.3 基本的 HTTP 请求规则 160
6.3.4 MapServer 支持的 OGC 标准 161
6.4 元数据的概念与应用 162
6.4.1 元数据的概念 162
6.4.2 OGC CSW 标准与 pycsw 工具 163
6.4.3 OWS 中的元数据功能概述 165
6.5 OWSLib 类库说明与安装 165
6.5.1 OWSLib 类库介绍 166
6.5.2 安装 OWSLib 类库 166
第7章 Web 地图服务(WMS)的概念与应用 167
7.1 Web 地图服务介绍 167
7.1.1 WMS 的概念 168
7.1.2 WMS 的技术优点 168
7.1.3 WMS 的基本功能 169
7.1.4 WMS 的主要接口 170
7.2 使用 MapServer 发布 WMS 170
7.2.1 MapServer 对 WMS 的支持 171
7.2.2 配置 MapServer 发布 WMS 171
7.2.3 访问 GetCapabilities 接口 172
7.2.4 功能元数据文档说明 173
7.2.5 使用 OWSLib 模块访问 GetCapabilities 接口 175
7.3 WMS GetMap 访问方法 176
7.3.1 MapServer 中配置支持 GetMap 接口 177
7.3.2 GetMap 请求参数说明 178
7.3.3 对 HTTP 方式的 GetMap 请求响应 180
7.3.4 使用 OWSLib 访问 GetMap 181
7.4 WMS 的 GetFeatureInfo 请求 182
7.4.1 GetFeatureInfo 接口说明 182
7.4.2 配置 MapServer 183
7.4.3 请求 GetFeatureInfo 185
7.4.4 使用 OWSLib 请求 GetFeatureInfo 186
7.5 分布式地图服务:使用 WMS 作为数据源 187
7.5.1 将 MapServer 用作 WMS 服务器端 188
7.5.2 MapServer 作为 WMS 客户端的配置 188
7.5.3 效果与说明 190
第8章 MapServer 中的样式定制与实现 191
8.1 SLD 标准介绍 191
8.1.1 SLD 介绍 192
8.1.2 SLD 技术细节 192
8.1.3 设计与使用 SLD 的方法 193
8.2 SLD 访问接口 193
8.2.1 访问 DescribeLayer 请求 194
8.2.2 访问 GetStyles 请求 195
8.2.3 访问 GetLegendGraphic 请求 195
8.2.4 客户端的访问方式 197
8.3 在 WMS 中使用内联样式层描述器:使用 SLD_BODY 参数 197
8.3.1 内联 SLD 请求示例 197
8.3.2 获取内联 SLD 图例 199
8.4 在 WMS 中使用样式层描述器:使用服务器端 SLD 文件 200
8.4.1 WMS 对 SLD 的支持 200
8.4.2 SLD 中线状效果 201
8.4.3 SLD 参数使用说明 202
8.5 使用命名样式绘制地图 203
8.5.1 MapServer 对命名样式(Named Styles)的支持 204
8.5.2 使用命名样式 205
8.5.3 多图层与多样式 206
第9章 Web 要素服务(WFS)的概念与应用 208
9.1 WFS 的基本概念 208
9.1.1 WFS 的功能介绍 209
9.1.2 WFS 的技术要求与接口 209
9.1.3 事务型 WFS 的概念 210
9.2 在 MapServer 中配置使用 WFS 210
9.2.1 配置 MapServer 支持 WFS 210
9.2.2 请求 WFS 的 GetCapabilities 接口 212
9.2.3 请求 WFS 的 DescribeFeatureType 接口 215
9.2.4 使用 OWSLib 访问 216
9.3 WFS 的 GetFeature 请求与响应 216
9.3.1 WFS 的 GetFeature 请求 216
9.3.2 限制请求的要素数目 217
9.3.3 根据 ID 请求单个要素 218
9.3.4 根据空间范围进行检索 219
9.4 在 WFS 请求中使用 Filter Encoding 219
9.4.1 Filter Encoding 标准规范 219
9.4.2 Filter Encoding 的三种操作符 220
9.4.3 MapServer 对 Filter Encoding 的支持 222
9.5 将 WFS 图层添加到 MapServer 地图文件 223
9.5.1 将 MapServer 用作 WFS 服务器 223
9.5.2 在 Mapfile 中进行客户端定义 223
9.5.3 通过浏览器查看结果 224
第10章 Web 覆盖服务(WCS)的概念与应用 226
10.1 Web 覆盖服务介绍 226
10.1.1 WCS 基本概念和特征 226
10.1.2 WCS 在数据共享与分发中的作用 227
10.1.3 WCS 的主要接口 227
10.2 在 MapServer 中定义与使用 WCS 228
10.2.1 配置 Mapfile 支持 WCS 229
10.2.2 访问 WCS 的 GetCapabilities 接口 229
10.2.3 访问 WCS 的 DescribeCoverage 接口 230
10.2.4 使用 OWSLib 访问 WCS 231
10.3 使用 GetCoverage 接口获取数据 233
10.3.1 访问 GetCoverage 方法 233
10.3.2 WCS 输出格式 234
10.4 GetCoverage 接口的更多参数与选项 235
10.4.1 定义空间投影参数 235
10.4.2 设置图像的返回尺寸 236
10.4.3 请求不同图像波段组合 237
10.4.4 设置空间分辨率 237
第11章 地图瓦片技术与应用:使用 MapProxy 239
11.1 地图瓦片的基本概念 239
11.1.1 地图瓦片的技术原理 240
11.1.2 地图瓦片的特点 241
11.1.3 地图瓦片的应用 241
11.1.4 地图瓦片使用的注意事项 242
11.1.5 矢量瓦片概念说明 243
11.2 地图瓦片的相关标准 243
11.2.1 创建与提供地图瓦片服务的策略 244
11.2.2 OSGeo WMS-C 标准 244
11.2.3 OSGeo TMS 标准 244
11.2.4 OGC WMTS 标准 245
11.2.5 不同地图瓦片标准的比较 245
11.3 MapProxy 安装与使用 246
11.3.1 MapProxy 介绍 246
11.3.2 安装与使用 MapProxy 247
11.3.3 启动 MapProxy 248
11.3.4 MapProxy 的配置方法 249
11.3.5 地图瓦片预生成 250
11.4 配置 MapProxy 提供地图服务 251
11.4.1 MapProxy 配置的基本要求 252
11.4.2 单图层的 MapProxy 简单示例 252
11.4.3 更多图层的配置 255
第12章 WebGIS 前端:使用 Leaflet 256
12.1 WebGIS 前端技术 256
12.1.1 选择 Web 制图应用程序 257
12.1.2 JavaScript 语言介绍 257
12.1.3 WebGIS 前端类库介绍 258
12.1.4 通用地图服务与接口 259
12.2 Leaflet 的基本用法 260
12.2.1 在 HTML 页面添加地图对象 260
12.2.2 Leaflet 中的几何要素用法 261
12.2.3 使用弹窗展示信息 261
12.2.4 用户事件处理 262
12.3 在 Leaflet 中使用 WMS 图层 262
12.3.1 使用 Leaflet 调用 MapServer 262
12.3.2 加载地图瓦片服务 263
12.3.3 WebGIS 中基础底图与专题图层的设计 264
12.4 在 Leaflet 中请求 WFS 264
12.4.1 使用 Leaflet 请求 WFS 的方法说明 265
12.4.2 Leaflet 加载 WFS 自定义样式 267
12.5 访问 MapProxy 的不同瓦片服务形式 268
12.5.1 访问 WMS-C 的方法 268
12.5.2 访问 TMS 的方法 268
12.5.3 访问 WMTS 的方法 269
第13章 GISLite 地理数据发布程序的设计与实现 271
13.1 GISLite 项目的开发背景与设计 271
13.1.1 GISLite 开发需求介绍 271
13.1.2 项目设计的基本思路 272
13.1.3 静态网站的优点 272
13.1.4 配置运行 GISLite 程序 273
13.2 GISLite 的实现概述 276
13.2.1 Web 程序的实现 276
13.2.2 地图发布信息的定义 276
13.2.3 GISLite 发布数据的目录结构设计 276
13.2.4 GISLite 代码结构 277
13.3 使用 XLSX 定义图层数据与样式 278
13.3.1 XLSX 文件格式与 Python 解析库 OpenPyXL 278
13.3.2 使用 XLSX 文件定义样式 279
13.3.3 解析 XLSX 说明 279
13.4 GISLite 中地图瓦片程序 280
13.4.1 GISLite 生成 MapProxy 配置文件 280
13.4.2 多图层、组合图层与系列数据的定义方法 281
13.5 使用 Jinaj2 模板生成静态网站 282
13.5.1 Python Web 开发简介 282
13.5.2 Web 模板 Jinja2 简介 282
13.5.3 利用 Jinja2 进行页面渲染 284
13.5.4 在 GISLite 中生成网站 285
13.6 使用 Sphinx 实现地图发布 285
13.6.1 Sphinx 工具介绍 285
13.6.2 利用 Sphinx 发布文档的步骤 285
13.6.3 使用 Sphinx 发布地图 285
13.7 生产环境部署说明 286
13.7.1 配置 Apache Web 服务器运行 GISLite 286
13.7.2 Supervisor 服务的安装与配置 287
索引 289