0036] 圖2為本發(fā)明的流程示意圖。本實(shí)施例中:假設(shè)使用的柵格數(shù)據(jù)為一幅尺寸為 25600 X 25600、柵格值范圍為0-255的柵格影像數(shù)據(jù),處理過程包括如下步驟:
[0037] 1)進(jìn)行預(yù)處理。首先將原始柵格數(shù)據(jù)分割成一定尺寸的瓦片(可將瓦片大小取為 256 X 256),其分割示意圖如圖3所示,圖中陰影部分表示原始柵格數(shù)據(jù),一個(gè)方格代表一個(gè) 瓦片。然后分別統(tǒng)計(jì)各瓦片的直方圖并將其W文件方式存儲(chǔ)到服務(wù)器。將瓦片尺寸取為256 X256,直方圖間隔取為8,那么每個(gè)瓦片的直方圖可用一個(gè)長(zhǎng)度為32的向量進(jìn)行表示,計(jì)算 一塊瓦片的直方圖的過程偽代碼如下,其中tile_data為瓦片中需要統(tǒng)計(jì)為直方圖的屬性 數(shù)值,X和y表示當(dāng)前讀取點(diǎn)在瓦片中的位置坐標(biāo),tilejiist為該瓦片的直方圖結(jié)果向量,i 表示向量ti IeJiist的第i項(xiàng)。
[0039] 運(yùn)樣全部瓦片一共會(huì)生成10000個(gè)直方圖結(jié)果向量tile_Mst,將結(jié)果向量存入文 件ti IeJiist. txt,并將ti IeJiist. txt 保存在服務(wù)器。
[0040] 2)判定各瓦片與用戶選定多邊形區(qū)域的關(guān)系,分別確定處于選定區(qū)域內(nèi)部的瓦片 和處于選定區(qū)域邊界的瓦片。如圖4所示,原始柵格數(shù)據(jù)被分成多個(gè)瓦片,虛線表示選定區(qū) 域的邊界。那么接下來需要判定哪些瓦片在選定區(qū)域內(nèi)部哪些瓦片與選定區(qū)域邊界相交。 首先計(jì)算能夠?qū)⒂脩暨x定多邊形區(qū)域完全包容進(jìn)去的最小矩形即最小矩形外包框,不妨假 設(shè)計(jì)算結(jié)果為(1223,3325,20987,23533),那么最小矩形外包框的左下角和右上角的頂點(diǎn) 坐標(biāo)分別為(1223,3325)和(20987,23533)。基于客戶端顯示的縮放級(jí)別可W確定分辨率為 32,即一個(gè)像素點(diǎn)代表32X32個(gè)柵格單元。從而可利用下取整函數(shù)floor得到縱向填充的范 圍跨度是從fl〇〇r(3325/32)到floor(23533/32)+l即103到736,橫向填充的范圍跨度是從 floor(1223/32)到floor(20987/32)+l即38到656。然后利用掃描線填充算法對(duì)選定區(qū)域進(jìn) 行填充。一個(gè)瓦片有256 X 256個(gè)柵格單元,那么為每個(gè)瓦片建立一個(gè)(256/32) X (256/32) 良P8X8的填充矩陣flag_tile便可W表示瓦片的所有點(diǎn)。在填充過程中,對(duì)于在選定區(qū)域內(nèi) 的點(diǎn),將f 1 ag_ti 1 e中與該點(diǎn)對(duì)應(yīng)的位置置為1,對(duì)于區(qū)域外的點(diǎn),f 1 ag_t i 1 e中與該點(diǎn)對(duì)應(yīng) 的位置置為0。同時(shí)還要為每個(gè)填充矩陣設(shè)置一個(gè)變量count用于記錄各矩陣中被置為1的 點(diǎn)的個(gè)數(shù)。對(duì)于每一個(gè)填充矩陣,如果count值達(dá)到64,即flag_tile中每一個(gè)點(diǎn)都被置為1, 那么可W判斷運(yùn)個(gè)填充矩陣對(duì)應(yīng)的瓦片完全在選定區(qū)域內(nèi)。那些未全部被置為1的填充矩 陣對(duì)應(yīng)的瓦片處在選定區(qū)域邊界。運(yùn)些填充矩陣將被用于確定原始柵格數(shù)據(jù)中的點(diǎn)的位置 來計(jì)算直方圖數(shù)據(jù)。
[0041] 3)對(duì)處于選定區(qū)域內(nèi)部的瓦片,求預(yù)處理過程中已經(jīng)統(tǒng)計(jì)好的直方圖的和。
[0042] 根據(jù)步驟2)的填充結(jié)果,可W確定哪些瓦片完全處于選定區(qū)域內(nèi)部,讀入步驟1) 中生成的文件tile_Mst.txt,讀取對(duì)應(yīng)處于選定區(qū)域內(nèi)部的瓦片的直方圖數(shù)據(jù)并將各瓦 片的直方圖數(shù)據(jù)匯總求和得直方圖向量innerjiist,其計(jì)算公式如下:
[0043] inner_hist(i) = Stiie xGinner tiietile_hist_of_tile_x(i)
[0044] 其中inne;r_tile為處于選定區(qū)域內(nèi)部的瓦片集合,i表示innerjiist的第i項(xiàng), 1:;[16_11131:_0;1^_1:;[16_^;為瓦片1:;[16_^;對(duì)應(yīng)的直方圖向量。
[0045] 4)對(duì)處于選定區(qū)域邊界的瓦片,采用并行方式讀取原始柵格數(shù)據(jù)并計(jì)算直方圖。
[0046] 首先根據(jù)步驟2)確定的處于選定區(qū)域邊界的瓦片,并根據(jù)瓦片對(duì)應(yīng)的填充矩陣確 定瓦片處于選定區(qū)域內(nèi)的部分。將每個(gè)處于選定區(qū)域邊界的瓦片作為一個(gè)子任務(wù)。如圖5所 示,程序的主進(jìn)程PO將子任務(wù)分配給不同的工作進(jìn)程,將count值未達(dá)到64的瓦片對(duì)應(yīng)的 flag_tile發(fā)送給不同的工作進(jìn)程,各工作進(jìn)程分別使用開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫(kù)GDAL在 原始柵格數(shù)據(jù)中提取瓦片并根據(jù)瓦片對(duì)應(yīng)的填充矩陣來確定瓦片處于選定區(qū)域內(nèi)的部分, 然后統(tǒng)計(jì)運(yùn)部分的直方圖。對(duì)每一個(gè)處在選定區(qū)域邊界的瓦片進(jìn)行直方圖統(tǒng)計(jì)的過程偽代 碼如下,其中flag_tile為該瓦片對(duì)應(yīng)的填充矩陣,X和Y用于表示flag_tile中的位置坐標(biāo), tile_data為瓦片中需要統(tǒng)計(jì)為直方圖的屬性數(shù)值,X和y表示當(dāng)前讀取點(diǎn)在瓦片中的位置 坐標(biāo),bound_ti IeJiist為該瓦片的直方圖結(jié)果向量,i表示向量bound_ti IeJiist的第i項(xiàng)。
[004引然后將各工作進(jìn)程求得的結(jié)果進(jìn)行求和得直方圖向量boundjiist,計(jì)算公式如 下,其中bound_tile為處于選定區(qū)域邊界的瓦片集合,i表示第i項(xiàng),bound_tile_hist_of_ tile_x為邊界處瓦片tile_x對(duì)應(yīng)的直方圖向量。
[0049] bound_h ist(i) = 2 ti lexsboundti iebound_t i I e_h i s t_o f _t i I e_x (i)
[0050] 5)將步驟3)得到的直方圖向量inne;r_hist和步驟4)中得到的直方圖向量bound_ hist求和得到選定區(qū)域的直方圖histogram,計(jì)算公式如下,其中i表示向量histogram的第 i項(xiàng):
[0051 ] histogram(i) = inner_hist(i)+bound_hist(i)
[0052]圖6是本發(fā)明方法與直接從原始柵格進(jìn)行統(tǒng)計(jì)的直方圖生成方法的任務(wù)耗時(shí)對(duì) 比。直接從原始柵格進(jìn)行統(tǒng)計(jì)的直方圖生成方法處理過程如下:
[0054] 其中(xl,yl,x2,y2)為用戶輸入多邊形polygon的最小矩形外包框,raste;r_data 為柵格數(shù)據(jù)中需要統(tǒng)計(jì)為直方圖的屬性數(shù)值,X和y表示當(dāng)前讀取點(diǎn)的位置坐標(biāo),interval 對(duì)應(yīng)直方圖的間隔,histogram為直方圖結(jié)果向量,i表示向量histogram第i項(xiàng)。具體處理過 程為遍歷輸入多邊形最小矩形外包框內(nèi)所有點(diǎn),對(duì)于任意一個(gè)點(diǎn)(x,y),首先判斷其是否在 選定區(qū)域內(nèi)部,如果(x,y)在選定區(qū)域內(nèi)部,且該點(diǎn)柵格數(shù)據(jù)值滿足i X interval含raste;r_ data(x,y) < (i+1) X interval,則為結(jié)果直方圖向量histogram的第i項(xiàng)加1。通過比較可W 看出,本發(fā)明的直方圖生成方法明顯優(yōu)于直接從原始柵格進(jìn)行統(tǒng)計(jì)的直方圖生成方法。在 效率方面,當(dāng)選定區(qū)域內(nèi)柵格點(diǎn)數(shù)相同時(shí),本發(fā)明的直方圖生成方法耗時(shí)較短。在穩(wěn)定性方 面,直接從原始柵格進(jìn)行統(tǒng)計(jì)的直方圖生成方法運(yùn)行時(shí)間基本與選定區(qū)域柵格點(diǎn)數(shù)量成正 比,當(dāng)柵格點(diǎn)數(shù)量比較大時(shí),該方法運(yùn)行時(shí)間會(huì)比較長(zhǎng)。而采用本發(fā)明方法的運(yùn)行時(shí)間相對(duì) 比較穩(wěn)定,當(dāng)柵格點(diǎn)數(shù)量達(dá)到10億,運(yùn)行時(shí)間不會(huì)超過0.5秒。采用本發(fā)明方法進(jìn)行直方圖 生成,可W滿足與用戶實(shí)時(shí)交互的需求。
【主權(quán)項(xiàng)】
1. 一種地理柵格數(shù)據(jù)任選多邊形區(qū)域的直方圖實(shí)時(shí)生成方法,其特征在于包括以下步 驟: 1) 進(jìn)行預(yù)處理 首先將原始柵格數(shù)據(jù)均勻分割成一定尺寸的瓦片,然后分別統(tǒng)計(jì)原始柵格數(shù)據(jù)中各瓦 片的直方圖并將其以文件方式存儲(chǔ)到服務(wù)器; 2) 判定各瓦片與用戶選定多邊形區(qū)域的關(guān)系,分別確定完全處于選定區(qū)域內(nèi)部的瓦片 和處于選定區(qū)域邊界的瓦片; 3) 對(duì)于步驟2)確定的處于選定區(qū)域內(nèi)部的瓦片,讀入步驟1)中生成的文件,讀取完全 處于選定區(qū)域內(nèi)部的瓦片的直方圖數(shù)據(jù)并將各瓦片的直方圖數(shù)據(jù)匯總求和,得到直方圖 inner-hist; 4) 對(duì)于步驟2)確定的處于選定區(qū)域邊界的瓦片,采用并行方式讀取原始柵格數(shù)據(jù)并統(tǒng) 計(jì)直方圖,最終將統(tǒng)計(jì)的直方圖數(shù)據(jù)匯總求和得到直方圖bound_hist; 5) 將步驟3)中得到的直方圖數(shù)據(jù)b〇und_hist和步驟4)中得到的直方圖數(shù)據(jù)bound_ hist求和得到選定區(qū)域的直方圖。2. 根據(jù)權(quán)利要求1所述的地理柵格數(shù)據(jù)任選多邊形區(qū)域的直方圖實(shí)時(shí)生成方法,其特 征在于:步驟2)的方法為: 首先計(jì)算能夠?qū)⒂脩暨x定多邊形區(qū)域完全包容進(jìn)去的最小矩形即最小矩形外包框,將 其表示為(xl,yl,x2,y2),其中(xl,yl)和(x2,y2)分別為最小矩形外包框的左下角和右上 角的頂點(diǎn)坐標(biāo); 基于客戶端顯示的縮放級(jí)別確定分辨率R,那么客戶端顯示的一個(gè)像素點(diǎn)就代表RXR 個(gè)柵格單元,從而可利用下取整函數(shù)floor得到縱向填充的范圍跨度是從floor (yl/R)到 floor(y2/R)+l,橫向填充的范圍跨度是從floor(xl/R)到floor(x2/R)+l; 然后利用掃描線填充算法在分辨率R下對(duì)選定區(qū)域進(jìn)行填充,假設(shè)一個(gè)瓦片有NXN個(gè) 柵格單元,那么為每個(gè)瓦片建立一個(gè)(N/R)X(N/R)的填充矩陣表示瓦片的所有點(diǎn);在填充 過程中,對(duì)于在選定區(qū)域內(nèi)的點(diǎn),將填充矩陣中與該點(diǎn)對(duì)應(yīng)的位置置為1,對(duì)于選定區(qū)域外 的點(diǎn),填充矩陣中與該點(diǎn)對(duì)應(yīng)的位置置為〇;同時(shí)記錄各填充矩陣中被置為1的點(diǎn)的個(gè)數(shù);對(duì) 于一個(gè)填充矩陣,如果填充矩陣中的每一個(gè)點(diǎn)都被置為1,那么可以判斷這個(gè)填充矩陣對(duì)應(yīng) 的瓦片完全在選定區(qū)域內(nèi);那些未全部被置為1的填充矩陣對(duì)應(yīng)的瓦片則處在選定區(qū)域邊 界。3. 根據(jù)權(quán)利要求2所述的地理柵格數(shù)據(jù)任選多邊形區(qū)域的直方圖實(shí)時(shí)生成方法,其特 征在于,步驟4)的方法為: 對(duì)于步驟2)確定的處于選定區(qū)域邊界的瓦片,根據(jù)瓦片對(duì)應(yīng)的填充矩陣確定瓦片處于 選定區(qū)域內(nèi)的部分;將每個(gè)處于選定區(qū)域邊界的瓦片作為一個(gè)子任務(wù),程序的主進(jìn)程P0將 子任務(wù)分配給不同的工作進(jìn)程,將處在選定區(qū)域邊界的瓦片對(duì)應(yīng)的填充矩陣發(fā)送給不同的 工作進(jìn)程,各工作進(jìn)程分別使用開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫(kù)GDAL在原始柵格數(shù)據(jù)中提取瓦片 并根據(jù)瓦片對(duì)應(yīng)的填充矩陣來確定瓦片處于選定區(qū)域內(nèi)的部分,然后統(tǒng)計(jì)這部分的直方 圖,最終將各工作進(jìn)程求得的結(jié)果進(jìn)行求和得到處于選定區(qū)域邊界處瓦片對(duì)應(yīng)的直方圖。
【專利摘要】一種地理柵格數(shù)據(jù)任選多邊形區(qū)域的直方圖實(shí)時(shí)生成方法,1)將原始柵格數(shù)據(jù)切割成一定尺寸的瓦片,分別統(tǒng)計(jì)原始柵格數(shù)據(jù)中各瓦片的直方圖并將其以文件方式存儲(chǔ)到服務(wù)器;2)判定各瓦片與用戶選定多邊形區(qū)域的關(guān)系,分別確定完全處于選定區(qū)域內(nèi)部的瓦片和處于選定區(qū)域邊界的瓦片;3)對(duì)于處于選定區(qū)域內(nèi)部的瓦片,讀入1)中生成的文件,讀取對(duì)應(yīng)瓦片的直方圖數(shù)據(jù)并將各瓦片的直方圖數(shù)據(jù)匯總求和;4)對(duì)于處于選定區(qū)域邊界的瓦片,采用并行方式讀取原始柵格數(shù)據(jù)并統(tǒng)計(jì)直方圖,最終將統(tǒng)計(jì)的直方圖數(shù)據(jù)匯總求和;5)將3)和4)得到的直方圖數(shù)據(jù)求和得到選定區(qū)域的直方圖。本發(fā)明能滿足實(shí)時(shí)獲取用戶選定任意多邊形區(qū)域直方圖的需求。
【IPC分類】G06T1/20, G06T17/05
【公開號(hào)】CN105701760
【申請(qǐng)?zhí)枴緾N201610017618
【發(fā)明人】鐘志農(nóng), 吳燁, 馬夢(mèng)宇, 陳犖, 吳秋云, 熊偉, 景寧
【申請(qǐng)人】中國(guó)人民解放軍國(guó)防科學(xué)技術(shù)大學(xué)
【公開日】2016年6月22日
【申請(qǐng)日】2016年1月12日