本书在综合考察和分析GIS发展现状的基础上,详细介绍了嵌入式GIS系统的设计与实现,内容几乎涉及了一个完整的嵌入式GIS系统的各个方面,包括典型嵌入式GIS系统的架构、GPS信号的接收与解析、矢量地图格式的设计原则、地图制作工具及地图引擎的设计与实现、GUI界面设计及导航地图显示、地图匹配算法、路径导航算法、服务器端详细设计、GPRS网络通信模块设计等。此外,本书还以2010年上海世博会的预研项目“水晶球”为例,在各章节中穿插介绍了一个实际的嵌入式GIS系统是如何从无到有,一步步设计并实现的。
本书既可作为高等院校GIS、嵌入式软件、测绘等相关专业的本科生或研究生教材,也可供公司、科研机构及事业单位在开发嵌入式GIS系统时参考使用。
GIS(地理信息系统)是一门新兴边缘学科,自20世纪60年代加拿大建立世界上第一个GIS实验室以来,GIS已经历40多年的迅速发展,如今已发展成为横跨地理学、测绘学、遥感学、资源学、环境学、图形学、计算机科学等多个学科的综合性学科,并广泛应用于国土管理、资源调查、环境评估、灾害预测、城市规划、交通运输、公共设施管理、农林牧业、商业金融等各个领域,涉及社会生活的方方面面。
自20世纪90年代以来,由于计算机技术、电子技术、通信技术等相关技术的发展,嵌入式系统作为传统计算机软件系统的一个分支,开始逐渐脱离桌面,广泛渗透到商业市场、国防军工以及汽车、家电、电子设备等领域。在这种大背景下,GIS系统也开始向嵌入式设备迁移,出现了所谓的“嵌入式GIS系统”。而且,随着无线网络的发展,开始有电信移动厂商基于其运营的网络(如GSM网、CDMA网)提出了LBS——即Location Based Service,基于位置的服务的概念,如2001年中国移动基于移动梦网推出的定位之星的服务。LBS是在电子地图平台的支持下,根据用户实际所处的位置为用户推出定制的移动增值服务。因此,LBS的核心就是用户的地理位置,很自然地,LBS就与嵌入式GIS系统结合起来,出现了专门为用户提供LBS服务的嵌入式GIS系统。另外,这类嵌入式GIS系统还需要一种定位手段,用来确定用户在电子地图上的位置,而定位的最佳选择,自然就是如今精确度越来越高且接收器被诸多嵌入式设备内置的GPS了。
因此,面对现实生活的需要,如何将LBS概念及GPS技术集成起来,开发一款运行于移动终端的嵌入式GIS系统,就成了许多公司和科研机构要考虑的问题。遗憾的是,市面上介绍传统桌面GIS系统的书籍和参考资料很多,介绍嵌入式GIS系统的却寥寥无几。恰好,笔者所在的上海交大软件学院嵌入式实验室接受上海市科委的委托,为2010年上海世博会开发一款移动增值信息服务平台,也就是“水晶球”项目。在开项目过程中,由于参考资料少,几经周折与辛苦后最终完成,在我们的开发过程中也颇有心得,因此想写作成书与大家分享。
本书由戚正伟博士策划并拟定大纲,正文由上海交大软件学院嵌入式系统实验室的“水晶球”项目组负责撰写,其中第1、2、5章及第4章地图显示部分由付国庆撰写,第3章由蔡松露撰写,第4章界面设计部分由钱吟撰写,第6章由张柏年撰写,第7章由黄锴撰写,第8章由冯立男撰写。本书还得到了尤晋元教授、宦飞副教授、清华大学出版社的热情帮助与大力支持,在此一并表示衷心感谢!
由于作者水平有限,加之时间仓促,书中不足之处在所难免,敬请广大读者朋友批评指正。
作者2009年2月于上海
第1章GIS系统介绍
1.1GIS系统的概念与发展历程
1.1.1GIS系统的概念
1.1.2国外GIS系统的发展历程
1.1.3国内GIS系统的发展历程
1.2GIS产品介绍
1.2.1MapInfo
1.2.2ArcGIS
1.3“水晶球”项目介绍
1.3.1项目概述
1.3.2项目目标
1.3.3项目涉众及用户
1.3.4项目产品总览
1.3.5产品特征
1.3.6用例模型
1.3.7架构设计
1.3.8其他产品需求
1.3.9完成概况
第2章GPS信号接收
2.1引言
2.2GPS系统介绍
2.2.1GPS产生的背景
2.2.2GPS系统组成
2.2.3GPS定位原理
2.3GPS手机介绍
2.4GPS信号接收——嵌入式Linux平台
2.4.1gpsd介绍
2.4.2启动并配置gpsd
2.4.3从gpsd中读取数据
2.5GPS信号接收——WinCE平台
2.5.1GPSID介绍
2.5.2GPSID的主要编程接口
2.5.3“水晶球”项目代码解析
第3章矢量地图
3.1引言
3.2矢量地图格式设计
3.2.1地图格式综述
3.2.2多维数据索引
3.3地图制作工具的设计与实现
3.3.1地图制作工具简介
3.3.2地图制作工具功能介绍
3.3.3地图制作工具的实现
3.3.4画图工具的实现
3.3.5类图
3.4地图引擎设计与实现
3.4.1地图引擎介绍
3.4.2设计原则
3.4.3架构
3.4.4实现
第4章界面设计
4.1引言
4.2GUI界面设计
4.2.1GUI设计目标
4.2.2嵌入式图形系统
4.2.3“水晶球”项目的环境搭建
4.2.4“水晶球”项目GUI设计
4.2.5界面设计小结
4.3地图显示
4.3.1地图显示概述
4.3.2中英文界面动态切换
4.3.3屏幕旋转
第5章地图匹配
5.1引言
5.2地图匹配问题概述
5.2.1地图结构相关术语
5.2.2地图匹配问题定义
5.2.3地图匹配算法的分类
5.3地图匹配方法介绍
5.3.1基于地图几何信息的地图匹配算法
5.3.2基于地图拓扑结构的地图匹配算法
5.3.3基于统计学和模糊理论的地图匹配算法
5.3.4综合性的地图匹配算法
5.3.5提高数据源的准确性
5.4一种新的综合性地图匹配方法
5.4.1PS Graph数据结构
5.4.2地图匹配算法
5.4.3匹配过程示例
5.4.4“水晶球”项目代码示例
第6章导航算法
6.1引言
6.2设计导航软件需要考虑的问题
6.3导航系统设计的目标
6.4经典的寻路算法介绍
6.4.1Dijkstra算法和广度优先搜索(BFS)算法
6.4.2A*算法
6.4.3用于网格地图的启发函数
6.4.4A*算法描述
6.4.5优先队列与最小堆
第7章服务器设计
7.1引言
7.2服务器设计
7.2.1服务器端架构
7.2.2消息格式及通信协议
7.3数据库
7.3.1SQL Server 2005简介
7.3.2数据库访问
7.4Socket网络通信
7.4.1Socket通信介绍
7.4.2服务端用户位置显示
7.4.3用户位置动态显示
7.5选址优化问题实现
7.5.1问题概述
7.5.2整体设计
7.5.3MATLAB编程实现
7.5.4CGAL计算几何算法库
7.5.5MATLAB积分计算
7.5.6地图的路径生成
7.5.7Voronoi图
7.5.8选址优化数学实现
第8章网络通信
8.1引言
8.2网络通信技术介绍
8.2.1无线接入技术
8.2.2网络Socket编程
8.2.3协议及消息格式
8.3通信模块设计
8.3.1通信模块系统总框架
8.3.2通信模块应用层软件框架
8.4核心源代码解析
8.5小结
参考文献