盧志煒 武漢大學(xué)
隨著數(shù)字化的推進(jìn),現(xiàn)在很多人購(gòu)買書籍產(chǎn)品,都是采用網(wǎng)上訂購(gòu),直接送貨上門。對(duì)于公司而言,需要對(duì)各地所有門店、庫(kù)房進(jìn)行統(tǒng)計(jì)盡力做到最近送貨達(dá)到最優(yōu)的效率。采用電子地圖展示方式對(duì)調(diào)度方案進(jìn)行可視化管理,可以有效提高工作效率,節(jié)約運(yùn)輸成本。
系統(tǒng)總體架構(gòu)計(jì)劃采用B/S結(jié)構(gòu),由前端web訪問(wèn)服務(wù)器與后臺(tái)數(shù)據(jù)服務(wù)器組成。這樣可以在前端部署多個(gè)訪問(wèn)服務(wù)器來(lái)分流流量,達(dá)到負(fù)載均衡。
后臺(tái)數(shù)據(jù)服務(wù)器可以統(tǒng)一所有網(wǎng)點(diǎn)的信息,進(jìn)行集中展示與管理。
前端web訪問(wèn)服務(wù)器,提供地圖展示功能,加載web引擎,將后臺(tái)的數(shù)據(jù)按一定方式篩選展示在地圖界面上。
細(xì)分下來(lái),系統(tǒng)實(shí)現(xiàn)應(yīng)當(dāng)分為:
(1)前端web框架,用作用戶登錄、帳號(hào)權(quán)限管理等功能。
(2)前端web引擎,用作地圖展示、熱點(diǎn)規(guī)劃分析等功能。
(3)地圖API接口,用作前后端交互的接口,從后端服務(wù)器讀取數(shù)據(jù)展示到前端界面上。
(4)后端服務(wù)器,用作后臺(tái)數(shù)據(jù)庫(kù)管理、檢索、接口調(diào)用等。
(5)后端地圖數(shù)據(jù),包括在線地圖與離線地圖,存入數(shù)據(jù)庫(kù)待后端服務(wù)器調(diào)用檢索。
根據(jù)后臺(tái)API接口返回的信息,展示地圖底圖、數(shù)據(jù)層信息、及其他相關(guān)元素的展示、操作,更新等。
市面上常見(jiàn)的web引擎有OpenLayers、OpenScales、ArcGIS Web、四維圖新前端等。
①OpenLayers是基于BSD協(xié)議的開(kāi)源產(chǎn)品
②OpenScales是基于LGPL協(xié)議的開(kāi)源產(chǎn)品
③ArcGIS Web是美國(guó)ESRI公司開(kāi)發(fā)的商用產(chǎn)品(費(fèi)用較高)
④四維圖新是我國(guó)從事地圖數(shù)據(jù)庫(kù)采集的國(guó)企,產(chǎn)品為商業(yè)用途。
①OpenLayers是JavaScript框架
②OpenScales是基于flash技術(shù)的Flex框架
③ArcGIS Web是Silverlight+JavaScript框架
④四維圖新是自行研發(fā)的引擎API與后臺(tái)數(shù)據(jù)
①OpenLayers提供了豐富的API接口操作,可以完成常見(jiàn)的GIS地圖功能需求。
②OpenScales最初叫FlexLayer是Openlayers的Flex版本,但因?yàn)閛penscales并沒(méi)有完全實(shí)現(xiàn)openlayers所提供的所有接口和功能,所以有些工作需要自己實(shí)現(xiàn)。比如放大和縮小工具欄、監(jiān)聽(tīng)鼠標(biāo)雙擊事件實(shí)現(xiàn)放大地圖、以及正多邊形畫法等等。
③ArcGIS Web為ArcGIS Server提供了對(duì)應(yīng)的API接口供使用。
④四維圖新提供了眾多可以按需組合的API接口。
①OpenLayers的文檔很詳細(xì)。
②OpenScales缺少必要的文檔,不過(guò)其本身是對(duì)OpenLayers的Flex實(shí)現(xiàn),所以可以閱讀OpenLayers的文檔作為參考。
③ArcGIS Web商業(yè)產(chǎn)品的文檔總是合格的。
④四維圖新是國(guó)產(chǎn)商業(yè)產(chǎn)品,擁有豐富的中文說(shuō)明文檔。
①OpenLayers支持百度、高德等常見(jiàn)地圖提供商的數(shù)據(jù)。
② OpenScales同 OpenLayers。
③ArcGIS Web只能加載google等有限的幾種國(guó)外地圖數(shù)據(jù),不支持國(guó)內(nèi)地圖數(shù)據(jù)提供商的數(shù)據(jù)。
提供地圖底圖數(shù)據(jù)接口以及相關(guān)數(shù)據(jù)層數(shù)據(jù)接口,并且可以在后臺(tái)根據(jù)前端相關(guān)采集設(shè)備反饋的信息和數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)對(duì)數(shù)據(jù)層進(jìn)行即時(shí)演算。
市面上常見(jiàn)的GIS后臺(tái)服務(wù)器通常有:GeoServer、MapServer、ArcGIS Server、四維圖新后臺(tái)服務(wù)器等。
根據(jù)后臺(tái)API接口返回的信息,展示地圖底圖、數(shù)據(jù)層信息、及其他相關(guān)元素的展示、操作,更新等。
①GeoServer是基于BSD協(xié)議的開(kāi)源產(chǎn)品
②MapServer是基于MIT協(xié)議的開(kāi)源產(chǎn)品
③ArcGIS Server是美國(guó)ESRI公司開(kāi)發(fā)的商用產(chǎn)品
④四維圖新是國(guó)內(nèi)四維圖新公司的商用產(chǎn)品提供商用API
⑤高德地圖、百度地圖等雖是商業(yè)產(chǎn)品,但提供免費(fèi)API
①GeoServer是基于J2EE開(kāi)發(fā)的:Geoserver(服務(wù)器)+uDig(桌面軟件)+PostGIS(數(shù) 據(jù)庫(kù))++Openlayers(JS)/openscale(FLex)(瀏覽器客戶端)
②MapServer是基于C/C++開(kāi)發(fā)的:Mapserver(服務(wù)器)+QGIS(桌面軟件)+PostGIS(數(shù)據(jù)庫(kù))+Openlayers(JS)/openscale(FLex)(瀏覽器客戶端)
③ArcGIS Server是非開(kāi)源的產(chǎn)品,對(duì)應(yīng)的前端也通常采用他們自己的ArcGIS前端
④四維圖新是非開(kāi)源產(chǎn)品,對(duì)應(yīng)的前端也通常采用自己的相關(guān)設(shè)備
⑤高德地圖提供開(kāi)源的API,但不提供離線的API
⑥百度地圖本身采用的是四維圖新的地圖數(shù)據(jù)源,但做了開(kāi)放的API接口
①GeoServer包括GIS的大部分功能,滿足絕大部分的web地圖應(yīng)用開(kāi)發(fā)
②MapServer包括GIS的基本功能,滿足基礎(chǔ)的web地圖應(yīng)用開(kāi)發(fā),功能略低于GeoServer
③ArcGIS Server可以定制GIS相關(guān)功能,并可以進(jìn)行分布式GIS系統(tǒng)開(kāi)發(fā)
④四維圖新同樣提供各個(gè)GIS模塊的定制
⑤高德地圖的API是開(kāi)源的,不過(guò)不提供單獨(dú)的服務(wù)器部署與離線地圖
這3個(gè)系統(tǒng)相對(duì)于其他的GIS服務(wù)器來(lái)說(shuō),都是比較快的,而這三者之間以ArcGIS Server最快,MapServer次之,GeoServer最后。
①GeoServer是純Java的開(kāi)源框架,可以基于GeoServer做二次開(kāi)發(fā),定制所需產(chǎn)品。
②MapServer提供兩種工作方式,CGI方式和MapScript方式。以原生CGI方式效率最高,配合TileCache,可以快速生成大范圍的地圖瓦片數(shù)據(jù)。比較基于.Net和J2EE的商業(yè)或開(kāi)源平臺(tái),MapServer更適合高負(fù)荷的大型互聯(lián)網(wǎng)地圖應(yīng)用。MapServer是基于C寫的地圖服務(wù)軟件,比用JAVA寫的GeoServer速度要快。而且MapServer歷史要比GeoServer悠久,甚至MapServer的性能與商業(yè)的ArcIMS的功能可以娉美。
③ArcGIS Server自身具備對(duì)應(yīng)的桌面軟件ArcMap,所以對(duì)于前期地理數(shù)據(jù)的編輯整飾比較方便,ArcServer相對(duì)來(lái)說(shuō)比較容易上手。
④四維圖新的發(fā)展定位在于車載導(dǎo)航,與車廠合作緊密,注重導(dǎo)航模塊,主要記錄道路信息,POI熱點(diǎn)精度較細(xì),尤其對(duì)于大門、主干道入口的定位比其他地圖更精準(zhǔn)。
⑤高德地圖,地圖信息比較全面,在導(dǎo)航精度不如四維圖新,但在其他方面,如三維圖標(biāo)、三維仿真地圖、實(shí)景圖、模式圖、方向路牌等均優(yōu)于四維圖新。
ArcGIS作為商業(yè)產(chǎn)品,是最穩(wěn)定的,提供的幫助文檔是最多的。ArcGIS的服務(wù)完備,功能齊全,但是龐大臃腫,大部分功能在平時(shí)用不到。且安裝困難,ArcGIS連安裝盤都找不到,需要專門人員上門安裝,一旦故障要有重做系統(tǒng)的準(zhǔn)備。相對(duì)來(lái)說(shuō),GeoServer等開(kāi)源的地圖服務(wù),則是輕量級(jí)的,且常用的功能都可以支持。
ArcGIS不支持開(kāi)源數(shù)據(jù)庫(kù)如PostgreSQL等,需要使用他自己的或者Oracle等數(shù)據(jù)庫(kù)。
其他大多數(shù)后臺(tái)服務(wù)器都支持市面常見(jiàn)數(shù)據(jù)庫(kù)。
四維圖新采用完全將數(shù)據(jù)和業(yè)務(wù)系統(tǒng)分離的方式對(duì)地圖數(shù)據(jù)進(jìn)行管理,因此可以將數(shù)據(jù)部署在內(nèi)外。
高德地圖不支持離線地圖功能,所以使用高德地圖做數(shù)據(jù)源的平臺(tái),均無(wú)法在內(nèi)網(wǎng)使用,如谷歌地圖、ArcGIS Server等。
(1)web框架,這個(gè)部分目前各個(gè)廠商都沒(méi)有提供,由于牽扯帳號(hào)信息、日志歸檔、權(quán)限劃分等,一般也都是自己進(jìn)行實(shí)現(xiàn),這部分應(yīng)該是輕量級(jí)的頁(yè)面,可以考慮用PHP來(lái)實(shí)現(xiàn)比較快速。
(2)web引擎,通用模塊,通過(guò)在頁(yè)面指定區(qū)域填充地圖,加載JS模塊的方式,進(jìn)行地圖繪制。
(3)邏輯腳本,這部分主要是聯(lián)動(dòng)引擎與后臺(tái)API,對(duì)傳輸數(shù)據(jù)進(jìn)行篩選拼接,然后調(diào)用API接口,這部分也是需要自行實(shí)現(xiàn)。
(4)后臺(tái)API,由廠商提供,有付費(fèi)的也有免費(fèi)的,不同API支持服務(wù)不同。
(5)后臺(tái)服務(wù)器,用來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢索和展示,這個(gè)牽扯到地圖算法檢索、數(shù)據(jù)庫(kù)遍歷等,可以用JAVA、C或PHP等實(shí)現(xiàn)。
從此次項(xiàng)目的選擇來(lái)看,前后端合一的方式,比較適合較小的訪問(wèn)量,節(jié)約前端服務(wù)器成本。JAVA框架具有較多的開(kāi)源資源和幫助資料,地圖數(shù)據(jù)源和API統(tǒng)一采用四維圖新的地圖數(shù)據(jù)與接口,四維圖新雖然是商業(yè)版,但是定制的模塊,可以只選擇自己需要的部分進(jìn)行加載,相對(duì)自行研發(fā)從0開(kāi)始的成本,采用一個(gè)已經(jīng)成熟的API接口與框架,可以很快做出成品,在這個(gè)將就效率的時(shí)代,從零開(kāi)始自行研究開(kāi)源GIS地圖,成本未必就比購(gòu)買的低。
因此,此次項(xiàng)目采用了JAVA+四維圖新API+四維圖新在線地圖數(shù)據(jù)源,是最符合此次項(xiàng)目需求的方案。
[1]《四維圖新在線》趙宇鵬,2016
[2]《主流網(wǎng)絡(luò)地圖應(yīng)用開(kāi)發(fā)API技術(shù)研究》龍際夢(mèng);劉宏建;蔡中祥;張琳翔,2015
[3]《百度、高德及Google地圖API比較研究》向玉云;高爽;陳云紅;黃嘉成;許新華,2017
[4]《基于YII框架的O2O平臺(tái)網(wǎng)站的設(shè)計(jì)和實(shí)現(xiàn)》劉琛辰,2014
[5]《MVC設(shè)計(jì)模式在Yii框架中的應(yīng)用與研究》牧春,2015