專利名稱:一種多邊形矢量圖層快速疊合方法
技術(shù)領(lǐng)域:
本發(fā)明涉及地理信息系統(tǒng)空間分析中矢量地圖間的分析方法,特別是一種多邊形 矢量圖層快速疊合方法。
背景技術(shù):
空間分析是地理信息系統(tǒng)(GIS)創(chuàng)建的初衷,而疊合分析是其重要的分析方法之 一,特別是矢量圖層間的疊合操作是最老和最困難的問題之一。盡管,Chrisman et al.發(fā) 表了第一個方法,被稱為WHIRLPOOL(Dutton 1979),但由于算法復(fù)雜度高,非常難以達到可 運行的程度。人們始終面臨“如何針對點、線、面和復(fù)雜空間幾何對象的疊合計算,尤其是 ‘面’對象或多邊形圖層間疊合操作時,如何減少算法的復(fù)雜性,解決特殊情形(特殊面中出 現(xiàn)孔洞)和保持圖形重建后的精度三大難題。例如計算某行政區(qū)內(nèi)各類土地利用類型的分布狀況與數(shù)量的疊合分析計算,即 進行兩矢量圖層間多邊形的交、并、差和包含的計算,統(tǒng)計出各個行政區(qū)多邊形內(nèi)的土地利 用類型分布和數(shù)量。計算過程中,不僅需對兩矢量圖層多邊形邊界求交點,重建具有多重屬 性的新多邊形,并保證疊合分析的幾何精度;還需統(tǒng)計分析多邊形范圍內(nèi)的屬性特征 ’另 外,特別需處理隨之產(chǎn)生的包含關(guān)系或出現(xiàn)“孔洞”現(xiàn)象。其中,圖層中矢量圖形的疊合分析,它通過對各區(qū)域兩圖層中多邊形圖形求交點 和多重屬性的搜索、判別,確定是否產(chǎn)生新多邊形,或是否需對剩余多邊形進行重新分類或 分級,進行新多邊形重建,構(gòu)成新的矢量圖層;然后,為圖層內(nèi)容進行統(tǒng)計疊合分析,對疊合 分析結(jié)果中所形成的新多邊形,進行屬性的重新計算和分配。在矢量圖層疊合分析過程中,多邊形疊合的順序及兩圖層中多邊形求交、并、差是 最核心的過程,其中正確、適宜的多邊形疊合計算,可對兩圖層的疊合分析起到提高效率 的作用。在國外,一個著名的算法是由Cyrus和Beck提出,它通過判斷直線段的方向矢量 與多邊形邊法矢量的點積是否大于0,而將所有交點分為上、下兩組;然后,分別取上組中 的最小交點和下組中的最大交點,作為線段可見部分的端點。但是,Cyrus-Beck算法只適用 于凸多邊形的求交,對于凹多邊形則沒有意義。與此同時,只適用于凸多邊形的求交、并、差 的算法還有Shamos算法和0’Rourke算法。近年來,M. Rivero也提出一種能處理任意簡單 多邊形的算法,但其理論復(fù)雜,致使其時間復(fù)雜度達到0((n+k) (m+k)),其中n,m分別是兩 輸入圖層多邊形的邊數(shù),k則是它們的交點數(shù)。在國內(nèi),也有不少學(xué)者從事該領(lǐng)域的研究,但 大多數(shù)采用對兩圖層多邊形的邊進行兩兩求交,效率明顯很低;另外,有些算法甚至還需開 二維數(shù)組,這對于GIS空間分析所面對的大規(guī)模數(shù)據(jù)集來說,明顯不可能滿足應(yīng)用需求。其 中,謝忠、薛勝等學(xué)者提出對兩圖層多邊形進行兩重循環(huán)的疊合分析,很明顯不僅會出現(xiàn)重 復(fù)多邊形,導(dǎo)致錯誤,而且運行效率也必然很低。在眾多研究中,僅劉勇奎、楊維芳、杜爽等 人的算法可求多邊形的交、并、差,它是基于第一個多邊形的所有邊,依次對第二個多邊形 進行線裁剪操作,以求出所有邊的交點。雖然,它對于線裁剪提出了一種新的算法流程“錯 切變換法”,提高了求交點的效率,但對于第一個多邊形的n條邊均對第二個多邊形的m個
5頂點依次進行置換操作,僅對于多邊形的線段求交,其復(fù)雜度已為O(nXm)。而且,該算法對 于求多邊形的交、并、差,需分別重新構(gòu)造多邊形鏈,造成重復(fù)工作,降低了計算效率。同時, 它對多邊形的邊重合或者在頂點處相交等特殊情況的處理是采用偏移頂點操作,不僅降低 了操作效率,還會損失圖形的精度,這對精度要求高的矢量圖層間的空間分析存在致命缺 陷。綜上所述,現(xiàn)有技術(shù)中,并沒有一種適用于矢量圖層間任意多邊形求交、并、差和 包含的高效方法和屬性配置方法。在矢量圖層間的疊合操作和分析中的三大難點問題并沒 有實質(zhì)性的突破。因此,提出一種適用于矢量圖層間任意多邊形求交、并、差和包含的高效 方法和屬性配置方法,對增強GIS空間分析功能的性能具有重要意義和實用價值。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種多邊形矢量圖層快速疊合方法,以解決現(xiàn)有技術(shù)的不 足,提供一種既適用于處理任意多邊形的求交、并、差和包含關(guān)系,又能高效處理兩矢量圖 層疊合分析的方法。本發(fā)明采用的技術(shù)方案如下一種矢量圖層多邊形快速疊合分析方法,它包括以下步驟A)將兩矢量圖層多邊形(每個多邊形必須是封閉面狀對象)分別存入兩個鏈表 G1和G2中,并為各圖層多邊形分配唯一 ID號,規(guī)則為第i個圖層第j個多邊形ID為i_ j ;同時,還需初始化一個結(jié)果圖層R為空;B)假設(shè)Pi是G1中所讀取的多邊形,Qi是62中讀取的多邊形。分別從G1和G2中 讀取多邊形,將從G1獲得的每個多邊形Pi與所有G2中的多邊形進行分析判斷;直至G1 為空,則表明完成與G2中所有多邊形的分析判別,并均已存入結(jié)果圖層R中,跳到第H步; 否則將不斷從G1中取得多邊形Pi,并從G1中刪除;C)在上述判別過程中,主要是對多邊形分類,判斷仏的外包矩形是否與Pi的外 包矩形相交。如果滿足式(1),則表示從與Pi不會相交,將該多邊形仏存入多邊形集合M 中,否則表示可能相交,存入多邊形集合N中;(P外包).x2 <他外包).\|| (P外包)_y2<他外
包).yjl (Pi外包).Xi> (Qi外包).x2|| (P外包;!-又丄〉(Qi外包).y2 (1)D)隨后,進行多邊形求交,只要多邊形集合N不為空,則采用基于事件點組的平面 掃描線算法(圖2)對Pi與N進行求交點;如果N為空,則將Pi直接存進結(jié)果圖層R中,跳 回第B步;E)然后,開始多邊形重建。先對步驟D中基于事件點組的平面掃描線算法所求得 的多邊形交點進行——原線段截斷,產(chǎn)生新的節(jié)點和連通新線段的處理;并且,對連通后節(jié) 點所關(guān)聯(lián)的邊進行夾角排序,按同一節(jié)點邊的排列順序生成邊信息鏈表;F)再根據(jù)最小夾角原則,深度搜索,逆時針求出所有合法多邊形,包括P與N的交 P n N、P與N的差P-N、N與P的差N-P,并為每個新的多邊形重新分配ID ;G)將P n N與P-N存入結(jié)果圖層R中,將N-P存進集合M中,更新第二個圖層G2 的圖形數(shù)據(jù),用M覆蓋G2,即使得G2 = M,返回步驟B ;H)兩圖層所有多邊形疊合完畢后,則結(jié)果多邊形已經(jīng)全部更新,并存于結(jié)果圖層 R中。接著,對R中所有多邊形圖形數(shù)據(jù)進行屬性統(tǒng)計計算和配置;
6
I)返回結(jié)果圖層R,結(jié)束運算。作為一種優(yōu)選方案,步驟C中,根據(jù)外包矩形對第二個圖層G2中多邊形進行分類, 快速去除與第一個圖層G1多邊形Pi不可能相交的多邊形。作為一種優(yōu)選方案,步驟D中,運用基于事件點組的平面掃描線算法進行多邊形 求交點,并采用平衡二叉樹及堆等高級數(shù)據(jù)結(jié)構(gòu)(如圖3),不僅可大幅度提高求交點的效 率,還記錄了圖層中所有擬求交多邊形的幾何位置。作為一種優(yōu)選方案,步驟E中,對同一新節(jié)點所關(guān)聯(lián)的邊進行與橫軸夾角的排序, 又可進一步提高后面深度搜索多邊形的效率。作為一種優(yōu)選方案,步驟E中,按頂點順序新生成的邊信息鏈表包含有原多邊形P 與N集合的邊方向信息,逆時針為正方向,順時針為負方向,為后面生成交、并、差與包含等 關(guān)系的確定提供實施的基本規(guī)則。作為一種優(yōu)選方案,在步驟F中,據(jù)深度搜索獲得的多邊形夾角和,可判斷搜索順 序是逆時針還是順時針。如果夾角和為-2^1則為逆時針多邊形,屬于多邊形的交或者差; 如果是2 ji,則為順時針,屬于多邊形的并或者包含,解決疊合分析中特殊多邊形(孔洞)的 判定。作為一種優(yōu)選方案,在步驟F中,對逆時針搜索到的多邊形,還需據(jù)每條構(gòu)成的邊 所歸屬的原多邊形ID,判斷該邊原屬于第幾個圖層第幾個多邊形,則可對新生成的結(jié)果多 邊形進行新的ID分配,例如新多邊形屬于第i個圖層第a個多邊形與第j個圖層第b個 多邊形的交,則分配ID為i_a_j_b,若為它們的差,則分配規(guī)則參考步驟a。如果新多邊形 所構(gòu)成的邊有屬于P的正邊,則該新多邊形屬于P ;如果有邊屬于P的負邊,則不屬于P ;同 理,可判斷是否屬于N,從而可得出究竟屬于P n N、P-N還是N-P;具體判斷標準為若新
多邊形有邊屬于第一個圖層的正方向邊尹,也即是外圍邊,那么新多邊形屬于第一個圖層 覆蓋范圍;相反,如果有邊屬于第一個多邊形的反方向邊P,也即內(nèi)環(huán)邊或者外圍邊的反方 向邊,那么新多邊形不屬于第一個圖層覆蓋范圍;同理,可判斷該多邊形是否屬于第二個圖 層。如果同時屬于兩個圖層覆蓋范圍,則該多邊形是它們的交P n N;若屬于第一個圖層覆 蓋范圍而不屬于第二個,則該多邊形是它們的差P-N;若屬于第二個圖層覆蓋范圍而不屬 于第一個,則該多邊形是它們的差N-P。判斷規(guī)則如下所示 作為一種優(yōu)選方案,在步驟H中,對R中每個多邊形需進行屬性計算與配置,具體 可根據(jù)R圖層中的每個新多邊形的ID,確認分配的屬性,譬如皿為i_j,則該新多邊形只 具有第i個圖層第j個多邊形的屬性,可據(jù)兩圖層間的運算符計算并配置屬性;若ID為i_ a_j_b,則該新多邊形具有第i個圖層第a個多邊形以及第j個圖層第b個多邊形的兩種屬 性,則需按同理計算和配置實際屬性值。作為進一步的優(yōu)選方案,所述的基于事件點組的平面掃描線算法為D1)將線段按性質(zhì)歸類若垂直,則只生成一個點,標示為垂直點,否則分為左端
7點與右端點;D2)將這些點按橫坐標排序,并把相同橫坐標的點歸為一組,稱為事件點組,并為 其設(shè)計數(shù)據(jù)結(jié)構(gòu);D3)從左到右依次取出每組事件點集合,對每組事件點按左端點、垂直點、右端點、 交點的順序執(zhí)行下面的操作D31)左端點掃描線處于某條線段el的左端點位置,則先查找該事件點組T是 否存在右端點;若存在右端點Q,且關(guān)聯(lián)的線段為e2,很明顯這兩條線段首尾相接,則只需 把線段el替換掉T中的e2即可,并與上下相鄰線段求交,繼而刪掉該組中的右端點Q;若 不存在右端點,則據(jù)當前左端點的坐標,將el插入到T中合適的位置,并與上下相鄰線段 進行求交判斷;D32)垂直點垂線的特性只與當前掃描線的狀態(tài)有關(guān);由于上一步驟已處理完左 端點,則當前與垂線有關(guān)的線段都已存在T中;而T是平衡二叉樹,可通過二分法搜索得 到一組線段集,它們與當前掃描線的交點處于垂線上,即找出滿足線段集s的條件 將當前垂線與8中線段求交,其中a為當前掃描線位置,[yl,y2]為垂線的縱 坐標范圍;D33)右端點在處理過與當前右端點具有相同坐標的左端點后,當前組剩下的右 端點所連接的線段e只需簡單地從T中刪除,并對e原來的上下兩相鄰線段進行相交判 斷;D34)交點取出該交點關(guān)聯(lián)的兩條線段el、e2,交換于t中的位置,并與各自新的 上下相鄰線段進行求交判斷。本發(fā)明的優(yōu)點或效果體現(xiàn)在如下方面1、本發(fā)明的主要創(chuàng)新之處在于(1)方法上提出基于事件點組的平面掃描線算 法,利用其對多邊形進行求交,并結(jié)合多邊形最小夾角原則逆時針深度搜索多邊形的交、 并、差和包含關(guān)系,構(gòu)建新多邊形。(2)優(yōu)化處理流程上兩圖層疊合流程設(shè)計省去了多余 流程,如對兩多邊形圖層的邊進行兩兩求交,以及重復(fù)多邊形,即多邊形求交流程通過 外包矩形快速判斷相離情況,避免了不必要的求交過程;所設(shè)計的事件點組的數(shù)據(jù)結(jié)構(gòu),能 合理、有效的存儲中間結(jié)果,不僅優(yōu)化了處理效率,而且記錄了多邊形的精確位置,使之可 得到正確結(jié)果。(3)方法的通用性上它可處理圖層中包含任意多邊形。換言之,矢量圖層 中可存在凸、凹和孔洞三種多邊形的狀況。在分析處理過程中,本方法既無需將凹多邊形分 解,也不需進行窗口的凸凹性檢查,它是一種簡單任意多邊形的通用算法,對凸、凹及含孔 洞的多邊形均適用。2、本發(fā)明的主要優(yōu)點在于(1)提出基于事件點平面掃描線算法,并運用其求兩 圖層中多邊形交點,又用平衡二叉樹保存邊以及交點信息,使得求交效率得到大幅度優(yōu)化; 在結(jié)合了最小夾角原則,逆時針搜索新多邊形,可正確得出最終結(jié)果圖層。(2)實現(xiàn)了兩 矢量圖層間任意多邊形疊合分析的優(yōu)化處理流程,不僅可提高疊合處理的工作效率,還可 解決矢量圖層疊合分析過程中特殊多邊形的處理,且疊合結(jié)果還不會出現(xiàn)重復(fù)多邊形;(3) 本方法對多邊形性質(zhì)無特殊處理要求,適用于任意多邊形,適用性很好,可適應(yīng)于多邊形矢
8量圖層疊合處理。(4)圖層數(shù)據(jù)預(yù)處理方法簡單有效。
圖1矢量圖層多邊形快速疊合方法的處理流程圖;圖2基于事件點組的平面掃描線算法流程圖;圖3平衡二叉樹及堆等高級數(shù)據(jù)結(jié)構(gòu)示意圖;圖4求交點計算復(fù)雜度比較曲線圖;圖5應(yīng)用案例道路拓寬拆遷建筑分析中的緩沖區(qū)分析;圖6應(yīng)用案例道路拓寬拆遷建筑分析中的疊合分析結(jié)果。
具體實施例方式下面結(jié)合附圖和具體實施例對本發(fā)明作進一步詳細的說明。如圖1所示本發(fā)明的核心流程是矢量圖層多邊形的疊合順序,以及基于事件點組的平面掃描 線求多邊形交點,依據(jù)多邊形最小拐角原則逆時針深度搜索,進行多邊形的交、并、差和包 含的分類。具體地講,本發(fā)明所提出的矢量圖層多邊形快速疊合方法,它可處理圖層中包含 任意多邊形,即圖層中圖形可存在凸、凹和孔洞三種多邊形的狀況。換言之,本方法既無需 將凹多邊形分解,也不需進行窗口的凸凹性檢查,它是一種簡單任意多邊形的通用算法,對 凸、凹及含孔洞的多邊形均適用。而凹及孔洞多邊形的疊合過程以凸多邊形的疊合過程為 基礎(chǔ),在處理凸多邊形圖層時,具體的分析處理過程如圖1所示包括如下步驟a、將兩圖層多邊形分別存入兩個鏈表G1和G2中,并為各圖層多邊形分配唯一 ID 號,規(guī)則為第i個圖層第j個多邊形ID為i_j ;初始化結(jié)果圖層R為空;b、若G1為空,則將G2所有多邊形存入結(jié)果圖層R中,跳到第h步;否則從G1中取 得多邊形,構(gòu)建Pi外包矩形,并從G1中刪除;c、從G2中取出所有多邊形仏,判斷仏的外包矩形是否與P的外包矩形有相交。如 果滿足下面式子(1),則表示Qi與P不會相交,將該多邊形Qi存入多邊形集合M中,否則表示 可能相交,存入多邊形集合N中;(P外包)-x2 <他外包).Xl || (P外包)-y2 <他外包)-yi || (P
外包) x! > 外包) x2 || (P外包) y! > 外包) y2 (1)d、如果N不為空,則將P與N進行事件點組的平面掃描線求交點;如果N為空,則 將P直接存進結(jié)果圖層R中,跳到第b步;e、對新生成的交點將原線段截斷,生成新的線段,并對同一頂點所關(guān)聯(lián)的邊進行 夾角排序,按頂點順序生成邊的信息鏈表;f、根據(jù)最小夾角原則,深度搜索,逆時針求出所有合法多邊形,包括P與N的交 P n N、P與N的差P-N、N與P的差N-P ;g、將P n N與P-N存入結(jié)果圖層R中,將N-P存進集合M中,更新第二個圖層G2 的數(shù)據(jù),用M覆蓋G2,G2 = M,跳到第b步;h、為結(jié)果圖層R中的新多邊形重新計算和分配屬性;i、返回結(jié)果圖層R,結(jié)束。
9
在上述方法中,步驟a的具體操作屬初始化工作,輸入兩圖層數(shù)據(jù),保存為G1、G2, 并將結(jié)果圖層R置空。本方法中規(guī)定多邊形的外圍邊輸入為逆時針輸入,孔洞多邊形為順 時針輸入,為下面步驟f構(gòu)建新多邊形時判斷多邊形的歸屬信息提供依據(jù)。步驟b是對第一個圖層G1進行的基本操作。取得疊合分析的第一個多邊形對象, 并且判斷是否應(yīng)該結(jié)束流程。如果G1為空,取不到多邊形,則表示疊合分析結(jié)束,否則保存 該多邊形為P。步驟c是對第二個圖層進行的操作。主要目的是通過判斷P與仏的外包矩形是 否相交,取得與第一個多邊形P有相交可能性的多邊形Q”并保存進多邊形集合N中,避免 對所有G2中的多邊形都進行求交,大大提高了效率。在上述方法中,步驟d對多邊形求交點是本發(fā)明的核心步驟。本方法在此流程對 多邊形求交點采用基于事件點組的平面掃描線算法。經(jīng)典的掃描線算法一般是用來求多條 獨立線段之間的交點,對于多邊形這種特殊的線段集合,會出現(xiàn)很多首尾相接的鄰邊,這在 Bently和Ottmarm提出的平面掃描線算法中被當成相交處理,需進行求交判斷,并將其作 為交點保存入事件點序列Q。事實上,兩線段首尾相接不屬于相交,故需改變原有數(shù)據(jù)結(jié)構(gòu) 及算法流程,以避免無謂的相交判斷,提高計算效率。本發(fā)明提出基于事件點組的平面掃描 線算法,新的掃描線算法流程歸納為圖3中的流程①將線段按性質(zhì)歸類若垂直,則只生 成一個點,標示為垂直點,否則分為左端點與右端點;②將這些點按橫坐標排序,并把相同 橫坐標的點歸為一組,稱為事件點組,并為其設(shè)計數(shù)據(jù)結(jié)構(gòu);③從左到右依次取出每組事件 點集合,對每組事件點按左端點、垂直點、右端點、交點的順序執(zhí)行下面的操作1)左端點掃描線處于某條線段el的左端點位置,則先查找該事件點組T是否 存在右端點;若存在右端點Q,且關(guān)聯(lián)的線段為e2,很明顯這兩條線段首尾相接,則只需把 線段el替換掉T中的e2即可,并與上下相鄰線段求交,繼而刪掉該組中的右端點Q;若不 存在右端點,則據(jù)當前左端點的坐標,將el插入到T中合適的位置,并與上下相鄰線段進 行求交判斷。2)垂直點垂線的特性只與當前掃描線的狀態(tài)有關(guān);由于上一步驟已處理完左端 點,則當前與垂線有關(guān)的線段都已存在T中;而T是平衡二叉樹,可通過二分法搜索得到 一組線段集,它們與當前掃描線的交點處于垂線上,即找出滿足線段集s的條件
d = {e\ex=a,yl <= ey<=y2,e3r]將當前垂線與5中線段求交,其中a為當前掃描線位置,[yl,y2]為垂線的縱 坐標范圍。3)右端點在處理過與當前右端點具有相同坐標的左端點后,當前組剩下的右端 點所連接的線段e只需簡單地從T中刪除,并對e原來的上下兩相鄰線段進行相交判斷。4)交點取出該交點關(guān)聯(lián)的兩條線段el、e2,交換于T中的位置,并與各自新的上 下相鄰線段進行求交判斷。本發(fā)明改用平衡二叉樹算法保存線段與交點信息,使得存取線段以及交點時復(fù)雜 度降到了 0((n+m+k)lOg(n+m+k)),其中n,m為兩多邊形的邊數(shù),k為兩多邊形的交點數(shù)。根 據(jù)多邊形相交的特性,可知k □ mXn,效率得到很大提高。在上述方法中,步驟e是利用步 驟d得到的交點,將相交的線段截斷,生成新的線段。其主要目的是為下一步重新建立新多
10邊形做數(shù)據(jù)準備,并對新生成的邊進行夾角排序,方便后面的深度搜索,提高搜索效率。在上述方法中,步驟f主要目的是重新建立新的多邊形。根據(jù)多邊形邊與邊之間 的關(guān)系,可知道臨邊之間的夾角是逆時針最小夾角。所以,此流程深度搜索多邊形時采用e 步驟對夾角排序后的邊,按順序逆時針搜索多邊形,并據(jù)所搜索到邊的方向性判斷該多邊 形的歸屬信息。具體說,可據(jù)每條構(gòu)成的邊所歸屬的原多邊形ID,判斷該邊原屬于第幾個圖層第 幾個多邊形;進而可對新生成的結(jié)果多邊形進行新的ID分配和屬性的計算,例如新多邊 形屬于第i個圖層第a個多邊形與第j個圖層第b個多邊形的交,則分配新ID為i_a_j_b ; 隨后,并據(jù)步驟h的分配規(guī)則配置新屬性。若新多邊形有邊屬于第一個圖層的正方向邊,也 即是外圍邊,那么新多邊形屬于第一個圖層覆蓋范圍;相反,如果有邊屬于第一個多邊形的 反方向邊,也即內(nèi)環(huán)邊或者外圍邊的反方向邊,那么新多邊形不屬于第一個圖層覆蓋范圍; 同理,可判斷該多邊形是否屬于第二個圖層。如果同時屬于兩個圖層覆蓋范圍,則該多邊 形是它們的交P n N;若屬于第一個圖層覆蓋范圍而不屬于第二個,則該多邊形是它們的差 P-N;若屬于第二個圖層覆蓋范圍而不屬于第一個,則該多邊形是它們的差N-P。步驟g屬于過渡流程,主要目的是保存求得的矢量圖形疊合分析結(jié)果,更新第二 個圖層數(shù)據(jù),為進行下一次疊合循環(huán)做準備。通過上述步驟b g循環(huán),直到圖層一或者圖層二中多邊形被處理完畢,將另一圖 層數(shù)據(jù)存進結(jié)果圖層R中,跳到步驟h。在步驟h,則據(jù)每個新多邊形的ID,為每個新多邊形重新分配屬性譬如ID為i_ j,則該新多邊形只具有第i個圖層第j個多邊形的屬性;若ID為i_a_j_b,則該新多邊形 具有第i個圖層第a個多邊形以及第j個圖層第b個多邊形的兩種屬性;因此,根據(jù)兩圖層 間疊合計算的運算符,例如它們之間為相加運算,則計算兩多邊形的屬性,將新屬性配置 到ID為i_a_j_b的新多邊形。步驟i 輸出結(jié)果圖層,結(jié)束流程。以上步驟可以處理一般多邊形圖層疊合??锥炊噙呅蜗啾瘸R?guī)多邊形,多了內(nèi)孔 洞多邊形,其外圍也是屬于一般多邊形情況。根據(jù)上述步驟b,外圍多邊形按逆時針輸入,內(nèi) 孔洞多邊形按順時針輸入;所以,孔洞多邊形的疊合過程和常規(guī)多邊形是一樣的,只是需將 外圍多邊形與內(nèi)孔洞多邊形單獨用上述流程處理一次,假設(shè)有孔洞多邊形A和B,結(jié)果滿足 下述等式A n B = (A.外圍多邊形n B.外圍多邊形)_(A.孔洞U B.孔洞)A-B = ((A.外圍-B.外圍)U (A.外圍n B.孔洞))_A.孔洞B-A = ((B.外圍-A.外圍)U (B.外圍HA.孔洞))_B.孔洞綜上所述,本發(fā)明提出的多邊形矢量圖層快速疊合方法,它是對兩矢量圖層中的 多邊形進行求交、并、差和包含的方法。它采用基于事件點的平面掃描線算法對多邊形線段 進行求交點;然后,通過交點截斷線段,生成新的邊,并進行夾角排序;接著,運用最小夾角 原則,逆時針生成新多邊形,并據(jù)邊的屬性判斷多邊形的歸屬信息。為了驗證本發(fā)明的可靠性,我們利用本發(fā)明方法設(shè)計和制定了相應(yīng)的測試方案和 實施流程,并為其采集了適當?shù)膶嶒灁?shù)據(jù)進行兩組圖層疊合分析的實驗1、測試方案
11
測試方案不僅從理論角度分析算法復(fù)雜度進行比較分析外,還設(shè)計了算法比較分 析的測試方案。此方案在眾多文獻中選擇較優(yōu)者——劉勇奎、楊維芳、杜爽等人的算法,一 是它與本發(fā)明算法屬同類,至少可求交、并、差;二是該算法的算法復(fù)雜度優(yōu)于現(xiàn)有其他算 法。同時,測試方案為兩個算法比較建立了相同的測試環(huán)境,S卩均采用java語言編 程,集成于SVG WebGIS中,均可在主頻為1. 99GHz的微機上運行。為了使實驗結(jié)果更具說 服力,制定了兩個測試方案實驗一,采用隨機生成四種規(guī)模數(shù)據(jù)量的具有N個頂點的兩個多邊形,對它們進 行求交、并、差的綜合運算,求出1000次的平均時間結(jié)果(單位為ms),比較兩種算法的優(yōu) 劣;實驗二,采用廣州市1 :1萬某圖幅的居民地、道路和鎮(zhèn)村界等矢量地層數(shù)據(jù) 作為實驗數(shù)據(jù),數(shù)據(jù)均采用ArcGIS軟件實施了高精度的數(shù)字化處理流程,并經(jīng)過嚴格的圖 層清理和拓撲關(guān)系處理成為E00格式;由于本方法被集成于SVG WebGIS中,故又將其轉(zhuǎn)換 為SVG(Scalable Vector Graphics)空間信息標準表達文檔,S卩基于網(wǎng)絡(luò)圖形標準SVG的 空間信息擴展標準矢量格式。測試運用兩種算法對4組不同規(guī)模的兩個圖層中多個多邊形 (N1,N2分別為各自圖層多邊形的點數(shù))進行疊合分析,不僅進行方法的實用性和有效性測 試,而且測試對實用樣本的運算效率。2、實驗結(jié)果分析圖4給出從理論角度分析兩種方法比較分析的結(jié)果,可發(fā)現(xiàn)本發(fā)明算法具備兩方 面的優(yōu)勢一是本發(fā)明算法是在統(tǒng)一定義數(shù)據(jù)結(jié)構(gòu)后,一次性求出多邊形的交、并、差,避免 了重復(fù)初始化步驟,節(jié)省很多時間,而對比方法則在多邊形求交、并、差過程中,需分別構(gòu)造 數(shù)據(jù)結(jié)構(gòu);二是它在第二階段求交點時,需把第一個多邊形每條邊與第二個多邊形進行線 裁剪(求交),復(fù)雜度為O(nXm),而本發(fā)明采用基于事件點組的平面掃描算法求交點,復(fù)雜 度降為0 ((n+m+k) log (n+m+k))。而且,當兩多邊形求交點時,交點數(shù)通常為k < < m+n,隨著 多邊形點數(shù)的增加,本方法優(yōu)越性將更加突出。為了更直觀地比較兩種方法的優(yōu)劣,先利用 MATLAB繪出求交點復(fù)雜度對比曲線圖(圖4)。圖中設(shè)k = n = m,其中橫坐標為多邊形點 數(shù);縱坐標為時間復(fù)雜度。結(jié)果表明,本方法運算效率隨著多邊形點數(shù)增加呈現(xiàn)明顯優(yōu)勢。表1實驗一的運算耗時比較(單位毫秒) 進而,又根據(jù)兩組實驗的結(jié)果進行分析比較。實驗一為隨機生成的不同規(guī)模多邊
12形序列進行實驗的結(jié)果(表1),可發(fā)現(xiàn)實驗其結(jié)果與理論分析結(jié)果一致,它隨著多邊形求 交次數(shù)或數(shù)據(jù)規(guī)模的增長,本算法的優(yōu)勢越明顯,且突現(xiàn)了本算法的高效性。
表2實驗二的運算耗時比較(毫秒) 實驗二的結(jié)果如表2所示。它對實驗數(shù)據(jù)運用兩種算法對4組不同規(guī)模的兩個圖 層中多個多邊形(N1,N2分別為各自圖層多邊形的點數(shù))進行了疊合分析。實驗結(jié)果一是 驗證了本文方法對實際地圖數(shù)據(jù)進行疊合分析應(yīng)用的實用性與有效性;二是進一步證明隨 著運算數(shù)據(jù)量的增大,其運算效率呈幾何級數(shù)增長;三是給出一個道路擴建、房屋拆遷的應(yīng) 用實例(圖5、6),圖5先選擇了道路圖層中需擴建的道路,假設(shè)這些道路需擴建25米,則計 算25米的緩沖區(qū);然后,將此圖5與居民點圖層間進行疊合分析,圖6中紅色區(qū)域則為擴建 需拆遷房屋。目前,本發(fā)明方法已集成于SVG WebGIS系統(tǒng)中,獲得快速空間分析的效果。相信 隨著方法的進一步改進,所發(fā)明的方法對空間疊合分析的精度和效率均可進一步提高。
1權(quán)利要求
一種多邊形矢量圖層快速疊合方法,其特征在于所述方法包括A)將兩矢量圖層多邊形(每個多邊形必須是封閉面狀對象)分別存入兩個鏈表G1和G2中,并為各圖層多邊形分配唯一ID號,規(guī)則為第i個圖層第j個多邊形ID為i_j;同時,初始化一個結(jié)果圖層R為空;B)分別從G1和G2中讀取多邊形,將從G1獲得的每個多邊形Pi與所有G2中的多邊形Qi進行分析判斷;直至G1為空,跳到第H步;否則將不斷從G1中取得多邊形P,并從G1中刪除;C)如果滿足下述表達式(P外包).x2<(Qi外包).x1‖(P外包).y2<(Qi外包).y1‖(P外包).x1>(Qi外包).x2‖(P外包).y1>(Qi外包).y2,則將該多邊形Qi存入多邊形集合M中,否則存入多邊形集合N中;D)進行多邊形求交,只要多邊形集合N不為空,則采用基于事件點組的平面掃描線算法對P與N進行掃描線求交點;如果N為空,則將P直接存進結(jié)果圖層R中,跳回第B步;(基于事件點組的平面掃描線算法需要保護)E)然后,開始進行多邊形重建先對步驟D中基于事件點組的平面掃描線算法所求得的多邊形交點進行原線段截斷,產(chǎn)生新的節(jié)點和連通新線段的處理;并且,對連通后節(jié)點所關(guān)聯(lián)的邊進行夾角排序,按同一節(jié)點邊的排列順序生成邊信息鏈表;F)再根據(jù)最小夾角原則,采用深度搜索,按逆時針方式求出所有合法多邊形,包括P與N的交P∩N、P與N的差P N、N與P的差N P,并為每個新的多邊形重新分配ID;G)將P∩N與P N存入結(jié)果圖層R中,將N P存進集合M中,更新第二個圖層G2的圖形數(shù)據(jù),用M覆蓋G2,即使得G2=M,返回步驟B;H)兩圖層所有多邊形已經(jīng)疊合完畢后,則結(jié)果多邊形已經(jīng)全部更新,并存于結(jié)果圖層R中,接著,對R中所有多邊形圖形數(shù)據(jù)進行屬性統(tǒng)計計算和配置;I)返回結(jié)果圖層R,結(jié)束運算。
2.根據(jù)權(quán)利要求1所述的多邊形矢量圖層快速疊合方法,其特征在于在步驟C中,根 據(jù)外包矩形對第二個圖層G2中多邊形進行分類,快速去除與第一個圖層多邊形P不可能相 交的多邊形。
3.根據(jù)權(quán)利要求1所述的多邊形矢量圖層快速疊合方法,其特征在于在步驟D中,運 用基于事件點組的掃描線算法求多個多邊形的交點,采用平衡二叉樹及堆設(shè)計存儲事件點組。
4.根據(jù)權(quán)利要求1所述的多邊形矢量圖層快速疊合方法,其特征在于在步驟E中,對 同一頂點所關(guān)聯(lián)的邊進行與橫軸夾角排序。
5.根據(jù)權(quán)利要求1所述的多邊形矢量圖層快速疊合方法,其特征在于在步驟E中,按 頂點順序新生成的邊信息鏈表包含有原多邊形P與N集合的邊方向信息,逆時針為正方向, 順時針為負方向。
6.根據(jù)權(quán)利要求1所述的多邊形矢量圖層快速疊合方法,其特征在于在步驟F中,根 據(jù)最終生成的多邊形的夾角和,判斷搜索順序是逆時針還是順時針,如果夾角和為-2^1則 為逆時針多邊形,屬于交或者差;如果是2 ji,則為順時針多邊形,屬于多邊形的并。
7.根據(jù)權(quán)利要求1所述的多邊形矢量圖層快速疊合方法,其特征在于在步驟F中,逆時針搜索到的多邊形,根據(jù)所構(gòu)成的邊的方向判斷屬于交還是差,如果有邊屬于P的正邊, 則屬于P ;如果有邊屬于P的負邊,則不屬于P ;如果有邊屬于N的正邊,則屬于N ;如果有邊 屬于N的負邊,則不屬于N;從而可以得出究竟屬于P n N、P-N還是N-P。
8.根據(jù)權(quán)利要求7所述的多邊形矢量圖層快速疊合方法,其特征在于,用于判斷所構(gòu) 成的邊的方向判斷屬于交還是差的具體判斷標準為若新多邊形有邊屬于第一個圖層的正方向邊尹,也即是外圍邊,那么新多邊形屬于第 一個圖層覆蓋范圍;相反,如果有邊屬于第一個多邊形的反方向邊尹,也即內(nèi)環(huán)邊或者外圍邊的反方向邊, 那么新多邊形不屬于第一個圖層覆蓋范圍;判斷該多邊形是否屬于第二個圖層的具體規(guī)則如下 如果同時屬于兩個圖層覆蓋范圍,則該多邊形是它們的交P n N; 若屬于第一個圖層覆蓋范圍而不屬于第二個,則該多邊形是它們的差P-N ; 若屬于第二個圖層覆蓋范圍而不屬于第一個,則該多邊形是它們的差N-P ; 判斷規(guī)則如下所示
9.根據(jù)權(quán)利要求1所述的多邊形矢量圖層快速疊合方法,其特征在于所述的基于事 件點組的平面掃描線算法為D1)將線段按性質(zhì)歸類若垂直,則只生成一個點,標示為垂直點,否則分為左端點與 右端點;D2)將這些點按橫坐標排序,并把相同橫坐標的點歸為一組,稱為事件點組,并為其設(shè) 計數(shù)據(jù)結(jié)構(gòu);D3)從左到右依次取出每組事件點集合,對每組事件點按左端點、垂直點、右端點、交點 的順序執(zhí)行下面的操作D31)左端點掃描線處于某條線段el的左端點位置,則先查找該事件點組t是否存 在右端點;若存在右端點Q,且關(guān)聯(lián)的線段為e2,很明顯這兩條線段首尾相接,則只需把線 段el替換掉T中的e2即可,并與上下相鄰線段求交,繼而刪掉該組中的右端點Q;若不存 在右端點,則據(jù)當前左端點的坐標,將el插入到T中合適的位置,并與上下相鄰線段進行 求交判斷;D32)垂直點垂線的特性只與當前掃描線的狀態(tài)有關(guān);由于上一步驟已處理完左端 點,則當前與垂線有關(guān)的線段都已存在t中;而T是平衡二叉樹,可通過二分法搜索得到 一組線段集,它們與當前掃描線的交點處于垂線上,即找出滿足線段集S的條件 5 = {e\ex=a,yx <= ey <= y2,e^r}將當前垂線與S中線段求交,其中a為當前掃描線位置,[yl,y2]為垂線的縱坐標 范圍;D33)右端點在處理過與當前右端點具有相同坐標的左端點后,當前組剩下的右端點所連接的線段e只需簡單地從T中刪除,并對e原來的上下兩相鄰線段進行相交判斷;D34)交點取出該交點關(guān)聯(lián)的兩條線段el、e2,交換于t中的位置,并與各自新的上下 相鄰線段進行求交判斷。
全文摘要
本發(fā)明涉及地理信息系統(tǒng)空間分析中矢量地圖間的分析方法,特別是一種多邊形矢量圖層快速疊合方法。本發(fā)明公開了一種多邊形矢量圖層快速疊合方法,它分別在三個環(huán)節(jié)提高計算效率1)在處理流程中,通過外包矩形快速判斷兩圖層中多邊形的相離情況,避免了不必要的求交過程;2)提出了基于事件點組的平面掃描線算法進行多邊形求交點,使得此步驟的計算復(fù)雜度由降低;3)利用所設(shè)計的事件點組的數(shù)據(jù)結(jié)構(gòu),又采用改進后的平衡二叉樹保存線段與交點信息,使其能合理、有效的存儲中間結(jié)果,優(yōu)化處理效率,使本發(fā)明的計算效率得到大幅度提高。本發(fā)明解決了疊合分析的三大難題,具有適用性好、計算復(fù)雜度低和可保持原圖精度的特點。
文檔編號G06F17/30GK101923552SQ20091021455
公開日2010年12月22日 申請日期2009年12月31日 優(yōu)先權(quán)日2009年12月31日
發(fā)明者李巖, 林智源 申請人:華南師范大學(xué)