程 鋼,郭玉祥,賈 寶,毛明楷
(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.