时空信息云平台开放性技术研究与实现
2016-01-24孙隆祥李成名
孙隆祥 李成名
(中国测绘科学研究院,北京100830)
1 引言
2014年,在国家发改委等八部门联合出台的《关于促进智慧城市健康发展的指导意见》中,对智慧城市给予了明确定义:“智慧城市是运用物联网、云计算、大数据、空间地理信息集成等新一代信息技术,促进城市规划、建设、管理和服务智慧化的新理念和新模式。”其中,空间地理信息作为整合城市人口、法人、经济、社会、文化等专题信息内容的城市基础性信息资源,在智慧城市建设中起到了基础支撑作用[1]。而时空信息云平台除了是承载这些空间地理信息的基础平台,也是各部门、各行业信息共享和交换的基础平台。因此,时空信息云平台建设相关技术的研究也成为目前智慧城市建设的重要方向之一。
时空信息云平台是以直观表达的全覆盖精细地理信息和时相地理信息为基础,面向泛在应用环境按需提供地理信息、感知定位及解译、功能软件和开发接口的服务[2]。与数字城市阶段的地理信息公共平台相比,智慧城市阶段时空信息云平台的建设,要以用户的需求为中心,体现泛在、实时、便捷、自主等特点,这就需要平台具有开放性,所提供的功能和服务都能够方便的进行扩展修改。鉴于,本文着重面向平台开放性这一需求,研究时空信息云平台作为开放平台的内涵、体系结构以及关键技术,同时对核心技术Open Map进行实现。
2 开放平台技术
智慧城市时空信息云平台由于其需要具备泛在、自主、实时等要求,其可以被视为一种面向GIS的开放平台。开放平台是指软件系统通过公开其应用程序编程接口(API)或函数,来使外部的程序可以增加该软件系统的功能或使用该软件系统的资源,而不需要更改该软件系统的源代码[3],如美国的 Facebook、Twitter、苹果等公司,国内的人人网、新浪微博、淘宝等,都是一种开放平台。
2.1 体系结构
典型的开放平台通常由基础设施、应用运行托管环境、开发者社区、应用商店和开发环境5个部分组成[4]。其中,基础设施和应用运行托管环境是系统中直接支持应用程序执行的部分,也是开放式平台实现的关键所在;开发者社区和应用商店则是为开发者提供开发指南和推广应用的必要手段。此外,开放平台还需要为用户提供开发环境,供用户离线开发程序,再将其进行部署。
基础设施部分主要实现服务资源的弹性配置,以及平台的运维服务管理,同时也方便平台将已有的服务接口开放或重新开发新的接口来为用户程序提供接口服务;应用运行托管环境是应用运行支撑环境的关键部分,负责完成应用逻辑处理、用户界面呈现及应用数据的查询和处理等工作,其重要目标之一是保证多个应用能够可扩展地同时在一个统一的平台上运行;开发者社区和应用商店为应用开发者提供SDK(Software Development Kit,软件开发工具包)的下载和安装服务,为用户开发提供指导;开发环境与传统的用户利用单机在本地进行开发类似,主要增加了对开放平台提供的功能接口的引入支持。
2.2 开放平台与Open API
API的全称是应用编程接口(Application Programming Interface),这一概念在计算机操作系统出现的早期就已经存在了。在互联网时代,把网站的服务封装成一系列计算机易识别的数据接口开放出去,供第三方开发者使用,这种行为就叫做开放网站的API,与之对应的,所开放的API就被称作Open API,使用API构建业务是实现开放式业务结构的关键技术。
Open API按照制定者与遵循者的关系可以简单划分成两个大类[5]:
①专有:一个API制定出来主要是为了制定者本身提供应用开发接口的目的,这样的API就叫做专有API,例如facebook的API。大部分的API制定之初都是专有API,极特别情况除外。
②标准:一个API称之为标准API,或者是制定者并不提供该API所定义的服务,它必须为成为业界标准而努力;或者是该API被业内很多服务提供者所遵循,例如RSS。即标准API的形成,一是因为业内形成事实标准,二是已经被标准化组织采纳。
要做开放平台,首先必须具备Open API,但开放了API并不等于就是开放平台。开放平台是以Open API为手段来使外部的程序可以增加该软件系统的功能或使用该软件系统的资源。Open API的类型由平台的性质决定的,在Open API的类别中,地图API应该是最独特的API之一,因为它为一维的文字信息提供了一个二维,甚至三维的载体。此外,在与人类生活息息相关的所有信息内容中,位置相关的信息占据了80%以上[6]。因此,国内外相关网站,如谷歌、雅虎、百度等纷纷开放了自己的地图API。
3 时空信息云平台开放性目标
地图是地理信息的载体,也是GIS应用最重要的容器之一。时空信息云平台的开放性,主要体现在GIS应用与功能的开放性,或者说在线地图的开放性,即Open Map。Open Map是指通过Open API的手段,将服务式GIS功能进行封装,形成符合一定标准的二次开发包,供第三方开发者使用,以满足不同用户的个性化功能需求和地理信息资源需求。
首先,时空信息云平台必须提供一个核心的开放式基础服务,即地图应用服务。通过后台的地图服务器实现所有的地图与GIS基础功能,如查询、统计、分析、路径规划、拓扑处理等,然后加这些服务进行封装打包,通过Open API和SDK的方式开放给用户,以进行实际的数据处理和应用功能的开发。
3.1 开放式界面
用户在进行专业应用系统搭建时,往往需要构建符合自己部门或行业的系统界面和外观,开放式时空信息云平台通过皮肤插件机制,将平台的展现方式开放给用户。一般的开放式界面包括三个方面:图片集合、字体风格、界面布局。图片集合指的是平台界面构建时所引用的所有图片资源的组合,按照一定的命名规则,平台可以动态进行加载和卸载;字体风格通过CSS样式表进行外部设置,以符合界面整体风格;界面布局通过将平台原子部件进行级别设定,以积木搭建模式实现任意组装。
3.2 开放式地图
地图是时空信息云平台的核心,位于整个平台框架的数据层,是支撑平台运行的必需资源。OpenGIS规范作为一个通用的分布式地理数据和地理处理数据源的软件结构规范,为全世界的软件开发者提供了一个详细的通用界面模板,这个模板可以与由其他软件开发者开发的开放式GIS软件进行交互操作,通过OpenGIS异构分布的数据可以实现互联互通与聚合,并将它们结合在一个集成式的操作环境中,其互操作性、可扩展性、可移植性、协同性等特点,为开放式地图的实现提供了规范与指导。
3.3 开放式功能
开放式时空信息云平台是一个动态模块化框架,提供了插件化支持、面向服务架构支持和插件扩展支持三大功能。通过Open API,应用开发商可以按照开放式时空信息云平台的插件机制,开发出各种各样的地图功能模块,对平台进行二次开发。插件间的通信基于轻量级的SOA模型,每一个插件都可以向服务总线注册服务,也可以从服务总线查询并获取需要使用的服务;每一个插件都可以通过定义扩展点向其他插件暴露扩展,并且每一个插件都可以对暴露扩展点的插件进行扩展从而在不改变原有插件代码下影响其行为。
4 时空信息云平台开放性实现方法
4.1 开发框架
本文采用Adobe Flash Builder4做为Open-Map SDK的集成开发环境,其可以帮助开发者快速开发跨平台的富互联网应用程序(RIA)和内容使用开源的Flex框架,并提供智能编码、调试、可视化设计和功能强大的测试工具。同时以中国测绘科学研究院的New MapServer4.0二次开发包New Map Flex API为例展示Open Map SDK的开发思路和方法。
设计的Open Map SDK采用模块化思想,对New Map Flex API中与Map对象的通信进行了进一步的封装,并提供了针对时空信息云平台的通用接口。在Open Map SDK中,可从零开始快速搭建应用模块,将编译得到的swf(shock wave flash,Flash专用格式)无缝集成到时空信息云平台中;也可将该SDK作为基本框架,在此之上开发各种应用系统。
现将工程结构简单描述如下:
①Index.mxml为SDK开发包主界面;②core为SDK通用代码文件夹,包括图片、样式、as文件、js文件以及php文件等。这些文件为SDK自带,一般不需要修改;③Map为用户开发文件夹。用户自行开发的功能模块都放在Map目录下的modules里,为便于管理,每个独立的模块需创建属于自己的文件夹,map_search和map_testsdk为两个不同的应用模块;④nm Map Module和nm ModuleContainer文件夹为SDK的分别针对地图控件和地图框架封装的模块,不需要修改;⑤setting为SDK统一配置文件夹,目前包括config_map.xml(底图配置文件,需根据实际的地图服务自行修改)和config_db.xml(数据库配置文件,暂时不用)如果用户开发的功能模块有自己的配置文件,一般不需要放到统一配置文件夹中,只需在该模块的开发文件夹下建立目录存放即可。
一个时空信息云平台功能模块的实例从开始应用程序的设计,到用户看到功能模块的界面,经历了一个简单的生命周期。期间主要的5个事件如下:
①Flash播放器从加载和运行容器文件开始一个时空信息云平台框架的应用程序;②云平台框架从网络服务器加载XML格式的配置文件和皮肤文件并应用于整个应用程序;③在配置文件的基础上,模块管理器首先加载基础模块(地图模块和界面模块),地图模块基于配置文件,从GIS服务器上下载相关的地图信息;界面模块通过配置文件显示模块列表。然后模块管理器加载ModuleContainer,各个功能模块显示在该容器中;④模块管理器会从XML配置文件指定的URLs下载并加载相关的模块文件(一般是swf文件);⑤用户利用模块来实现各种业务逻辑。
4.2 编程模型
经过编译的Module是一个独立的swf文件,可在Container程序中共享、移动和配置。Module封装了一系列独立并且针对性很强的业务逻辑,用户可以在其中执行任务。在一个面向服务的环境下,一个Module可以代表是一种服务或者是一套相关的服务,用户可以很明了的用它来执行一个业务功能。Module不仅为用户提供了可视化的界面,也能够连到服务器端的资源,例如来自New Map Server的地图服务。一系列相互关联的Module加上清晰定义好的业务操作流程组成了业务解决方案。而且这样的方案可以应用于企业级的业务进程中。时空信息云平台的Module编程模型使得开发人员可以轻易定制Module,避免了将业务功能整合到平台中所需的底层代码开发。其核心接口包括以下两个:
①NMBase Module Interface:这个接口定义了ModuleFrameset管理模块的通信方法。而基础module类NMBaseModule则要来实现这个接口。
②NMBase Module Class:这个是 Module的基类,所有的模块都要继承这个类。通过扩展NMBase Module这个父类,ModuleFrameset会验证所有扩展了NMBase Module的MXML或AS类是否为可部署的模块。另外,扩展了NMBaseModule的类能够被编译为一个独立的SWF文件。每个平台框架下的模块必须继承NMBase Module这个父类。
4.3 消息通信机制
Open Map SDK通过全局事件总线容器(nmPlatEventBus)来促进 module和nm Map-Module以及多个module之间进行交互来获取相关的信息,Open Map SDK的消息通讯机制能够较好地解决模块化之后,各个模块之间的通讯问题,全局事件总线容器(nmPlatEventBus)是促进不同模块的直接交互或是信息传递。
实现Open Map SDK消息通讯机制主要是通过消息的分发(dispatch)和监听(add Listener)来进行的。
需要注意的是,消息的分发(dispatch)和监听(add Listener)必须成对出现,他们之间通过消息类型type来进行识别,即如果在A模块中分发(dispatch)一个消息,那么相应地在B模块中要增加对A模块分发消息的监听(add Listener),这样当A模块和B模块就可以实时通讯,并可以通过Object类型的data参数彼此之间进行相关信息的传递。
对于GIS网络应用,除了可视化数据这个特殊用途外,地图还是一个允许用户收集并且处理地图数据的数据源。或许在用户与地图进行交互的过程中,所创建的module需要接收如点和直线或者多边形这一类的数据来进行处理。
下面这段示例代码展示了如何激活画图工具来追踪用户在地图上面的点击操作:
private function start Query():void{
nmPlat Event.dispatch(PlatConst.SET_MAP _ ACTION, {type: Plat-Const.MAPACTION_POINT},get Draw Feature);
}
private function get Draw Feature(dfeature:NFeature,mapinfo:Object,params:Object):void{
var postData:Object;
var geoJSONParser:NGeoJSONParser=new NGeoJSONParser();
post Data=geoJSONParser.write([dfeature]);
var jsonParser:NJSONParser=new NJSONParser();
var featureobj:Object= jsonParser.read(post Data);
var coords:String='';
var coord Arr:Array;
coord Arr=featureobj.features[0].geometry.coordinates;
}
在上面的示例中,点击module中的按钮会调用start Query()方法。当一个指定的任务需要用户点击module上的按钮时,程序就能够随时从地图上获取一个点的坐标信息。用户下一步需要做的就是点击地图上任意位置,然后module就能够接收这个点击行为传送的点信息。具体由一个回调函数get Draw Feature()来接收传回的相关信息。关于框架中支持的事件类型都在类PlatConst中进行定义,开发人员可以查看此类获取框架支持的事件类型信息。
5 结束语
在智慧城市时空信息云平台建设中,开放性是最重要的特性之一。本文在分析开放式平台的基础上,总结开放平台的结构、关键技术和基本特征,并在Open API的技术手段之上,提出实现Open Map的思路,从开发框架、编程模型、消息通信机制等方面对时空信息云平台的开放性(主要针对地图应用的开放性)进行了研究,为后续各地市开展智慧城市时空信息云平台的建设提供技术参考。