基于空間計算域相似度匹配的網(wǎng)絡(luò)地圖預(yù)加載方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)地理信息系統(tǒng)技術(shù),尤其是一種基于空間計算域相似度匹配的網(wǎng) 絡(luò)地圖預(yù)加載方法。
【背景技術(shù)】
[0002] 網(wǎng)絡(luò)地圖的預(yù)加載是網(wǎng)絡(luò)地理信息系統(tǒng)(WebGIS)中需要解決的重要問題之一,將 網(wǎng)絡(luò)地圖歷史訪問數(shù)據(jù)存儲到客戶端本地緩存,能夠提高下一次訪問相同地理位置的網(wǎng)絡(luò) 地圖的效率,但在訪問新的沒有訪問過的網(wǎng)絡(luò)地圖數(shù)據(jù)時,由于在客戶端緩存中不存在目 標網(wǎng)絡(luò)地圖數(shù)據(jù),用戶需要長時間等待新的網(wǎng)絡(luò)地圖數(shù)據(jù)逐個實時加載,地圖顯示效率低, 降低了網(wǎng)絡(luò)地圖用戶的操作體驗。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明要解決的技術(shù)問題在于針對現(xiàn)有技術(shù)中的缺陷,提供一種基于空間計算域 相似度匹配的網(wǎng)絡(luò)地圖預(yù)加載方法。
[0004] 本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種基于空間計算域相似度匹配的 網(wǎng)絡(luò)地圖預(yù)加載方法,包括以下步驟:
[0005] 1)建立用于存儲歷史訪問地圖記錄的空間計算域數(shù)據(jù)庫;所述數(shù)據(jù)庫中的數(shù)據(jù)記 錄字段如下{標識,瓦片名稱,瓦片起始行號,瓦片起始列號,瓦片結(jié)束行號,瓦片結(jié)束列號, 瓦片級數(shù),訪問時間};
[0006] 2)初始化地圖容器對象map,設(shè)置地圖原點(〇X,〇y),創(chuàng)建瓦片地圖圖層類對象實 例,設(shè)置瓦片地圖圖層名name,將瓦片地圖圖層添加到地圖容器中,添加地圖容器的地圖變 化事件的事件監(jiān)聽,調(diào)用瓦片地圖服務(wù)接口獲取瓦片地圖元數(shù)據(jù)信息,從中獲取瓦片地圖 空間范圍;
[0007] 3)當?shù)貓D可視化范圍發(fā)生變化時,獲取map對象當前可視地圖空間范圍;計算當前 瓦片地圖空間計算域的地理空間范圍;
[0008] 4)取地圖容器map當前地圖級別和當前地圖級別的分辨率,計算當前瓦片地圖空 間計算域訪問的瓦片數(shù)據(jù)的起止行列范圍
[0009] 5)在空間計算域數(shù)據(jù)庫中查詢與當前空間計算域請求的瓦片數(shù)據(jù)相似度匹配最 佳的空間計算域數(shù)據(jù)記錄;
[0010] 6)若找到,則預(yù)加載該相似度匹配最佳的空間計算域的下一條空間計算域數(shù)據(jù)記 錄。
[0011] 按上述方案,步驟6)中,查找到相似度匹配最佳的空間計算域數(shù)據(jù)記錄后,根據(jù)相 似度匹配最佳的空間計算域的數(shù)據(jù)記錄的標識,查詢該記錄的下一條空間計算域數(shù)據(jù)記 錄,并循環(huán)預(yù)加載目標空間計算域訪問的所有瓦片圖像。
[0012] 按上述方案,所述步驟5)中查詢與當前空間計算域請求的瓦片數(shù)據(jù)相似度匹配最 佳的空間計算域數(shù)據(jù)記錄具體如下:
[0013] 5.1)在數(shù)據(jù)表中查詢與當前空間計算域請求的瓦片名稱和瓦片級別相同的空間 計算域記錄,記為數(shù)組accordltems
[0014] 5.2)若accordltems的數(shù)組大小大于0,則需要依次對accordltems數(shù)組中的每一 項進行分析,如果accordltems數(shù)組中的第i項(即accordItems[i])與當前瓦片地圖空間計 算域有交集,則計算accordItems[i]與當前瓦片地圖空間計算域之間的相同的瓦片塊數(shù) 量,瓦片塊數(shù)量記為8;[1]1;[1&1';^7 ;如果&(^(^(11〖61]18[;[]與當前瓦片地圖空間計算域沒有交 集,則繼續(xù)進行下一個數(shù)據(jù)項的空間計算域相似度分析;
[0015] 5.3)根據(jù)計算結(jié)果,找到simi larity大于0且similarity最大的數(shù)組項集合 maxAccordlterns;如果數(shù)組項集合的數(shù)組大小等于0,則停止瓦片數(shù)據(jù)預(yù)加載過程;如果數(shù) 組項集合的數(shù)組大小等于1,則對應(yīng)的空間計算域記錄為與當前空間計算域相似度匹配最 佳的空間計算域;如果maxAc cord I terns的數(shù)組大小大于1,則將訪問時間最新的一條記錄作 為與當前空間計算域相似度匹配最佳的空間計算域。
[0016] 本發(fā)明產(chǎn)生的有益效果是:本發(fā)明能夠基于空間計算域的歷史訪問數(shù)據(jù)進行空間 計算域相似度匹配,預(yù)測下一步最有可能訪問的空間計算域,提前預(yù)加載下一步可能訪問 的網(wǎng)絡(luò)地圖數(shù)據(jù),提高網(wǎng)絡(luò)地圖數(shù)據(jù)的顯示效率,增強網(wǎng)絡(luò)地圖服務(wù)網(wǎng)站的用戶檢驗。
【附圖說明】
[0017] 下面將結(jié)合附圖及實施例對本發(fā)明作進一步說明,附圖中:
[0018] 圖1是本發(fā)明的方法流程圖;
[0019] 圖2是本發(fā)明以基于Openlayers和HTML5的網(wǎng)絡(luò)地圖預(yù)加載功能為實施例的方法 流程圖。
【具體實施方式】
[0020] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合實施例,對本發(fā)明 進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限 定本發(fā)明。
[0021] 如圖1所示,一種基于空間計算域相似度匹配的網(wǎng)絡(luò)地圖預(yù)加載方法,其包括以下 步驟:
[0022] 步驟1:初始化地圖容器對象map,設(shè)置地圖原點(〇X,〇y),創(chuàng)建瓦片地圖圖層類對 象實例,設(shè)置瓦片地圖圖層名name,將瓦片地圖圖層添加到地圖容器中,添加地圖容器的地 圖變化事件的事件監(jiān)聽,設(shè)置該事件的回調(diào)函數(shù)eventsCallBack。調(diào)用瓦片地圖服務(wù)接口 獲取瓦片地圖元數(shù)據(jù)信息,從中獲取瓦片地圖空間范圍mapValidExtent(mapSx,mapSy, mapEx,mapEy)〇
[0023] 判斷客戶端是否存在空間計算域數(shù)據(jù)庫userHistoryFootprintDB和數(shù)據(jù)表 11861'取81:〇^。如果不存在,則初始化數(shù)據(jù)庫118 61']^81:(^5^〇〇丨卩1';[11丨013,以及數(shù)據(jù)表 userHistory,如表1所示;反之,不作處理;
[0024] 表1瓦片地圖空間計算域的數(shù)據(jù)表(userHistory)結(jié)構(gòu)
[0025]
[0026] 步驟2 :當?shù)貓D可視化范圍發(fā)生變化時,獲取map對象當前可視地圖空間范圍 bounds(viewSx,viewSy,viewEx,viewEy) 〇計算mapValidExtent與bounds的相交空間范圍 mapBounds(boxSx,boxSy,boxEx,boxEy),mapBounds為當前瓦片地圖空間計算域的地理空 間范圍。mapBounds的計算公式如公式(1)-(4)所示:
[0027] boxSx=Max(mapSx,viewSx)公式(1)
[0028] boxSy=Max(mapSy,viewSy)公式(2)
[0029] boxEx=Min(mapEx,viewEx)公式(3)
[0030] boxEy=Min(mapEy,viewEy)公式(4)
[0031 ] 步驟3:獲取地圖容器map當前地圖級別level和當前地圖級別的分辨率res,計算 當前瓦片地圖空間計算域訪問的瓦片數(shù)據(jù)的起止行列范圍,包括:起始行(sx)、起始列 (sy)、結(jié)束行(ex)、結(jié)束列(ey),其計算公式如公式(5)-(8)所示。將當前瓦片地圖空間計算 域的起止行列范圍、瓦片圖層名稱name、瓦片級別level和當前訪問時間time作為當前的瓦 片地圖空間計算域的數(shù)據(jù)記錄。設(shè)當前空間計算域為curRecordltem,單張瓦片的高寬均為 256像素。
[0032] sx = boxSx_ox/(res*256)公式(5)
[0033] sy = oy_boxEy/(res*256)公式(6)
[0034] ex = boxEx_ox/(res*256)公式(7)
[0035] ey = oy_boxSy/(res*256)公式(8)
[0036] 步驟4:構(gòu)造空間計算域數(shù)據(jù)庫查詢sql語句,調(diào)用數(shù)據(jù)庫操作函數(shù)從userHistory 數(shù)據(jù)表中查詢與當前空間計算域請求的瓦片名稱和瓦片級別相同的空間計算域記錄數(shù)組 已(3(3(^(1]^61118。如果3(^(^(1]^61118的數(shù)組大小等于0,則11861']^81:〇巧數(shù)據(jù)表中沒有與當前空 間計算域相似的數(shù)據(jù)記錄,停止瓦片數(shù)據(jù)預(yù)加載過程,轉(zhuǎn)步驟6;如accordl terns的數(shù)組大小 大于〇,則需要依次對accordltems數(shù)組中的每一項進行分析,如果accordltems數(shù)組中的第 i項(即accordItems[i])與當前瓦片地圖空間計算域有交集,則計算accordItems[i]與當 前瓦片地圖空間計算域之間的相同的瓦片塊數(shù)量,將其作為瓦片地圖空間計算域相似度 (similarity)評價依據(jù);如果accordltems[i]與當前瓦片地圖空間計算域沒有交集,貝lj s imi lari ty = 0,繼續(xù)進行下一個數(shù)據(jù)項的空間計算域相似度分析。
[0037] 根據(jù)計算結(jié)果,找到similarity大于0且similarity最大的數(shù)組項集合 maxAccordltems。如果maxAccordltems的數(shù)組大小等于0,則停止瓦片數(shù)據(jù)預(yù)加載過程,轉(zhuǎn) 步驟6;如果maxAccordltems的數(shù)組大小等于1,則maxAccordItems[0]為與當前空間計算域 相似度匹配最佳的空間計算域;如果maxAccordltems的數(shù)組大小大于1,則依據(jù)每一項空間 計算域的訪問時間(time)進行選擇,將訪問時間最新的一條記錄作為與當前空間計算域相 似度匹配最佳的空間計算域。設(shè)找到的與當前空間計算域相似度匹配最佳的空間計算域數(shù) 據(jù)記錄的id值為target ID。
[0038] 步驟5:根據(jù)相似度匹配最佳的空間計算域的數(shù)據(jù)記錄的標識(id),從 userHi story數(shù)據(jù)表中查詢id = targetID+l的空間計算域數(shù)據(jù)記錄,獲得該瓦片地圖空間 計算域的name,sx,sy,ex,ey,level。如果該數(shù)據(jù)記錄不存在,則停止瓦片數(shù)據(jù)預(yù)加載過程, 轉(zhuǎn)步驟6;如果目標記錄存在,則通過創(chuàng)建html中的img控件循環(huán)預(yù)加載目標空間計算域訪 問的所有瓦片圖像。
[0039] 步驟6:調(diào)用數(shù)據(jù)庫操作函數(shù),將當前瓦片地圖空間計算域[name,sx,sy,ex,ey, level,time]添加到數(shù)據(jù)表userHistory中。結(jié)束。
[0040] 本發(fā)明最明顯的不同在于利用了 html5中的瀏覽器離線數(shù)據(jù)庫存儲功能,將空間 計算域訪問歷史記錄存儲在瀏覽器客戶端,每次地圖發(fā)生變化時,從客戶端本地的空間計 算域歷史數(shù)據(jù)庫查找到與當前空間計算域相似度匹配最佳的歷史空間計算域,然后預(yù)加載 最佳匹配的空間計算域的下一條空間計算域所訪問的網(wǎng)絡(luò)地圖數(shù)據(jù),并提前存儲到瀏覽器 的本地緩存中,當用戶進行下一步地圖操作時,已緩存過的網(wǎng)絡(luò)地圖數(shù)據(jù)可以直接從本地 緩存讀取,提高網(wǎng)絡(luò)地圖數(shù)據(jù)的顯示速度,增強用戶體驗,尤其是在低帶寬網(wǎng)絡(luò)環(huán)境下,該 方法的優(yōu)勢更加明顯。
[0041] 實施例一:
[0042] 為了更清晰的說明本發(fā)明的思想,下面結(jié)合附圖2,對基于空間計算域相似度匹配 的瓦片地圖預(yù)加載方法進行進一步的說明,以O(shè)penlayers開發(fā)庫作為地圖顯示框架,使用 HTML5中的本地存儲技術(shù)實現(xiàn)瓦片地圖空間計算域的存儲,單張瓦片的高