冉桂華 楊曄軒 殷浤益 馬云龍 戴璐鸞 李 蝶 楊元維
(1.長江大學 武漢 430100)(2.武漢市國土資源和規(guī)劃信息中心 武漢 430014)
關(guān)鍵字 美麗鄉(xiāng)村;鄉(xiāng)村旅游;熱力圖;動態(tài)監(jiān)測
“美麗鄉(xiāng)村”是建設(shè)社會主義新農(nóng)村的重大歷史任務時提出的“生產(chǎn)發(fā)展、生活寬裕、鄉(xiāng)風文明、村容整潔、管理民主”等具體要求[1]。現(xiàn)今越來越多游客選擇鄉(xiāng)村旅游,在旅游旺季鄉(xiāng)村通常因為人流聚集量過大而引發(fā)一系列問題,一些學者提出基于LBS人口數(shù)據(jù)可視化監(jiān)測系統(tǒng)[2]和基于軌跡停留點空間聚類的景區(qū)熱點分析[3]方法,這類方法通過不同的技術(shù)手段分別實現(xiàn)對人口和景區(qū)熱度的分析,但大多都以單一影像圖或表格等方式進行表達,均未能實現(xiàn)對某一特定對象的動態(tài)監(jiān)測?;诖?,本文提出利用熱力圖對景區(qū)人流量進行動態(tài)監(jiān)測并可視化方法,按不同時節(jié)呈現(xiàn)不同景區(qū)的人流量及時情況。使美麗鄉(xiāng)村游客可以預先了解這些景區(qū)的熱度,制定旅游計劃,并能為鄉(xiāng)村景區(qū)管理部門按人流量配置相應的安保人員及配套設(shè)施提供輔助決策。
熱力圖是以特殊高亮的形式顯示訪客熱衷的頁面區(qū)域和訪客所在地理區(qū)域的圖示,在地圖呈現(xiàn)方面主要是以不同顏色的區(qū)塊疊加在地圖上實時描述人群分布、密度和變化趨勢等[4~5]。利用熱力圖進行表達不僅比普通的點要素更炫目,而且更容易發(fā)現(xiàn)事件的發(fā)生頻率和事件分布密度。
canvas是生成熱力圖的必要元素,它是通過Ja?vaScript來繪制2D圖形[6]。渲染熱力圖首先要設(shè)置單點渲染模板,核心方法是canvas的createRadial?Gradient方法,為每個點設(shè)置渲染半徑,由漸變因子確定內(nèi)圓比例,內(nèi)圓與外圓的圓周間進行無色的放射漸變,達到中間透明度高,邊緣透明度低的效果。這個無色且透明度漸變的圓形即為點的模板;然后根據(jù)單點模板繪制全部點,核心方法是canvas的drawImage方法,在每個點的位置按照模板進行繪制,達到重疊部分透明度疊加的效果;再利用canvas的createLinearGradient方法構(gòu)建0~256的調(diào)色板;最后使用canvas的putImageData方法,對繪制的每個點進行著色,獲取繪制的區(qū)域中每個像素,根據(jù)像素的透明度去調(diào)色板中取對應的顏色進行渲染,最后達到熱力圖的效果[7~8]。
2.2.1 動態(tài)監(jiān)測
隨著科技的高速發(fā)展,各個領(lǐng)域都在思考怎么更好地利用高科技產(chǎn)品。為了更好地觀察事物和人的趨向,多使用攝像機、監(jiān)控、傳感器、統(tǒng)計的方式進行動態(tài)監(jiān)測[9~11]。動態(tài)監(jiān)測的用途廣泛,商業(yè)領(lǐng)域可以對動態(tài)監(jiān)測結(jié)果進行分析而做出更好的營銷策略,公共服務領(lǐng)域可以根據(jù)動態(tài)監(jiān)測結(jié)果制定各種應急解決方案更好地保障民眾的安全,群眾可以通過觀察動態(tài)監(jiān)測結(jié)果選擇出行方式等。
傳統(tǒng)的動態(tài)監(jiān)測通常是以影像或者數(shù)據(jù)表的形式來呈現(xiàn)監(jiān)測結(jié)果,往往不夠簡單易懂。本文是利用熱力圖對景區(qū)人流量進行動態(tài)監(jiān)測,設(shè)置不同時間段的數(shù)據(jù),然后拖動時間軸或者點擊播放按鈕來控制熱力圖的變化,不同時間節(jié)點將顯示不同的熱力圖。
2.2.2 熱力圖疊加優(yōu)化
熱力圖在疊加多次后,效果較為極端,會有大量數(shù)據(jù)接近峰值的情況,如果不進行優(yōu)化,渲染后就看不出過渡層級的變化。優(yōu)化算法的具體做法是用數(shù)組存儲value值,然后對數(shù)組進行歸一化,將歸一化的結(jié)果重新進行渲染。
數(shù)據(jù)歸一化處理通常被應用于數(shù)據(jù)挖掘方面,其處理指標往往具有不同的量綱和量綱單位,這樣的情況會影響到數(shù)據(jù)分析的結(jié)果,為了消除指標之間的量綱影響,需要進行數(shù)據(jù)標準化處理,以解決數(shù)據(jù)指標之間的可比性[12~14]。原始數(shù)據(jù)經(jīng)過數(shù)據(jù)歸一化處理后,各指標處于同一數(shù)量級,適合進行綜合對比評價。min-max標準化和Z-score標準化方法是兩種常用的歸一化方法,本文熱力圖選擇的處理方法是前者。min-max標準化也稱為離差標準化,是對原始數(shù)據(jù)的線性變換,使結(jié)果值映射到[0,1]之間[15]。轉(zhuǎn)換函數(shù)式(1)如下:
其中max為樣本數(shù)據(jù)的最大值,min為樣本數(shù)據(jù)的最小值。
在生成美麗鄉(xiāng)村景區(qū)的熱力圖時,需要各大景區(qū)的地理坐標信息,各大景區(qū)的坐標信息是將真實數(shù)據(jù)通過ArcServer發(fā)布成服務以供實驗使用,它是整個實驗過程的基礎(chǔ)部分。六大景區(qū)分別是中國大竹海、荷花山景區(qū)、龍王山景區(qū)、姚家大院、浙北大峽谷、石馬灣漂流。同時為了生成動態(tài)熱力圖,通過jRange滑動選取數(shù)值來控制熱力圖的變化,將一年分成四個節(jié)點,分別是1月、4月、8月、12月,因此需要這幾個月各大景區(qū)的人數(shù)信息,各大景區(qū)1月、4月、8月、12月的實驗人數(shù)信息如表1所示。
表1 各大景區(qū)1月、4月、8月、12月的人數(shù)信息表
3.2.1 熱力圖的數(shù)據(jù)裝填
數(shù)據(jù)是生成熱力圖的基礎(chǔ),通過調(diào)用服務查詢到各大景區(qū)的信息并以JSON格式輸出,然后將數(shù)據(jù)裝填到data數(shù)組中?!爸袊笾窈!本皡^(qū)的數(shù)據(jù)信息JSON代碼如下:
attributes:{count:570},//count為人數(shù)
geometry:{spatialReference:{wkid:4326},type:“point”,x:119.65,y:30.49}
其他景區(qū)的數(shù)據(jù)信息JSON代碼與上述代碼類似。
3.2.2 熱力圖的可視化
引用heatmap.js實現(xiàn)熱力圖的生成,如果heat?Layer不存在,則需要設(shè)置熱力圖的配置信息,其中包括半徑、漸變色、透明度等。將設(shè)置好配置信息的heatLayer圖層疊加到地圖上,然后通過setData方法將裝有數(shù)據(jù)的data數(shù)組設(shè)置為渲染數(shù)據(jù)。通過heatmap.js計算得出熱力圖,再將熱力圖顯示在地圖上。實現(xiàn)的關(guān)鍵代碼如下:
this.heatLayer=new HeatmapLayer({config:{“useLocalMaximum”:true,“radius”:40,“gradi?ent”:{0.45:“rgb(000,000,255)”,0.55:“rgb(000,255,255)”,0.65:“rgb(000,255,000)”,0.95:“rgb(255,255,000)”,1.00:“rgb(255,000,000)”}},“map”:map,“domNodeId”:“heatLayer”,“opacity”:0.85});//設(shè)置配置信息
map.addLayer(this.heatLayer);//疊加圖層
this.heatLayer.setData(this.data()[0]);//設(shè) 置渲染數(shù)據(jù)
this.heatLayer.show();//顯示熱力圖
3.2.3 景區(qū)人流量的動態(tài)監(jiān)測
使用jRange滑動選取數(shù)值來控制熱力圖的變化進行景區(qū)人流量的動態(tài)監(jiān)測,可以通過點擊播放按鈕使時間軸向前移動,也可以自行拖動時間軸。時間軸設(shè)有四個節(jié)點,分別為1、4、8、12,時間軸每向前移動到一個節(jié)點,就改變一次熱力圖。如點擊播放按鈕,時間軸移動到末尾節(jié)點時將回到起點并停止變化,熱力圖也變?yōu)橄鄳?,在時間軸移動的過程中可以點擊按鈕暫停變化。
實現(xiàn)時間節(jié)點向前移動一格的關(guān)鍵代碼如下:
$(‘.single-slider’).jRange(“setValue”,1+par?seInt(currentVal));
改變熱力圖的關(guān)鍵代碼如下:
var cVal=$(‘.single-slider’).jRange(“getVal?ue”);
if(currentVal<=12){
if((parseInt(currentVal)%4==0)||(parseInt(currentVal)==1)){
var data=relitu.heatLayer.lastData;
else if..............................................//在此處判斷節(jié)點并裝填對應月份各景區(qū)的人數(shù)數(shù)據(jù)。
relitu.heatLayer.refresh();//更新熱力圖
點擊景點熱度按鈕彈出初始熱力圖和時間軸,時間軸上有四個節(jié)點,依次為1、4、8、12,如圖1所示。點擊播放按鈕,時間節(jié)點每向前移動一格,熱力圖就發(fā)生一次變化,如圖2所示。自行拖動時間節(jié)點,每到一格,熱力圖就發(fā)生變化,變?yōu)樵摃r間節(jié)點對應的熱力圖,如圖3所示。
圖1 時間軸
熱力圖渲染顏色從淺到深表示舒適程度從非常舒適到非常擁擠。
圖2 自動播放熱力圖
從圖3可以看出1月和8月的熱力圖渲染顏色相對4月和12月更重一些,表明在1月和8月來此地游覽景點的人數(shù)較多,較為擁擠。在各個月份的熱力圖中由顏色的深淺可以看出六大景區(qū)的舒適程度,顏色越深代表越擁擠,顏色越淺代表越舒適。
圖3 拖動滑動條改變熱力圖
圖3 中拖動滑動條改變熱力圖的實現(xiàn)效果和圖2中利用播放按鈕控制熱力圖的變化的實現(xiàn)效果一樣,兩種不同的方式調(diào)用同樣的方法可以實現(xiàn)一樣的效果。
本文采用熱力圖的方式對景區(qū)人流量進行動態(tài)監(jiān)測并對結(jié)果進行可視化表達,到美麗鄉(xiāng)村旅游的游客可以根據(jù)監(jiān)測結(jié)果預先選擇適宜的景區(qū)和出游時間,同時當?shù)鼐用窨梢愿鶕?jù)游客的喜好發(fā)現(xiàn)更多的商機,從而帶動經(jīng)濟的進步。最重要的是當?shù)匕脖H藛T可以通過觀察動態(tài)監(jiān)測結(jié)果而更好地確保游客的安全,盡量避免踩踏等突發(fā)事件的發(fā)生。