程 钢,郭玉祥,贾 宝,毛明楷
(1.河南理工大学 矿山空间信息技术国家测绘地理信息局重点实验室,河南 焦作 454000;2.河南理工大学 测绘与国土信息工程学院,河南 焦作 454000)
随着城镇化水平的提高及出行频率的增加,人们对地理空间信息的需求越来越大。目前,在线地图服务仍是空间信息大众化服务的主要形式,近年来在线地图服务得到了长足发展,提供基本地图服务的同时,各地图服务商开放了地图API(Application Programming Interface),以便用户将企业或个人信息与地图服务进行整合,利用较低成本实现基于位置的个性化、差异化的信息共享与发布。然而,不同地图API采用独立的开发环境和技术,针对的服务平台多样,功能也有所差异,用户在选择开发平台时无所适从[1-3]。本文从地图API开发原理入手,对几款主流的地图API进行对比分析,并提出优化建议。
地图API是具有开放应用功能的地图接口,是用来操作组件、应用程序或操作系统的一组函数集合,可利用脚本语言将地图嵌入到网页或其它载体。该技术体系是一个开放体系,地图服务商不断扩展和更新API功能,用户则可以扩展数据库和应用服务,丰富在线地图服务的内容,开发不同层次的应用,为用户定制差异化的地图服务[4]。
地图API应用程序采用多层B/S架构搭建在线地图服务平台,结构层次分明、易于维护,保证系统运行的效率和稳定性[5-8],如图1所示。
图1 地图API程序基本架构
1)用户层和地图接口:提供交互式操作界面,用户可方便获得基础地图、兴趣点、本地搜索、驾车导航、实时路况等地图服务资源。
2)业务逻辑层:实现用户请求的空间数据和业务逻辑关系的处理操作,是本构架的核心部分。
3)数据层:负责空间及属性数据管理工作,为地图服务提供基础数据。
基于地图API的在线地图服务还可以与第三方数据进行交互,并根据用户习惯对地图数据、功能和表现形式进行定制和扩展。
基于地图API的开发流程包括引用API文件、创建地图容器、创建地图实例、地图初始化、添加各项功能等基本过程,如图2所示。本文以Web版百度API开发为例,简要介绍地图API开发过程。
图2 百度地图API开发流程
1)引入地图API文件。
<scripttype="text/javascript"src="http://api.map.baidu.com/api?key=46ce9d0614bf7aefe 0ba562f8cf87194&v=1.0&services=false"></script>
参数key为密钥(免费版可省略),参数v为版本号,参数services表示是否加载服务部分。
2)创建地图容器。
<div style="width:520px;height:340px;id="container"></div>
创建<div>元素作为地图容器,设置其大小和样式。
3)创建地图实例并初始化。
var map=new BMap.Map("container");
var point=new BMap.Point(106.486654,29.490295);
BMap.Map.centerAndZoom(point,16);//设置中心点坐标和放大级数。
创建地图实例,利用其中心点坐标和地图放大级数作为参数对其进行初始化。
4)添加地图控件。
map.addControl(new BMap.NavigationControl(opts));
map.addControl(new BMap.OverviewMap-Control());
map.addControl(new BMap.ScaleControl());
向地图添加平移缩放控件、缩略图控件和比例尺控件等基本控件。
5)添加地图覆盖物。
map.addOverlay(marker);
使用添加地图覆盖物方法,向地图叠加标注、矢量图形等元素。
6)添加地图事件。
百度地图API中每个对象都含有addEventListener方法,为监听对象添加事件处理程序,如map.addEventListener(‘click’,function(){}),向地图添加单击事件处理程序。
7)添加地图服务。
添加本地搜索、地址解析、公交导航、自驾导航、步行导航、实时路况等服务,如百度地图API使用DrivingRoute类实现自驾导航:
var driving=new BMap.DrivingRoute(map,{renderOptions:{map:map,autoViewport:true}});
driving.search("中关村","魏公村");
8)添加交互工具。
百度地图提供了具有交互功能的工具,包括标注、测距、区域缩放等。
9)添加地图图层。
map.addTileLayer(newBMap.TileLayer());
用户可以在已有地图上叠加自定义图层。
以下为百度地图API开发的简单地图实例,如图3所示。
图3 地图实例
地图API因其载体和开发环境不同,开发过程和方法也有所差异,本文对主流地图服务提供的API形式进行统计,见表1。从统计结果来看,MapABC和Amap提供的API支持的开发环境更丰富,SOSO地图支持的环境则相对较少;用户可以根据项目需求、开发平台、技术特长等选择合适的API接口。
表1 地图服务提供的API形式
各在线地图服务所采用的数据来源、技术方法不同,形式及服务也不同。为深层次了解各地图API的差异,让用户选择合适的地图服务,从常规功能、技术开发和特色服务等方面对不同地图服务提供的Web版和移动版API进行对比和分析,如表2所示。
表2 模式及功能对比结果
通过对比分析可知,这些地图API主要有以下区别和联系。
1)常规功能方面,各地图API均提供免费版本,基本满足浅层次应用需求,具备标注、地图操作、公交查询、自驾导航、地理编码、GPS定位等功能。检索词搜索方面,谷歌、百度、图吧、SOSO、Amap等地图查询提供了较为灵活的输入方式,如通过首字母查找相近的检索词;图吧和Google地图数据读取显示效果较好。界面布局及基本操作方面谷歌地图不如百度及其他地图更符合国内用户习惯。
2)技术开发方面,百度地图API兼容大多数的系统和浏览器,功能较为全面;图吧地图API对程序员开发要求比较高,但其移动版提供intent+jar相结合的调用较为快捷;MapABC地图接口丰富,易用性较好,二次开发便捷。
3)特色服务上差异较为明显,如谷歌地图的卫星模式和三维模式明显优于其他的地图服务;图吧、SOSO、Amap等则仅移动版支持三维模式;图吧地图提供了部分城市摄像头查询功能,其移动版提供了实时油价服务,方便用户查找附近的加油站;51ditu提供了实用的面积测量功能,并专门为商户提供了标注功能。
4)街景地图,可以使用户以身临其境的方式查看周边情况,目前支持该功能的仅有谷歌和SOSO地图,且谷歌支持的国内街景城市较少,而SOSO街景随着数据采集在日益完善,目前提供了国内六大城市的Web和手机街景地图,提供的街景邀拍功能,用户可以在没有街景的地方进行标注,向SOSO街景团队发出邀拍申请。
5)地形模式,是谷歌地图新推出亮点功能,其在地图视图下以地貌晕渲形式模拟三维地貌起伏效果,进一步扩展了在线公众地图的表达形式。
上文对各大在线地图服务及其API进行了对比分析,各有各的特色和优势,但发展趋势是基本一致的,本文通过用户为中心的理念和未来地图发展方向性的视角,尝试提出若干原则性的优化对策。
1)丰富生活服务类内容。网络电子地图不再是一个简单工具,更是一个生活服务类平台,借助在线地图不仅可以学习地理知识,更可以为就餐、购物、出行等日常工作和生活提供细致入微的信息服务。
2)在线地图服务与网络媒体结合,门户网站等媒体可以为地图提供入口,地图则为媒体提供位置服务,使得互联网用户可以更便捷地获取地图服务,商家也得到共赢。
3)提高用户参与度。目前地图大部分信息来源于上游地图数据供应商及行业内的专题信息,存在更新速度慢、周期长等缺点,个人参与信息采集可及时纠正错误信息、增加更新信息,SOSO地图的街景邀拍模式即针对当前地图无法满足的街景服务需求而设计的。
4)提高地图服务的易用性,进一步降低使用门槛,优化界面设计,提高系统功能,简化操作过程,以增加用户的重复使用度和依赖度。
5)目前的地图服务趋同性较大,要获得用户亲睐,不能简单抄袭别家模式,必须从用户需求出发,突出各产品自身优势,增强产品体验性,才能有长足的发展。
6)提高地图API的兼容性和易用性。随着移动互联网和智能终端的发展,在线地图的载体和运行环境出现多样化趋势,地图API需兼容不同的形式、降低开发难度。
在线地图服务发展,开拓了一个崭新的电子地图公众服务时代。如何适应快速简易的地图应用、满足不同用户的个性化地图需求,是在线地图要解决的根本问题。本文详述了地图API的开发架构、流程,并对当前主流地图API进行了详细对比,从功能、技术、服务等层面进行了分析和总结,为其今后发展提出了优化策略,为用户了解地图API、选择合适的地图服务提供依据,同时也为地图服务商们改进开发技术、完善地图数据库、拓展和提升地图API功能提供重要参考。
[1]周宇林,付忠良.基于Google地图API的空间信息发布[J].计算机应用,2011,31(5):1450-1451.
[2]王卫玲,刘瑜,魏艳梅.基于Google MapsAPI的电子地图的开发研究[J].信息技术和信息化,2011(3):93-94.
[3]耿庆斋,缪纶,段媛媛,等.基于Google MapsAPI的地图服务系统研究及应用[J].中国水利水电科学研究院学报,2009(3):62-66.
[4]杜传明.百度地图API在小型地理信息系统中的应用[J].测绘与空间地理信息,2011,34(2):152-153.
[5]彭璇,吴肖.Google Map API在网络地图服务中的应用[J].测绘信息与工程,2010,35(1):25-27.
[6]陈园园,简季,杨武年.GoogleMaps组件二次开发与应用[J].地球信息科学,2008,10(6):770-775.
[7]毛先成,黄秀兰.WebGIS开发方法的研究与实现[J].地理空间信息,2008,6(5):9-12.
[8]巫细波,胡伟平.Google Maps运行机制以及应用研究[J].华南师范大学学报:自然科学版,2009,9(2):106-110.