地圖數(shù)據(jù)生成方法和裝置、地圖數(shù)據(jù)讀取方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及地圖技術(shù)領(lǐng)域,特別是涉及地圖數(shù)據(jù)生成方法和裝置、地圖數(shù)據(jù)讀取 方法和裝置。
【背景技術(shù)】
[0002] 在網(wǎng)絡(luò)地圖服務(wù)中,界面中顯示的圖幅內(nèi)容是由顯示級(jí)數(shù)和坐標(biāo)范圍決定的,顯 示級(jí)數(shù)相當(dāng)于放大和縮小的功能,不同級(jí)數(shù)顯示的比例尺不同。在實(shí)際應(yīng)用中,往往用地圖 瓦片技術(shù)將圖幅內(nèi)容切分成瓦片進(jìn)行存儲(chǔ)和展現(xiàn)的。
[0003] 地圖瓦片技術(shù),是將某個(gè)范圍的空間數(shù)據(jù)渲染為不同分辨率的圖片,并對(duì)其進(jìn)行 分塊,從包括某個(gè)范圍的數(shù)據(jù)地圖圖片的左上角開(kāi)始,從左至右、從上到下進(jìn)行切割,分割 成相同大?。ㄍǔ?56x256像素)的正方形地圖瓦片。通常,將全世界范圍的空間數(shù)據(jù) 縮放在一個(gè)瓦片范圍內(nèi)的比例尺級(jí)別,稱之為0級(jí),是最小分辨率級(jí)別。下一比例尺級(jí)別為 第1級(jí)別,分辨率為〇級(jí)的2倍,即2*2個(gè)瓦片表達(dá)全世界范圍。以此類推,形成0~N級(jí) 地圖瓦片。那么,給定一個(gè)級(jí)數(shù)和X、y坐標(biāo)就可以唯一確定一個(gè)瓦片。
[0004] 在實(shí)際生成可以線上使用的地圖包文件時(shí),首先將實(shí)際的地圖數(shù)據(jù)按層級(jí)的空間 范圍劃分瓦片,比如將0級(jí)的地圖數(shù)據(jù)劃分為N個(gè)瓦片,每個(gè)瓦片對(duì)應(yīng)一個(gè)源數(shù)據(jù);將1級(jí) 的地圖數(shù)據(jù)分為N個(gè)瓦片,每個(gè)瓦片對(duì)應(yīng)一個(gè)源數(shù)據(jù),依此類推。在存儲(chǔ)瓦片的源數(shù)據(jù)時(shí)以 瓦片key和源數(shù)據(jù)的對(duì)應(yīng)關(guān)系進(jìn)行存儲(chǔ)。其中,如果地圖數(shù)據(jù)中比如海洋等地理特征,在地 圖數(shù)據(jù)中的是以單一顏色設(shè)置的,其也會(huì)切分為一個(gè)瓦片。然后以每個(gè)源數(shù)據(jù)為基礎(chǔ)生成 一個(gè)瓦片柵格數(shù)據(jù),并構(gòu)建每個(gè)瓦片柵格數(shù)據(jù)的索引,從而構(gòu)建地圖包文件。那么在后續(xù)用 戶發(fā)送地圖查詢請(qǐng)求時(shí),就通過(guò)索引查找到相關(guān)的瓦片柵格數(shù)據(jù)進(jìn)行展示。
[0005] 但是,在傳統(tǒng)的地圖包文件的生成過(guò)程中,采用哈希算法對(duì)瓦片柵格數(shù)據(jù)構(gòu)建索 弓丨,如果出現(xiàn)哈希沖突,其處理過(guò)程會(huì)變得繁瑣,計(jì)算效率低,打包過(guò)程效率也低。并且地圖 包文件的生成過(guò)程中,會(huì)對(duì)所有源數(shù)據(jù)生成瓦片柵格數(shù)據(jù),但是如果地圖的源數(shù)據(jù)是類似 海洋等地理特征,其以單一顏色表示的瓦片,對(duì)其生成瓦片柵格數(shù)據(jù)實(shí)際上是沒(méi)有意義的, 并不需要進(jìn)行存儲(chǔ),但是傳統(tǒng)的構(gòu)建過(guò)程也對(duì)其進(jìn)行了存儲(chǔ),也導(dǎo)致打包效率低。
[0006] 而基于上述包文件,在瓦片柵格數(shù)據(jù)的讀取過(guò)程中,由于哈希算法是散列的,在后 續(xù)讀取地圖數(shù)據(jù)的過(guò)程中需要遍歷哈希表,其查詢瓦片柵格數(shù)據(jù)效率也很低。并且由于地 圖包文件的索引對(duì)所有的瓦片柵格數(shù)據(jù)均進(jìn)行記錄,查詢時(shí)也會(huì)進(jìn)行查詢,導(dǎo)致查詢效率 低。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明提供了一種地圖數(shù)據(jù)生成方法和裝置、地圖數(shù)據(jù)讀取方法和裝置,以解決 采用哈希算法打包地圖數(shù)據(jù)的情況下,打包效率低,并且導(dǎo)致后續(xù)讀取地圖數(shù)據(jù)的效率也 低的問(wèn)題。
[0008] 為了解決上述問(wèn)題,本發(fā)明實(shí)施例公開(kāi)了一種地圖數(shù)據(jù)生成的方法,包括:
[0009] 將地圖數(shù)據(jù)中的各瓦片所屬空間范圍的瓦片定位標(biāo)識(shí)映射為連續(xù)有序的第一索 引標(biāo)識(shí);所述第一索引標(biāo)識(shí)與前置索引中的第一索引位置按序一一對(duì)應(yīng);
[0010] 針對(duì)每個(gè)瓦片生成對(duì)應(yīng)的瓦片柵格數(shù)據(jù),并分別將瓦片柵格數(shù)據(jù)的存在狀態(tài)寫(xiě)入 前置索引中的與所述第一索引標(biāo)識(shí)對(duì)應(yīng)的第一索引位置;
[0011] 根據(jù)所述前置索引中各第一索引位置記錄的存在狀態(tài),確定入口索引中與所述第 一索引標(biāo)識(shí)對(duì)應(yīng)的第二索引位置,并在第二索引位置記錄所述瓦片柵格數(shù)據(jù)在目標(biāo)存儲(chǔ)空 間中的存儲(chǔ)地址。
[0012] 本發(fā)明還公開(kāi)了一種地圖數(shù)據(jù)讀取的方法,包括:
[0013] 獲取被請(qǐng)求的各瓦片的瓦片定位標(biāo)識(shí);
[0014] 將各瓦片定位標(biāo)識(shí)分別映射為連續(xù)有序的第一索引標(biāo)識(shí);
[0015] 針對(duì)每個(gè)第一索引標(biāo)識(shí),分別查找前置索引中與所述第一索引標(biāo)識(shí)所對(duì)應(yīng)的第一 索引位置記錄的存在狀態(tài)是否為存在;所述前置索引的各第一索引位置按序與由所有瓦片 定位標(biāo)識(shí)映射得到的連續(xù)有序的第一索引標(biāo)識(shí)一一對(duì)應(yīng);所述前置索引用于記錄所述第一 索引標(biāo)識(shí)對(duì)應(yīng)瓦片柵格數(shù)據(jù)的存在性;
[0016] 如果所述第一索引位置記錄的存在狀態(tài)為存在,則根據(jù)前置索引中每個(gè)第一索引 標(biāo)識(shí)對(duì)應(yīng)的第一索引位置,分別確定入口索引中與所述第一索引位置對(duì)應(yīng)的第二索引位 置;所述入口索引用于記錄瓦片數(shù)據(jù)在目標(biāo)存儲(chǔ)空間的存儲(chǔ)地址;
[0017] 從所述第二索引位置分別讀取各瓦片定位標(biāo)識(shí)各自對(duì)應(yīng)的瓦片柵格數(shù)據(jù)在包文 件數(shù)據(jù)區(qū)的存儲(chǔ)地址,并根據(jù)所述存儲(chǔ)地址分別提取瓦片柵格數(shù)據(jù)。
[0018] 本發(fā)明還公開(kāi)了一種地圖數(shù)據(jù)生成的裝置,包括:
[0019] 瓦片映射模塊,適于將地圖數(shù)據(jù)中各瓦片所屬空間范圍的瓦片定位標(biāo)識(shí)映射為連 續(xù)有序的第一索引標(biāo)識(shí);所述第一索引標(biāo)識(shí)與前置索引的第一索引位置按序一一對(duì)應(yīng);
[0020] 前置索引構(gòu)建模塊,適于依次針對(duì)每個(gè)瓦片生成瓦片柵格數(shù)據(jù)時(shí),逐個(gè)將瓦片柵 格數(shù)據(jù)的存在狀態(tài)寫(xiě)入前置索引中與所述瓦片的第一索引標(biāo)識(shí)對(duì)應(yīng)的第一索引位置;
[0021] 入口索引構(gòu)建模塊,適于根據(jù)所述前置索引中各第一索引位置記錄的存在狀態(tài), 確定入口索引中與所述第一索引標(biāo)識(shí)對(duì)應(yīng)的第二索引位置,并在第二索引位置記錄所述瓦 片柵格數(shù)據(jù)在目標(biāo)存儲(chǔ)空間中的存儲(chǔ)地址。
[0022] 本發(fā)明還公開(kāi)了一種地圖數(shù)據(jù)讀取的裝置,包括:
[0023] 請(qǐng)求接收模塊,適于獲取被請(qǐng)求的各瓦片的瓦片定位標(biāo)識(shí);
[0024] 瓦片映射模塊,適于將各瓦片定位標(biāo)識(shí)分別映射為連續(xù)有序的第一索引標(biāo)識(shí);
[0025] 前置索引檢索模塊,適于針對(duì)每個(gè)第一索引標(biāo)識(shí),分別查找前置索引中與所述第 一索引標(biāo)識(shí)所對(duì)應(yīng)的第一索引位置的存在狀態(tài)是否為存在;所述前置索引的各第一索引位 置按序與由所有瓦片定位標(biāo)識(shí)映射得到的連續(xù)有序的第一索引標(biāo)識(shí)一一對(duì)應(yīng);所述前置索 引記錄所述第一索引標(biāo)識(shí)對(duì)應(yīng)瓦片柵格數(shù)據(jù)的存在性;
[0026] 入口索引檢索模塊,適于如果所述第一索引位置的存在狀態(tài)為存在,則根據(jù)前置 索引中每個(gè)第一索引標(biāo)識(shí)對(duì)應(yīng)的第一索引位置,分別確定入口索引中與所述第一索引位置 對(duì)應(yīng)的第二索引位置;所述入口索引記錄瓦片數(shù)據(jù)在目標(biāo)存儲(chǔ)空間的存儲(chǔ)地址;
[0027] 提取模塊,適于從所述第二索引位置讀取所述瓦片柵格數(shù)據(jù)在目標(biāo)存儲(chǔ)空間中的 存儲(chǔ)地址,并根據(jù)所述存儲(chǔ)地址提取瓦片柵格數(shù)據(jù)。
[0028] 與【背景技術(shù)】相比,本發(fā)明包括以下優(yōu)點(diǎn):
[0029] 1、本發(fā)明通過(guò)將所有地圖數(shù)據(jù)的所有瓦片的瓦片定位標(biāo)識(shí)映射為連續(xù)有序的第 一索引標(biāo)識(shí),然后在瓦片柵格數(shù)據(jù)時(shí),按序在前置索引第一索引位置和后置索引的第二索 引位置中進(jìn)行記錄,不會(huì)存在哈希沖突的問(wèn)題。比如將瓦片的瓦片定位標(biāo)識(shí)(層級(jí),在該層 級(jí)下的坐標(biāo))映射為〇、1、2……的第一索引標(biāo)識(shí),然后以這種連續(xù)的第一索引標(biāo)識(shí)逐個(gè)記 錄,不會(huì)存在哈希沖突。
[0030] 2、本發(fā)明由于前置索引中的第一索引位置與所有第一索引標(biāo)識(shí)按序一一對(duì)應(yīng),不 為空的第一索引位置與入口索引的第二索引位置也可按序?qū)?yīng),在查詢時(shí),可以不用遍歷 等繁瑣的查詢方式即可很簡(jiǎn)單的查到入口索引中與第一索引標(biāo)識(shí)下對(duì)應(yīng)的第二索引位置, 從而提取存儲(chǔ)地址。
[0031] 3、本發(fā)明的前置索引記錄所述第一索引標(biāo)識(shí)對(duì)應(yīng)瓦片柵格數(shù)據(jù)的存在性,入口索 引記錄瓦片數(shù)據(jù)在目標(biāo)存儲(chǔ)空間的存儲(chǔ)地址。前置索引對(duì)瓦片柵格數(shù)據(jù)是否存在進(jìn)行記 錄,然后再根據(jù)前置索引中記錄的存在狀態(tài),在入口索引中對(duì)應(yīng)位置記錄瓦片柵格數(shù)據(jù)在 包文件數(shù)據(jù)區(qū)中的存儲(chǔ)地址,將瓦片柵格數(shù)據(jù)的存在狀態(tài)和具體瓦片柵格數(shù)據(jù)存儲(chǔ)地址的 兩者通過(guò)前置索引和入口索引分開(kāi),在查詢時(shí)直接根據(jù)前置索引的記錄將不需要讀取瓦片 柵格數(shù)據(jù)的,可以不再進(jìn)入入口索引中進(jìn)行查找,降低查找耗用,降低了磁盤(pán)的尋址代價(jià), 從而提高了讀取效率。
【附圖說(shuō)明】
[0032] 圖1是本發(fā)明實(shí)施例的一種地圖數(shù)據(jù)生成的方法的流程示意圖;
[0033] 圖IA是本發(fā)明實(shí)施例的前置索引的示例;
[0034] 圖IB是本發(fā)明實(shí)施例的前置索引-入口索引-數(shù)據(jù)區(qū)的邏輯示例;
[0035] 圖IC是本發(fā)明實(shí)施例圖IB的前置索引-入口索引-數(shù)據(jù)區(qū)的詳細(xì)邏輯示例;
[0036] 圖ID是本發(fā)明實(shí)施例另一種的前置索引-入口索引-數(shù)據(jù)區(qū)的邏輯示例;
[0037] 圖2是對(duì)應(yīng)本發(fā)明圖1實(shí)施例的一種地圖數(shù)據(jù)讀取的方法的流程示意圖;
[0038] 圖3是本發(fā)明實(shí)施例的另一種地圖數(shù)據(jù)生成的方法的流程示意圖;
[0039] 圖4是對(duì)應(yīng)本發(fā)明圖2實(shí)施例的一種地圖數(shù)據(jù)讀取的方法的流程示意圖;
[0040] 圖5是本發(fā)明實(shí)施例的另一種地圖數(shù)據(jù)生成的方法的流程示意圖;
[0041] 圖5A是本發(fā)明實(shí)施例的另一種前置索引-入口索引-數(shù)據(jù)區(qū)的詳細(xì)邏輯示例;
[0042] 圖6是本發(fā)明實(shí)施例的另一種地圖數(shù)據(jù)生成的方法的流程示意圖;
[0043] 圖7是對(duì)應(yīng)本發(fā)明圖5、6實(shí)施例的一種地圖數(shù)據(jù)讀取的方法的流程示意圖; [0044] 圖8是本發(fā)明實(shí)施例的另一種地圖數(shù)據(jù)生成的方法的流程示意圖;
[0045] 圖8A和圖8B是本發(fā)明實(shí)施例的分段統(tǒng)計(jì)示例;
[0046] 圖9是對(duì)應(yīng)本發(fā)明圖8實(shí)施例的一種地圖數(shù)據(jù)讀取的方法的流程示意圖;
[0047] 圖9A是本發(fā)明實(shí)施例bitset和sum_stub的不例;
[0048] 圖10是本發(fā)明實(shí)施例的另一種地圖數(shù)據(jù)生成的裝置的結(jié)構(gòu)示意圖;
[0049] 圖11是本發(fā)明實(shí)施例的另一種地圖數(shù)據(jù)讀取的裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0050] 為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí) 施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
[0051] 本發(fā)明的核心思想之一是:對(duì)于將地圖數(shù)據(jù)進(jìn)行瓦片劃分后的所有瓦片標(biāo)識(shí),將 所有瓦片的定位標(biāo)識(shí)映射為連續(xù)的第一索引標(biāo)識(shí),該連續(xù)的第一索引標(biāo)識(shí)與前置索引的各 第一索引位置按序一一對(duì)應(yīng),然后對(duì)于每個(gè)第一索引標(biāo)識(shí),在針對(duì)每個(gè)瓦片生成瓦片柵格 數(shù)據(jù)時(shí),逐個(gè)將該瓦片柵格數(shù)據(jù)的存在狀態(tài)寫(xiě)入前置索引中與所述瓦片的第一索引標(biāo)識(shí)對(duì) 應(yīng)的第一索引位置,然后再根據(jù)前置索引的記錄,確定入口索引中的第二索引位置,在第二 索引位置存儲(chǔ)該瓦片柵格數(shù)據(jù)在包文件數(shù)據(jù)區(qū)中的存儲(chǔ)地址。如此按序?qū)ν咂瑬鸥駭?shù)據(jù)構(gòu) 建索引的過(guò)程,不會(huì)產(chǎn)生哈希沖突,并且由于前置索引和入口索引均是按序存儲(chǔ)的,后續(xù)對(duì) 索引的檢索效率高,讀取地圖數(shù)據(jù)的效率也相應(yīng)提高。
[0052] 實(shí)施例一
[0053] 在本發(fā)明實(shí)施例中,為了方便描述,前置索引可以用bitset序列表示,用于記錄 所述第一索引標(biāo)識(shí)對(duì)應(yīng)瓦片柵格數(shù)據(jù)的存在性;入口索引可以用entry索引數(shù)組表示,用 于記錄瓦片數(shù)據(jù)在目標(biāo)存儲(chǔ)空間的存儲(chǔ)地址。其中bitset :用來(lái)管理一系列bit位的數(shù)據(jù) 結(jié)構(gòu),bit位有0和1兩種狀態(tài);entry索引數(shù)組:用于記錄數(shù)據(jù)位于數(shù)據(jù)區(qū)的偏移量及大 小,每個(gè)entry中的元素占64位,前44bit為offset,后20bit為length。
[0054] 參照?qǐng)D1,其示出本發(fā)明實(shí)施例的一種地圖數(shù)據(jù)生成的方法的流程示意圖,具體可 以包括:
[0055] 步驟110,將地圖數(shù)據(jù)中各瓦片所屬空間范圍的瓦片定位標(biāo)識(shí)映射為連續(xù)有序的 第一索引標(biāo)識(shí);所述第一索引標(biāo)識(shí)與前置索引的第一索引位置按序一一對(duì)應(yīng);
[0056] 在本發(fā)明實(shí)施例中,在生成地圖數(shù)據(jù)的包文件之前,需要先獲取地圖的原始數(shù)據(jù), 然后將其切分成瓦片形式的元數(shù)據(jù)。對(duì)于地圖瓦片技術(shù),是將某個(gè)范圍的空間數(shù)據(jù)渲染為 不同