景區(qū)手繪地圖(電子地圖、智慧導(dǎo)覽系統(tǒng))如何制作(景區(qū)手繪地圖怎么做)
一、智慧導(dǎo)覽系統(tǒng)介紹
手繪電子地圖,就是把手繪地圖覆蓋到地圖上,游客或者普通用戶,可以在手機上通過地圖的鏈接(或者現(xiàn)在流行的小程序)打開使用。是一種使用非常方便,集“視、聽、路徑規(guī)劃、實時導(dǎo)航”等諸多功能于一體的智慧導(dǎo)覽系統(tǒng)。也是現(xiàn)在很多景區(qū)為游客提供的增加便捷性和游玩體驗的一項功能。
最重要的兩點,我認(rèn)為是:
1.手繪圖本身
手繪圖的美觀度、清晰度、完整度、準(zhǔn)確度,決定了圖的檔次格調(diào)的高低,也是手繪設(shè)計師的技術(shù)水平、設(shè)計能力、規(guī)劃能力、溝通能力等綜合性體現(xiàn)。
2.實時導(dǎo)航功能
如果說手繪圖本身是面子,讓人對地圖有第一印象和直觀感受,那么實時導(dǎo)航功能則是地圖的靈魂和里子。沒有實時定位和動態(tài)路徑規(guī)劃導(dǎo)航功能的地圖,只是一個可觀而不可用的花瓶,沒有使用價值。沒有準(zhǔn)確的而高效的實時導(dǎo)航算法,就不能把地圖價值在游客手里發(fā)揮到最大。
因為多年的從業(yè)經(jīng)驗,我從一個純技術(shù)的角度來分享一下如何實現(xiàn)這樣的“智慧導(dǎo)覽系統(tǒng)”。
二、智慧導(dǎo)覽系統(tǒng)功能
先看一個參考示例圖(根據(jù)實際情況,只添加了必要的功能):
參考示例圖
1.基礎(chǔ)功能
地圖功能的設(shè)計,包括需要哪些功能,需要怎么展示,地圖點位的圖標(biāo)等細(xì)節(jié),不一而足。每個需求方可能要的也不一樣。但總體來說,可能包含如下:
景點介紹:這是智慧導(dǎo)覽系統(tǒng)最基礎(chǔ)的功能之一。在系統(tǒng)后臺可以在地圖上添加景點標(biāo)注,并完善相應(yīng)的介紹信息,包括圖片、文字、圖文、語音、視頻等內(nèi)容。
服務(wù)設(shè)施:在地圖上添加區(qū)域內(nèi)的服務(wù)設(shè)施,如廁所、游客中心、停車場等內(nèi)容。
商家信息:在地圖上添加區(qū)域內(nèi)的商家,如酒店、餐飲、特產(chǎn)等商家。用戶可查看商家介紹、商家產(chǎn)品,并可支付下單購買。
景區(qū)公告:在后臺添加景區(qū)最新公告,如閉園通知、開園通知、最新活動等信息。
線路推薦:在后臺設(shè)置推薦的線路及景點,游客在地圖上可點擊查看,并在地圖上直觀的規(guī)劃出推薦的路徑,模擬導(dǎo)覽游覽。非常直觀明了。
咨詢電話:可在后臺設(shè)置景區(qū)的咨詢、客服的聯(lián)系方式,如電話、微信、微博等。
景區(qū)720:可拍攝制作景區(qū)的720全景,并在地圖上標(biāo)注展示,更直觀的向游客展示景點的實景。
2.增強功能
智慧導(dǎo)覽系統(tǒng)還應(yīng)該具備如下增強功能,才能更好的增強客戶的服務(wù)能力、滿足用戶的使用需求。這也是當(dāng)前電子手繪地圖系統(tǒng)的重點和難點。
實時定位:基于客戶端的位置獲取接口(如上文,可能大部分是微信環(huán)境里,或者瀏覽器環(huán)境),實時獲取用戶當(dāng)前的位置信息。當(dāng)然,位置的精度可能會受到諸多方面因素的影響,如天氣、建筑物遮擋、設(shè)備本身的性能或GPS模塊的精度、網(wǎng)絡(luò)狀況等。在理想的情況下,精度甚至可達(dá)到10到20米左右的偏差。這種精度,在民用已經(jīng)算是極致了。為什么不給出更精確的精度,可能一方面是設(shè)備、技術(shù)等因素限制,另一方面,從安全角度來看,可能這也超出民用的范疇。當(dāng)然,話說回來,從我們的實際使用場景來看,這樣的精度其實已經(jīng)遠(yuǎn)遠(yuǎn)的滿足我們的需求了。這里說個題外話,為什么我們在手機上使用地圖APP導(dǎo)航的時候,不管是駕車還是步行,看上去都能做到精準(zhǔn)無誤呢?(如駕車,在路口轉(zhuǎn)向時,基本上達(dá)到米級的精度)
關(guān)于這一點,我是這樣思考的:地圖APP是基于設(shè)備的定位,然后再結(jié)合當(dāng)前使用者的導(dǎo)航方式、路徑規(guī)劃、設(shè)備朝向、速度等多方面綜合的因素,用強大的后臺算法為用戶的當(dāng)前位置做了智能的“糾偏”。那為什么我們智慧導(dǎo)覽系統(tǒng)不做這樣的糾偏呢。從實際出發(fā),這一方面是我們的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)不夠豐富完善,另一方面是“性價比”不高。在園區(qū)內(nèi)的導(dǎo)航,不需要這樣的“糾偏”已經(jīng)可以滿足需求,而要做這樣的“錦上添花”的功能,則需要付出指數(shù)級甚至更高的成本和代價。
動態(tài)路線規(guī)劃:基于前端設(shè)備“實時定位”的能力,智慧導(dǎo)覽系統(tǒng)實時計算用戶當(dāng)前位置和指定目的地的路徑。指定的目的地,可以是地圖上標(biāo)注的任意一個點位,如景點、服務(wù)設(shè)施、商家等。這一點,和地圖APP的導(dǎo)航功能非常類似。園區(qū)內(nèi)很多情況下,沒有地圖APP平臺采集路線,所以需要我們?nèi)斯ぴ谥腔蹖?dǎo)覽系統(tǒng)后臺標(biāo)注和實際情況一致的路線,或者通過智慧導(dǎo)覽系統(tǒng)提供的路線采集工具,安排人員現(xiàn)場采集。其實,地圖平臺的路線采集也是這樣做的。各大地圖平臺,都有國家發(fā)放的專業(yè)牌照,然后通過路線采集人員駕車或步行,采集、更新每個城市的道路(仔細(xì)想想,這是一個多大的工作量和成本,我們每個人都可以免費的使用這些服務(wù),感謝他們的付出成本和辛苦)。
自動觸發(fā):基于“實時定位”和“動態(tài)路線規(guī)劃”能力,用戶達(dá)到系統(tǒng)設(shè)置的點位附近時,可以自動觸發(fā)后臺配置的各種功能,如自動播放景點的語音講解、展示圖文內(nèi)容,或推送商家的優(yōu)惠券等。為用戶提供便利、人性化的智慧服務(wù)。
多語言:多語言是智慧導(dǎo)覽系統(tǒng)滿足國際化需求的一個增強功能。系統(tǒng)具備基本的漢語、英語選擇,還具備很便捷的擴(kuò)展其他語種的設(shè)計和功能。
3.地圖個性化
智慧導(dǎo)覽系統(tǒng)不應(yīng)該是一個單純的功能性的系統(tǒng),還應(yīng)該有更多豐富的、多元化的功能,為用戶提供更多個性化、趣味化的服務(wù)。
個人中心:系統(tǒng)具備用戶個人中心的功能。用戶可以對地圖上的景點進(jìn)行點贊、評論等操作,然后可在個人中心查看。
營銷、廣告:后臺可在地圖上添加固定的營銷、廣告等信息,增強能力和滿足運營需求。
優(yōu)惠券:后臺可設(shè)置地圖上的商家發(fā)送優(yōu)惠券,吸引、導(dǎo)流游客進(jìn)店,帶動消費。
尋寶游戲等活動:后臺可在地圖上添加尋寶指引點位,引導(dǎo)游客到指定地點掃碼積星對話獎品。
標(biāo)注圖標(biāo)動效:所有標(biāo)注點的圖標(biāo),可設(shè)置一些動效,增加地圖的趣味性和個性化。
三、技術(shù)棧的選擇
從這里開始后面的內(nèi)容,有一定的行業(yè)背景或經(jīng)驗的人,能更好的理解。我盡量說得通俗易懂一些。如果你覺得一些專業(yè)名詞不明白是什么意思,可以直接跳過。
現(xiàn)在絕大部分業(yè)務(wù)系統(tǒng)的開發(fā),都是基于一個成熟的技術(shù)棧來實現(xiàn)。這樣可以極大的節(jié)約基礎(chǔ)設(shè)施的成本,而且效率得到極大的提高。甚至某些系統(tǒng)或行業(yè)的應(yīng)用及系統(tǒng),不基于一些成熟的技術(shù)棧,想要完全自主開發(fā),幾乎是不可實現(xiàn)的。
智慧導(dǎo)覽系統(tǒng),建議基于這樣的一個技術(shù)棧:
1.服務(wù)器
使用成熟的云平臺,國內(nèi)成熟好用的幾家,業(yè)內(nèi)人都知道。
2.前端平臺
如今最大的前端平臺是微信小程序,還有就是瀏覽器直接通過鏈接打開。不過就智慧導(dǎo)覽系統(tǒng)來說,大部分情況下,微信小程序也是基于Webview控件來調(diào)用,本質(zhì)上和瀏覽器的直接打開沒什么區(qū)別,就是HTML5 JavaScript CSS3來實現(xiàn)。但是微信的生態(tài)內(nèi),會有一些微信開放的額外的一些接口和功能,比如說:可以使用微信提供的位置獲取接口,來為游客獲取更精準(zhǔn)的定位。
3.地圖平臺
智慧導(dǎo)覽系統(tǒng)只能基于地圖的開放平臺來實現(xiàn)。目前國內(nèi)幾家大而成熟的地圖平臺:高德地圖、百度地圖、騰訊地圖。建議首選高德地圖,次選百度地圖。為什么呢?
地圖有個“層級(Zoom)”的概念,就是用戶打開地圖,放大縮小,就是顯示的不同的層級?,F(xiàn)在地圖平臺開放的層級,高德地圖最大為19級,百度地圖為18級,而同級別的情況下,高德地圖也更大一些。
因此,建議選擇高德地圖,可以做更精細(xì)化的地圖。騰訊地圖多不做介紹。 另外,如果涉及國外的景區(qū)或地點,那谷歌地圖是不二的選擇。國內(nèi)的地圖在國外沒有完整的內(nèi)容,而且訪問速度也很隨緣。
四、開發(fā)介紹
具體開發(fā)內(nèi)容,這里主要介紹涉及地圖核心的部分。其他比如數(shù)據(jù)庫設(shè)計、后臺管理系統(tǒng)等不做過多介紹。
1.開發(fā)語言選擇
后端開發(fā):目前流行的開發(fā)語言如Java、PHP、Python等都是不錯的選擇,每個語言都有自己的特色。就個人而言,我比較喜歡Java和PHP,Java純面向?qū)ο?,適合大型項目,運行速度較快;PHP靈活簡單,開發(fā)效率很高,現(xiàn)在利用有Swoole這樣的擴(kuò)展,也可以做到運行速度很快。
前端開發(fā):前端開發(fā)老生常談,JavaScript HTML5 CSS3,千年不變的三板斧。但是可選擇的框架或者庫現(xiàn)在比較多,JavaScript有之前非常流行的JQuery庫,也有現(xiàn)在很火的Vue等框架??傊鳛殚_發(fā)者,你最擅長的可能就是最適合的選擇。當(dāng)然,你也可以選擇學(xué)習(xí)新的知識和技術(shù)代替曾經(jīng)最擅長的。
2.地圖基礎(chǔ)知識
這一點,是核心,基礎(chǔ)中的基礎(chǔ),原理也比較復(fù)雜。因為地球是一個球體,是立體的,并不是天圓地方的一個平面,所以,首先,需要引入一個叫“坐標(biāo)系統(tǒng)”的概念。
當(dāng)前常見的坐標(biāo)系主要有三種:
地球坐標(biāo)系:WGS84,常見于GPS設(shè)備,Gooogle地圖(非中國區(qū)域)等國際標(biāo)準(zhǔn)的坐標(biāo)體系 。
火星坐標(biāo)系:GCJ-02,中國國內(nèi)使用的被強制加密后的坐標(biāo)系,如高德地圖、騰訊地圖、谷歌地圖(中國區(qū)域)的坐標(biāo)就屬于此類坐標(biāo)系。
百度坐標(biāo)系:BD-09,百度地圖所特有的坐標(biāo)體系,它在火星坐標(biāo)系的基礎(chǔ)上又進(jìn)行了一次加密處理。
但是我們使用地圖的時候,卻又只能看到平面的地圖,因此,又有了另外一個概念:墨卡托投影。
墨卡托投影的主要功能,就是讓三維立體的地圖坐標(biāo)能在二維平面上顯示。有點類似于《三體》里的二向箔的功能,把三維系統(tǒng)二維化。
二維化之后的平面,會被分割為一片一片的小圖,或者換句話說,由一片一片的小圖拼成了二維的地圖。而這個小圖,叫“瓦片圖”。這又是一個重要的概念。后文會繼續(xù)細(xì)說。
而瓦片圖的開始點(最左上角,或最左下角)在地球的什么地方呢,因為坐標(biāo)系的不同,每個地圖可能也不一樣。所以,同一個經(jīng)緯度,在不同的地圖平臺上,對應(yīng)的瓦片圖的序號可能都是不一樣的。其中詳細(xì)的原理和規(guī)則算法,這篇文章說得比較詳細(xì):
國內(nèi)主要地圖瓦片坐標(biāo)系定義及計算原理
3.地圖平臺介紹
高德、百度、騰訊、谷歌地圖開放平臺介紹。
首先祭出開放平臺文檔,這是基于平臺開發(fā)的基礎(chǔ):
高德地圖:https://lbs.amap.com/api/javascript-api/summary
百度地圖:https://lbsyun.baidu.com/index.php?title=jspopular3.0
騰訊地圖:https://lbs.qq.com/webApi/javascriptGL/glGuide/glBasic
谷歌地圖:https://developers.google.com/maps/documentation/javascript
每個地圖的API,大同小異。從細(xì)節(jié)來說,騰訊地圖的接口和高德地圖差別最小。
值得一提的是,在地圖上畫線(主要是導(dǎo)航的線路規(guī)劃標(biāo)識),谷歌地圖沒有直接給出繪制虛線的接口,而國內(nèi)的地圖平臺都有。這一點也體現(xiàn)了國內(nèi)和國外的一種思維的差異。
另外還有一個細(xì)節(jié),標(biāo)注圖標(biāo)旋轉(zhuǎn)(比如導(dǎo)航時,箭頭圖標(biāo)跟隨人的方向旋轉(zhuǎn))接口,高德地圖的旋轉(zhuǎn)的中心點不是圖標(biāo)中心,而是圖標(biāo)外層父元素的點位,因此轉(zhuǎn)向時,給人的感覺是自身的位置也在畫一個圓圈,而百度地圖沒有這個問題。當(dāng)然這個問題也不是無法解決,我們可以通過自己編寫轉(zhuǎn)向的CSS,利用JavaScript來控制圖標(biāo)以中心點來轉(zhuǎn)向。
圖標(biāo)圍繞父元素邊點轉(zhuǎn)向
圖標(biāo)圍繞中心點正常轉(zhuǎn)向
每個地圖平臺在手機端的表現(xiàn)和體驗也有些差異。我個人覺得高德地圖最流暢順滑,百度地圖次之。
還有另外一點細(xì)節(jié),就是關(guān)于瓦片圖(后文細(xì)說),一樣的圖,在騰訊地圖上會有非常細(xì)微的差別(騰訊地圖允許級別Zoom為小數(shù),在兩個級別之間,還可以有多個過度值,而其他地圖只能是整數(shù),這是一個更人性化的設(shè)計,但卻導(dǎo)致了瓦片圖變得模糊了一點)。
4.瓦片圖覆蓋到地圖上
瓦片圖是尺寸為256px*256px的正方形圖片。這樣的圖片,像瓦片蓋房一樣,覆蓋為整個地圖,所以稱為“瓦片圖”。
瓦片圖的設(shè)計是一個非常精妙的設(shè)計,解決了地圖圖片太大的根本性問題,節(jié)約了服務(wù)器、客戶端設(shè)備的內(nèi)存,按視覺范圍內(nèi)加載圖片,也節(jié)約了網(wǎng)絡(luò)流量。 這是一種前端的“懶加載”思想的體現(xiàn),也是和前端的“雪碧圖”剛好相反的設(shè)計(關(guān)于“懶加載”和“雪碧圖”,這里不做過多介紹)。 因此我們可以發(fā)現(xiàn),不管什么解決方案,都有相應(yīng)的使用場景,也有相反的局限性。不可脫離場景,一概而論。
瓦片圖覆蓋到地圖,這是整個手繪電子地圖最核心、最基礎(chǔ)的設(shè)施和功能。因為此,我們自己繪制的精美地圖,才能夠覆蓋到地圖平臺上,做成我們個性化需求的地圖。具體的實現(xiàn),并沒有想象的那么復(fù)雜。當(dāng)然,經(jīng)驗豐富的程序員,可以設(shè)計出更科學(xué)的算法和加載邏輯。這里拋磚引玉,做一個示例(高德地圖):
var fileHost = 'https://yourfilehost.com/';var tileLayer = new AMap.TileLayer.Flexible({ createTile: function (x, y, zoom, success, fail) { var imagePath = fileHost '/tilefile/' zoom '/x '_' y '.png'; var div = document.createElement('div'); var img = document.createElement('img'); img.onload = function () { div.appendChild(img); }; img.crossOrigin = "anonymous"; img.onerror = function () { fail() }; img.src = imagePath; success(div); }});tileLayer.setMap(map);
這里AMap.TileLayer.Flexible方法是核心,這是高德地圖提供的使用瓦片圖的一個接口。他提供了一個div層(className為“amap-layer amap-flexible”)覆蓋在底圖之上,然后允許此方法返回仁義的元素,填充在256*256的瓦片圖的方格里。因此,這里其實也可以更簡單的直接返回一個img元素而不用div:
var fileHost = 'https://yourfilehost.com/';var tileLayer = new AMap.TileLayer.Flexible({ createTile: function (x, y, zoom, success, fail) { var imagePath = fileHost '/tilefile/' zoom '/x '_' y '.png'; var img = document.createElement('img'); img.onload = function () { success(img); }; img.crossOrigin = "anonymous"; img.onerror = function () { fail() }; img.src = imagePath; }});tileLayer.setMap(map);
以上為高德地圖的示例,其他地圖原理相差不大,因此不再贅述。當(dāng)然,這里只給了最基礎(chǔ)的加載瓦片圖的邏輯。事實上,根據(jù)實際情況,這里面還會做很多必要的其他業(yè)務(wù)邏輯的判斷,比如,系統(tǒng)應(yīng)當(dāng)存儲當(dāng)前地圖的瓦片圖范圍,超出范圍的,就不要加載圖片,或者加載一張透明的小圖等。
這里列一下地圖平臺瓦片圖的接口名,便于有需要的搜索使用:
AMap.TileLayer.Flexible // 高德地圖BMap.TileLayer // 百度地圖TMap.ImageTileLayer // 騰訊地圖google.maps.ImageMapType // 谷歌地圖//需要注意的是,一些地圖的接口允許傳入?yún)?shù):瓦片圖的尺寸。不過建議默認(rèn)為256較好,畢竟這是通用的默認(rèn)尺寸。
5.瓦片圖的制作
既然瓦片圖是基礎(chǔ),那么我們?nèi)绾螐囊粡埻暾氖掷L圖制作成為256*256的多張瓦片圖呢?可能設(shè)計師都能想到,直接用Photoshop切圖即可,很簡單。是的,常理來說是這樣,但這有2個問題:
(1)我們設(shè)計的圖,往往不是剛好為256px的倍數(shù),那么第一張切圖,從什么地方開始?(即便是剛好為256的倍數(shù),也不能從0像素開始切,后文細(xì)說)
(2)我們切圖出來之后,結(jié)合前文的地圖基礎(chǔ)知識,通過上面示例代碼可見,最關(guān)鍵的是每個圖的文件名,要和地圖的級別Zoom、X軸的數(shù)值x、Y軸的數(shù)值y相對應(yīng)。否則切出來的圖,沒有任何意義。
這兩個問題,是制作有用的瓦片圖的根本問題。
其實,在我們繪制手繪圖片文件之前,就已經(jīng)清晰的知道,我們繪制的內(nèi)容到底是處于地圖的什么區(qū)域。然后應(yīng)當(dāng)記錄這個區(qū)域的起始點的經(jīng)緯度。
前面說了瓦片圖可能從地圖的最左下角或左上角開始。具體情況是這樣的:高德、谷歌、騰訊地圖是從左下角,高德地圖是從左上角開始。
然后通過經(jīng)緯度、抹卡托、可見區(qū)域像素三者的轉(zhuǎn)換算法,計算出當(dāng)前手繪圖分別在X軸和Y軸的第二張瓦片圖的偏移像素,然后從此像素位置開始切圖,并把計算得到的層級(Zoom)、X坐標(biāo)(x)、Y坐標(biāo)(y)的值作為對應(yīng)的文件名保存切圖。因此,說到這里,我們便都知道,這切圖工作沒辦法由設(shè)計師來人工執(zhí)行,只能由設(shè)計的專門算法的系統(tǒng)執(zhí)行。
這里因為一些商業(yè)保密和其他的原因,我不能對這個切圖算法做更仔細(xì)的講解,非常抱歉。
瓦片圖切好之后,放到專門的文件服務(wù)器,然后前端代碼便可調(diào)用,實現(xiàn)瓦片圖覆蓋于地圖底圖上展示。個性又漂亮的手繪地圖便基本成型了(如上圖“參考示例圖”)。
6.動態(tài)規(guī)劃路徑的實現(xiàn)
漂亮個性的手繪電子地圖完成之后,這還只是一個純純的地圖展示,談不上功能性的使用,更別說“智慧”。因此,我們還需要增加各項智慧能力的功能。這其中,最基礎(chǔ)的又應(yīng)當(dāng)是“實時定位”及“動態(tài)路徑規(guī)劃”了。
其實這兩項功能,就是地圖APP的基礎(chǔ)的導(dǎo)航功能。但是因為大部分我們的園區(qū)內(nèi)根本沒有地圖的路線,或者不全面,因此需要我們自己來實現(xiàn)這個功能。
具體如何實現(xiàn),原理很簡單。前端通過定位接口獲取到用戶當(dāng)前的位置(需要注意的是,為了支持更全面的使用場景,可以考慮兼容微信及HTML5原生接口),然后系統(tǒng)計算當(dāng)前位置與指定的點位之間的路線。
因此,這就需要我們根據(jù)實際情況,事先在系統(tǒng)里標(biāo)注園區(qū)內(nèi)的點位和路線,路線越詳細(xì)越好。而通過這些點位和路線,要計算得到最短路徑,關(guān)鍵則在于最短路徑的“尋路算法”。算法可以自己設(shè)計,而目前很多偉大的科學(xué)家公開的很多最短路徑算法則更為推薦。因為自己設(shè)計的算法難免可能會出現(xiàn)一些不可預(yù)料的BUG,而這些公開的算法經(jīng)過嚴(yán)密的證明和大量使用的驗證,使得計算效率以及可靠性都有很好的保證。
這也是我的個人經(jīng)驗,曾經(jīng)我們自己設(shè)計的一個算法,在大部分情況下都能計算出正確的最短路徑結(jié)果,但在某些情況下,卻得到意外的結(jié)果,或發(fā)生計算消耗較多時間,效率低下的情況。
我推薦“迪杰斯特拉”算法,或“佛洛依德”算法。
//C語言版本的迪杰斯特拉算法int a[1000][1000];int d[1000];//d表示源節(jié)點到該節(jié)點的最小距離int p[1000];//p標(biāo)記訪問過的節(jié)點int i, j, k;int m;//m代表邊數(shù)int n;//n代表點數(shù)int main(){ scanf("%d%d",&n,&m); int min1; int x,y,z; for(i=1;i<=m;i ) { scanf("%d%d%d",&x,&y,&z); a[x][y]=z; a[y][x]=z; } for( i=1; i<=n; i ) d[i]=max1; d[1]=0; for(i=1;i<=n;i ) { min1 = max1; for(j=1;j<=n;j ) if(!p[j]&&d[j]<min1) { min1=d[j]; k=j; } p[k] = 1; for(j=1;j<=n;j ) if(a[k][j]!=0&&!p[j]&&d[j]>d[k] a[k][j]) d[j]=d[k] a[k][j]; } for(i=1;i<n;i ) printf("%d->",d[i]); printf("%dn",d[n]); return 0;}
當(dāng)然這些公開算法,都是最基本的核心和原理,要能讓我們可在地圖上做最短路徑尋找,還需要我們自己根據(jù)實際業(yè)務(wù)和邏輯,做相應(yīng)的變種。
根據(jù)對當(dāng)前用戶的實時定位,通過最短路徑算法,便能實現(xiàn)動態(tài)路徑的規(guī)劃。這便使得我們的手繪電子地圖具備了最基礎(chǔ)、最重要的導(dǎo)航功能。
7.自動觸發(fā)的實現(xiàn)
通過實時定位獲取到用戶當(dāng)前位置,系統(tǒng)判斷位置是否和后臺設(shè)定的點位接近。當(dāng)距離已小于設(shè)置值的時候,電子地圖系統(tǒng)便自動展示當(dāng)前點位的介紹信息、語音講解,或者商家推送的優(yōu)惠券等。因此,我們的電子地圖系統(tǒng)便越來越智能了。
而在此基礎(chǔ)之上,我們可以相當(dāng)?shù)乃泄δ?,都可以加載到電子地圖系統(tǒng)上。由此我們的系統(tǒng)便優(yōu)化成為真正的“智慧導(dǎo)覽系統(tǒng)”。其他的更多的功能的實現(xiàn),我便不再贅述,只對下列三個比較特別的功能再做一些簡述。
8.多語言的實現(xiàn)
多語言是一個老生常談的需求,也是一個系統(tǒng)國際化所必備的功能。對于智慧導(dǎo)覽系統(tǒng)而言,我覺得有兩個值得注意的點:
(1)地圖本身的文案,包括提示信息、按鈕文字等。這可以在代碼層面做多語言的配置。 (2)地圖標(biāo)注點位相關(guān)的內(nèi)容,包括圖文介紹、語音講解等內(nèi)容,這里需要在后臺系統(tǒng)設(shè)計可添加多語言內(nèi)容的管理。
9.實現(xiàn)國內(nèi)國外可同時訪問地圖
這一點需求,是根據(jù)實際情況來提的。因為國內(nèi)和國外的地圖基本上不能互通,因此我們的智慧導(dǎo)覽系統(tǒng)應(yīng)當(dāng)解決這一痛點。
10.地圖路線的采集和標(biāo)注
系統(tǒng)的“動態(tài)路徑規(guī)劃”功能需要園區(qū)的路線數(shù)據(jù)為基礎(chǔ),因此系統(tǒng)應(yīng)當(dāng)提供路線采集和標(biāo)注的配套工具,方便工作人員從現(xiàn)場采集路線的經(jīng)緯度等信息。
五、結(jié)尾
本文是我個人基于“智慧導(dǎo)覽系統(tǒng)”開發(fā)經(jīng)驗的一個大致的概括。整體來講,寫得比較粗陋和簡略。很難作為一個方案或者教程,只當(dāng)是我個人做一個總結(jié)罷了。如有不當(dāng)之處,歡迎指正。也歡迎有興趣的一起討論。
體驗地圖