杨 珩,张桂芬
(1.上海市测绘院,上海 200063)
基于全开源架构的互联网地图设计与应用
杨 珩1,张桂芬1
(1.上海市测绘院,上海 200063)
介绍了一种基于全开源架构的互联网地图解决方案;详细阐述了该架构所使用的技术栈,包括非关系型数据库、Web服务器、服务接口、前端架构及地图引擎等;并展示了全开源架构在互联网地图中的实际应用,总结了其优势和不足。
开源;互联网地图;Web架构;非关系型数据库
互联网地图是指登载在互联网上或通过互联网发送的基于服务器地理信息数据库形成的具有实时生成、交互控制、数据搜索、属性标注等特性的电子地图。随着互联网及移动互联网的蓬勃发展,社会公众及企事业单位对互联网地图的需求越来越大[1]。然而,在互联网地图的生产实践中,出现了许多新的技术问题,如用户网络环境复杂、系统高并发访问、运维与安全问题等。传统的IT或GIS架构在解决互联网地图的问题时存在瓶颈且过于笨重[2]。因此,需要设计新的适合互联网环境的解决方案。目前全球有超过400万软件工程师不断地为开源技术社区贡献宝贵源代码,积累了超过20万个开源软件产品,形成了一套成熟而完整的开源软件技术体系。网站服务器、移动操作系统、云计算及大数据等领域都离不开开源技术的支持。本文提出了一种基于全开源架构的互联网地图解决方案,它覆盖了开发中涉及到的云端服务层、数据层及浏览器表现层,且在项目实践中被证明是可行的。
云端服务器的软件架构如图1所示,包括操作系统、数据库、Web动态服务、Web服务器和API接口等。
图1 云端架构图
操作系统:Linux,常用版本有RHEL、CentOS、Ubuntu等,开发者可根据个人习惯选择合适的发行版。
数据库:非关系型数据库MongoDB。MongoDB是文档型、无模式的,因此具有分布性和高度可拓展性。与传统的关系型数据库相比,MongoDB能更好地应对互联网应用的需求变更,迁移与备份也更加灵活[3]。同时,利用MongoDB的空间特性,可以实现点、线、面等空间数据的存储及邻近分析等空间查询。利用MongoDB存储空间数据时,一定要建立空间索引。由于MongoDB的查询不是基于SQL语言,所以在进行多条件查询时,有时无法直观判断利用哪个索引效率更高,此时应借助Explain进行不同方案的比较。
服务器端:异步I/O平台Node.js,是一个基于Google V8引擎的JavaScript运行环境。它基于非阻塞的事件驱动机制,能轻松应对互联网应用高并发的环境。与传统的基于线程处理机制的Java/.NET等平台相比,Node.js吞吐能力更强,内存效率更高,单位时间内可处理更多链接请求。Node.js的另一优势是社区非常活跃,有大量的第三方库支持,本文所述架构利用Express框架快速搭建Web服务。当然,Node.js并不是万能的,它不适合CPU密集型计算,否则会导致请求无法响应;另外,它的异步机制在实现复杂的业务逻辑时会产生回调函数多级嵌套的问题,难以维护,推荐使用Promise模式解决此问题。
服务接口:RESTful。所有云端接口封装为RESTful API,数据交换格式为json。RESTful的接口方式简便、轻量级,且更加符合HTTP协议,在互联网上被用来替代基于SOAP的服务方案。开发人员可轻松使用 Ajax 和 RESTful API创建丰富的界面。
Web服务器:Nginx,是一个高性能的HTTP和反向代理服务器,相较于Apache、IIS具有占有内存少、稳定性高、并发服务能力强等优势。在Linux操作系统下,Nginx使用epoll事件模型,所以其效率非常高。本架构使用Nginx发布静态资源并建立缓存,对基于Node.js的动态服务进行反向代理,提高安全性。
前端架构(图2)基于SPA模式。SPA应用于页面初次加载时,获取全部的HTML、JavaScript及CSS,将所有业务逻辑集中到一个页面中完成,通过Ajax实现页面局部交互和刷新。因此,它可提供一种接近桌面应用程序的流畅用户体验。
图2 前端架构图
本文使用AngularJS结合Bootstrap开发SPA应用。AngularJS是一个由Google和AngularJS社区的开发人员维护的开源Web应用框架,支持HTML模板、路由、组件重用、依赖注入等诸多特性,可实现DOM操作和业务逻辑的松耦合,且可方便地向服务器获取RESTful请求。利用Bootstrap工具包可实现清爽风格的界面以及良好的交互效果。
在互联网地图应用中,地图渲染引擎是必不可少的,本文采用基于Openlayers构建的引擎。Openlayers库本身体积非常大,但得益于它的开源特性,可根据应用的需求专门定制一个轻量级的地图引擎库,将不需要的功能库剥离。另外,地图引擎库不应破坏SPA应用整体的MVVM架构。本文的做法是将地图引擎库封装为AngularJS的共享服务,所有需要与地图交互的DOM通过控制器以依赖注入的方式调用。
基于一系列从云端到客户端的开源技术栈,目前已经开发了多个互联网地图应用。例如,《上海市黄浦区便民服务电子地图》利用“天地图·上海”提供的基础地理信息资源[4],辅助规土部门为社会公众提供黄浦区的行政、医疗、文化、教育、公共服务等便民专题信息[5]。该应用的主要功能包括地图浏览、便民专题查询、地名地址查询、公交导航、周边查询、流量统计、运维日志监控等。应用界面如图3、4所示。
本文介绍了实现互联网地图的一种可行有效的全开源技术架构。实践证明,该架构具有以下优势:
①架构中使用的全是轻量级解决方案,灵活、可扩展,能适应互联网地图用户需求及使用环境的快速变化。②在服务器端使用异步I/O模型提高了应用在高并发环境下的吞吐能力,并通过Nginx反向代理的方式提升了安全性。③前端采用MVVM框架(AngularJS),节省了UI层DOM操作耗费的开发精力,且前后端使用相同的编程语言,缩短了开发周期,降低了后期维护难度。④整个架构是全开源方案,大幅节省了软件授权费用。
图3 应用首页界面
图4 应用主界面
在实践中,可根据具体问题调整其中个别技术。当然,该架构也存在一些不足,如SPA模式在移动互联网设备中表现不流畅,移动前端的相关技术方案还需优化,这将是下一步研究的重点。
[1] 周侗,龙毅.我国近期移动地图与互联网地图发展综述[J].地理与地理信息科学,2012,28(5)∶1-5
[2] 朱俊丰,赵俊三.基于开源平台的中小型WebGIS应用研究[J].地理空间信息,2008,6(1)∶92-94
[3] 王光磊.MongoDB数据库的应用研究和方案优化[J].中国科技信息,2011(20)∶93-96
[4] 李志刚.创新地理信息服务模式,打造网络地理信息服务民族优秀品牌[J].地理信息世界,2011(4)∶7-9
[5] 陈桂红,史亚巍,王飞程,等.政府部门互联网地图服务的现状与思考[J].地理信息世界,2014(3)∶18-22
[6] 孙剑.GIS的开源梦想[J].软件世界,2007(16)∶50-51
[7] 龚健雅,杜道生,李清泉,等.当代地理信息技术[M].北京∶科学出版社,2004
P208
B
1672-4623(2016)05-0069-02
10.3969/j.issn.1672-4623.2016.05.022
杨珩,硕士,主要从事网络地理信息系统的开发与应用工作。
2015-04-23。
项目来源:现代工程测量国家测绘地理信息局重点实验室开放基金资助项目(TJES1308)。