一種地圖瓦片數(shù)據(jù)的發(fā)布方法
【專利摘要】本發(fā)明涉及一種地圖瓦片數(shù)據(jù)的發(fā)布方法,包括步驟有:(1)準備瓦片地圖數(shù)據(jù);(2)定義請求瓦片的路徑格式;(3)按上述步驟中的路徑格式請求瓦片;(4)請求接收器接收請求,并添加新任務(wù);(5)資源調(diào)度訪問資源池;(6)使用緩存管理算法,采用哈希鏈式表存儲方式進行資源池管理;(7)瓦片資源輸出。采用本發(fā)明方法編制的程序為輕量級服務(wù),安裝文件小,訪問路徑簡單明了,通過線程池管理,支持大并發(fā)的處理,響應(yīng)速度效果明顯提高。
【專利說明】一種地圖瓦片數(shù)據(jù)的發(fā)布方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于地理信息處理【技術(shù)領(lǐng)域】,尤其是一種地圖瓦片數(shù)據(jù)的發(fā)布方法。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)時代的迅猛發(fā)展,地理信息系統(tǒng)也大大提高了人們的日常生活質(zhì)量, 比如交通工具的導(dǎo)航、酒店的定位搜索等,這些都離不開地圖的可視化,這些地理背景圖都 來自地理專業(yè)的瓦片服務(wù)。瓦片是通過一定規(guī)則將地圖切割成相同尺寸大小的小圖片,當(dāng) 用戶訪問地圖時會請求每個小瓦片圖并通過客戶端程序拼接成一張當(dāng)前范圍的地圖圖片, 因為在互聯(lián)網(wǎng)上的請求并發(fā)量非常之大,瓦片服務(wù)的響應(yīng)效率成為用戶體驗好的關(guān)鍵所 在,本發(fā)明就是為了提高瓦片服務(wù)響應(yīng)效率,應(yīng)用面向資源的設(shè)計思想,研發(fā)的一種地圖瓦 片數(shù)據(jù)的發(fā)布方法。
[0003] 通過對國內(nèi)公開專利及其它文獻的檢索,沒有發(fā)現(xiàn)與本發(fā)明方法相近似的公開專 利及文獻。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種地圖瓦片數(shù)據(jù)的發(fā)布方法。
[0005] 本發(fā)明解決其技術(shù)問題是采取以下技術(shù)方案實現(xiàn)的:
[0006] 一種地圖瓦片數(shù)據(jù)的發(fā)布方法,包括步驟如下:
[0007] (1)準備瓦片地圖數(shù)據(jù);具體包括步驟有:
[0008] ①將地圖數(shù)據(jù)進行切片,并將切片的地圖數(shù)據(jù)進行存儲,存儲路徑格式依次為: 瓦片業(yè)務(wù)命名,瓦片所在層級命名,瓦片所在的行號命名及瓦片所在的列號命名;
[0009] ②將瓦片數(shù)據(jù)文件夾保存到服務(wù)器硬盤的路徑下;
[0010] (2)定義請求瓦片的路徑格式,包括瓦片服務(wù)的工程名、瓦片服務(wù)統(tǒng)一訪問風(fēng)格標 識、請求瓦片的層級、行號及列號;
[0011] (3)按上述步驟中的路徑格式請求瓦片;
[0012] (4)請求接收器接收請求,并添加新任務(wù),具體方法為:
[0013] ①判斷線程池中的基本線程池是否已滿,如果沒滿,將立刻創(chuàng)建一個新的線程來 執(zhí)行瓦片請求任務(wù),如果已滿,則進入下個流程;
[0014] ②判斷線程池中的瓦片請求任務(wù)隊列是否已滿,如果沒滿,則將新提交的瓦片請 求任務(wù)存儲在瓦片請求任務(wù)隊列里,如果已滿,則進入下個流程;
[0015] ③判斷線程池中的所有線程是否已滿,如果沒滿,將創(chuàng)建一個新的線程來執(zhí)行瓦 片請求任務(wù),如果已滿,則拋出異常并記錄日志;
[0016] ④根據(jù)線程執(zhí)行任務(wù);
[0017] (5)資源調(diào)度訪問資源池,具體方法為:
[0018] ①訪問資源池內(nèi)存,資源池調(diào)用方法首先到資源池的內(nèi)存中查找瓦片對象,如果 內(nèi)存中有瓦片對象,將直接從該資源池內(nèi)存中取得瓦片對象并返回給資源調(diào)度對象;
[0019] ②如果沒有從資源池緩存中找到瓦片對象,將訪問資源池的物理路徑;
[0020] (6)使用緩存管理算法,采用哈希鏈式表存儲方式進行資源池管理;
[0021] (7)瓦片資源輸出,將資源調(diào)度返回的瓦片對象流輸出到步驟(3)中的請求路徑。
[0022] 而且,所述步驟(4)中④根據(jù)線程執(zhí)行任務(wù)的具體方法為:
[0023] A、格式化瓦片映射唯一標識為:瓦片的服務(wù)器文件夾物理路徑\瓦片層級數(shù)\瓦 片所在的行數(shù)\瓦片所在的列數(shù);
[0024] B、通過資源調(diào)度對象,訪問資源池,執(zhí)行步驟(5)。
[0025] 而且,所述步驟(5)中②訪問資源池的物理路徑的方法為:如果沒有從資源池緩 存中找到瓦片對象,那么將通過步驟(4)中④的格式化請求路徑去物理存儲硬盤中讀取并 創(chuàng)建瓦片對象,最后返回給資源調(diào)度對象,同時將該瓦片對象添加到資源池內(nèi)存里。
[0026] 而且,所述步驟(6)使用緩存管理算法,采用哈希鏈式表存儲方式進行資源池管 理的具體方法為;
[0027] ①將最近請求的瓦片從物理存儲加載到資源池緩存鏈表頭部;
[0028] ②每當(dāng)緩存瓦片對象數(shù)據(jù)被訪問,則將瓦片對象數(shù)據(jù)移到鏈表頭部;
[0029] ③當(dāng)鏈表滿的時候,將鏈表尾部的瓦片對象數(shù)據(jù)丟棄。
[0030] 本發(fā)明的優(yōu)點和積極效果是:
[0031] 1、采用本發(fā)明方法編制的程序為輕量級服務(wù),安裝文件小。
[0032] 2、本發(fā)明方法訪問路徑簡單明了。
[0033] 3、通過本發(fā)明的線程池管理,支持大并發(fā)的處理,響應(yīng)速度效果明顯提高。
【專利附圖】
【附圖說明】
[0034] 圖1是本發(fā)明所使用的部署瓦片服務(wù)的工作邏輯圖;
[0035] 圖2是本發(fā)明中請求接收器接收請求,并添加新任務(wù)的工作邏輯圖;
[0036] 圖3是本發(fā)明中資源池管理的方法示意圖。
【具體實施方式】
[0037] 以下結(jié)合附圖對本發(fā)明實施做進一步詳述,以下實施例只是描述性的,不是限定 性的,不能以此限定本發(fā)明的保護范圍。
[0038] -種地圖瓦片數(shù)據(jù)的發(fā)布方法,如圖1所示,包括步驟如下:
[0039] (1)準備瓦片地圖數(shù)據(jù);包括步驟有:
[0040] ①將地圖數(shù)據(jù)進行切片,并將切片的地圖數(shù)據(jù)進行存儲,存儲路徑格式依次為: 瓦片業(yè)務(wù)命名,瓦片所在層級命名,瓦片所在的行號命名及瓦片所在的列號命名,如:
[0041] C:\vec\Ll\R2\C3. png ;其中,vec代表瓦片業(yè)務(wù)命名,L1表示瓦片所在層級為1, R2表不瓦片所在的行號為2, C3表不瓦片所在的列號為3 ;
[0042] ②將瓦片數(shù)據(jù)文件夾保存到服務(wù)器硬盤的某個路徑下,如C: \vec ;
[0043] (2)定義請求瓦片的路徑(URL)格式,包括瓦片服務(wù)的工程名、瓦片服務(wù)統(tǒng)一 訪問風(fēng)格標識、請求瓦片的層級、行號及列號,如:http://IP地址:端口 /web工程名/ rest/1/2/3,其中,vec為web工程名即瓦片服務(wù)的工程名,rest為瓦片服務(wù)統(tǒng)一訪問風(fēng)格 標識,1為請求瓦片的層級,2為請求瓦片的行號,3為請求瓦片的列號;
[0044] (3)瓦片資源請求,按(2)步驟中的路徑格式請求瓦片;
[0045] (4)請求接收器接收請求,并添加新任務(wù),如圖2所示,具體步驟如下:
[0046] ①判斷線程池中的基本線程池是否已滿,如果沒滿,將立刻創(chuàng)建一個新的線程來 執(zhí)行瓦片請求任務(wù),如果已滿,則進入下個流程;
[0047] ②判斷線程池中的瓦片請求任務(wù)隊列是否已滿,如果沒滿,則將新提交的瓦片請 求任務(wù)存儲在瓦片請求任務(wù)隊列里,如果已滿,則進入下個流程;
[0048] ③判斷線程池中的所有線程是否已滿,如果沒滿,將創(chuàng)建一個新的線程來執(zhí)行瓦 片請求任務(wù),如果已滿,則拋出異常并記錄日志;
[0049] ④根據(jù)線程執(zhí)行任務(wù);
[0050] A、格式化瓦片映射唯一標識為:瓦片的服務(wù)器文件夾物理路徑\瓦片層級數(shù)\瓦 片所在的行數(shù)\瓦片所在的列數(shù),如(C:\vec\Ll\R2\C3. png)
[0051] B、通過資源調(diào)度對象,訪問資源池,執(zhí)行步驟(5)
[0052] (5)資源調(diào)度訪問資源池,步驟為:
[0053] ①訪問資源池內(nèi)存,資源池調(diào)用方法首先到資源池的內(nèi)存中查找瓦片對象,如果 內(nèi)存中有瓦片對象,將直接從該資源池內(nèi)存中取得瓦片對象并返回給資源調(diào)度對象
[0054] ②訪問資源池的物理路徑,如果沒有從資源池緩存中找到瓦片對象,那么將通過 (4)中④的格式化請求路徑去物理存儲硬盤中讀取并創(chuàng)建瓦片對象,最后返回給資源調(diào)度 對象,同時將該瓦片對象添加到資源池內(nèi)存里;
[0055] (6)資源池管理,如圖3所示,應(yīng)用最近最少使用(LRU)緩存管理算法,采用哈希鏈 式表(LinkedHashMap)存儲方式進行資源池管理;
[0056] ①將最近請求的瓦片從物理存儲加載到資源池緩存鏈表頭部;
[0057] ②每當(dāng)緩存瓦片對象數(shù)據(jù)被訪問,則將瓦片對象數(shù)據(jù)移到鏈表頭部;
[0058] ③當(dāng)鏈表滿的時候,將鏈表尾部的瓦片對象數(shù)據(jù)丟棄;
[0059] (7)瓦片資源輸出,將資源調(diào)度返回的瓦片對象流輸出到步驟(3)中的請求路徑。
[0060] 實例
[0061] (1)準備瓦片地圖數(shù)據(jù)
[0062] ①將地圖數(shù)據(jù)進行切片,存儲路徑格式為C: \vec\Ll\R2\C3. png ;
[0063] ②將瓦片數(shù)據(jù)文件夾保存到服務(wù)器硬盤的C: \vec路徑下;
[0064] (2)定義請求瓦片的路徑(URL)格式
[0065] 路徑:http://10. 120. 20. 244:7001/vec/rest/l/2/3
[0066] (3)瓦片資源請求,按⑵步驟中路徑格式請求瓦片,同時發(fā)送100個請求
[0067] (4)每個請求被接收后將分別執(zhí)行以下相同操作
[0068] ①判斷線程池中的基本線程是否已滿,如果沒滿,將立刻創(chuàng)建一個新的線程來執(zhí) 行瓦片請求任務(wù),如果已滿,則進入下個流程。
[0069] ②判斷線程池中的瓦片請求任務(wù)隊列是否已滿,如果沒滿,則將新提交的瓦片請 求任務(wù)存儲在瓦片請求任務(wù)隊列里,如果已滿,則進入下個流程。
[0070] ③判斷線程池中的所有線程是否已滿,如果沒滿,將創(chuàng)建一個新的線程來執(zhí)行瓦 片請求任務(wù),如果已滿,則拋出異常并記錄日志。
[0071] ④線程執(zhí)行任務(wù),
[0072] A,格式化瓦片映射唯一標識為:瓦片的服務(wù)器文件夾物理路徑\瓦片層級\瓦片 所在的行數(shù)\瓦片所在的列數(shù),如(C:\vec\Ll\R2\C3. png)
[0073] B,通過資源調(diào)度對象,訪問資源池,執(zhí)行(5)
[0074] (5)資源調(diào)度訪問資源池,資源池調(diào)用方法到資源池的內(nèi)存中查找瓦片對象,如果 內(nèi)存中已經(jīng)存在上述(4)中請求的瓦片對象,將直接取出返回,如果有的請求瓦片對象在 內(nèi)存中沒有,將去物理地址獲取瓦片對象;
[0075] (6)資源池管理,如圖3所示,應(yīng)用最近最少使用(LRU)緩存管理算法,采用哈希鏈 式表(LinkedHashMap)存儲方式;
[0076] (7)瓦片資源輸出,將資源調(diào)度返回的瓦片對象流輸出到(3)中的請求路徑。
[0077] 效果
[0078] 使用一款并發(fā)測試工具(jmeter)測試,對平臺的并發(fā)能力進行了測試,測試表 明,本瓦片服務(wù)在并發(fā)1000的時候平均返回時間14毫秒,ArcGISServer的平均返回時間 18毫秒。
【權(quán)利要求】
1. 一種地圖瓦片數(shù)據(jù)的發(fā)布方法,其特征在于包括步驟如下: (1) 準備瓦片地圖數(shù)據(jù);具體包括步驟有: ① 將地圖數(shù)據(jù)進行切片,并將切片的地圖數(shù)據(jù)進行存儲,存儲路徑格式依次為:瓦片 業(yè)務(wù)命名,瓦片所在層級命名,瓦片所在的行號命名及瓦片所在的列號命名; ② 將瓦片數(shù)據(jù)文件夾保存到服務(wù)器硬盤的路徑下; (2) 定義請求瓦片的路徑格式,包括瓦片服務(wù)的工程名、瓦片服務(wù)統(tǒng)一訪問風(fēng)格標識、 請求瓦片的層級、行號及列號; (3) 按上述步驟中的路徑格式請求瓦片; (4) 請求接收器接收請求,并添加新任務(wù),具體方法為: ① 判斷線程池中的基本線程池是否已滿,如果沒滿,將立刻創(chuàng)建一個新的線程來執(zhí)行 瓦片請求任務(wù),如果已滿,則進入下個流程; ② 判斷線程池中的瓦片請求任務(wù)隊列是否已滿,如果沒滿,則將新提交的瓦片請求任 務(wù)存儲在瓦片請求任務(wù)隊列里,如果已滿,則進入下個流程; ③ 判斷線程池中的所有線程是否已滿,如果沒滿,將創(chuàng)建一個新的線程來執(zhí)行瓦片請 求任務(wù),如果已滿,則拋出異常并記錄日志; ④ 根據(jù)線程執(zhí)行任務(wù); (5) 資源調(diào)度訪問資源池,具體方法為: ① 訪問資源池內(nèi)存,資源池調(diào)用方法首先到資源池的內(nèi)存中查找瓦片對象,如果內(nèi)存 中有瓦片對象,將直接從該資源池內(nèi)存中取得瓦片對象并返回給資源調(diào)度對象; ② 如果沒有從資源池緩存中找到瓦片對象,將訪問資源池的物理路徑; (6) 使用緩存管理算法,采用哈希鏈式表存儲方式進行資源池管理; (7) 瓦片資源輸出,將資源調(diào)度返回的瓦片對象流輸出到步驟(3)中的請求路徑。
2. 根據(jù)權(quán)利要求1所述的地圖瓦片數(shù)據(jù)的發(fā)布方法,其特征在于:所述步驟(4)中④ 根據(jù)線程執(zhí)行任務(wù)的具體方法為: A、 格式化瓦片映射唯一標識為:瓦片的服務(wù)器文件夾物理路徑\瓦片層級數(shù)\瓦片所 在的行數(shù)\瓦片所在的列數(shù); B、 通過資源調(diào)度對象,訪問資源池,執(zhí)行步驟(5)。
3. 根據(jù)權(quán)利要求1或2所述的地圖瓦片數(shù)據(jù)的發(fā)布方法,其特征在于:所述步驟(5)中 ②訪問資源池的物理路徑的方法為:如果沒有從資源池緩存中找到瓦片對象,那么將通過 步驟(4)中④的格式化請求路徑去物理存儲硬盤中讀取并創(chuàng)建瓦片對象,最后返回給資源 調(diào)度對象,同時將該瓦片對象添加到資源池內(nèi)存里。
4. 根據(jù)權(quán)利要求1所述的地圖瓦片數(shù)據(jù)的發(fā)布方法,其特征在于:所述步驟(6)使用 緩存管理算法,采用哈希鏈式表存儲方式進行資源池管理的具體方法為; ① 將最近請求的瓦片從物理存儲加載到資源池緩存鏈表頭部; ② 每當(dāng)緩存瓦片對象數(shù)據(jù)被訪問,則將瓦片對象數(shù)據(jù)移到鏈表頭部; ③ 當(dāng)鏈表滿的時候,將鏈表尾部的瓦片對象數(shù)據(jù)丟棄。
【文檔編號】G06F17/30GK104156482SQ201410424596
【公開日】2014年11月19日 申請日期:2014年8月26日 優(yōu)先權(quán)日:2014年8月26日
【發(fā)明者】高勇, 趙光俊, 朱傳晶, 劉萬龍 申請人:天津市普迅電力信息技術(shù)有限公司