專利名稱:一種地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法
技術領域:
本發(fā)明涉及一種地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法。
背景技術:
地理信息系統(tǒng)(Geographic Information System, GIS)的矢量數(shù)據(jù)模型主要兩種類型,即Spaghetti數(shù)據(jù)模型和拓撲數(shù)據(jù)模型(陳述彭等地理信息系統(tǒng)導論,科學出版社,2000年,P31-43)。拓撲模型的基本 實體類型包括結點、弧段和區(qū)域,其中,結點(node)位于弧段的端點或多條弧段連接點;弧段(edge)是由至少兩個點(即節(jié)點)順序地連接而成的曲線,它始于起始結點、終于終止結點;區(qū)域(area)是用弧段來描述的,是以一條或多條弧段為邊界圍成的一個連通域?;谕負鋽?shù)據(jù)模型的拓撲集中的結點、弧段和區(qū)域要素之間相互關聯(lián),而且定義了嚴格的拓撲一致性約束,如同類要素之間不重疊、相交等。在拓撲模型中,除了存儲坐標數(shù)據(jù)外,還需要記錄要素之間拓撲關系,如結點的關聯(lián)弧段、弧段的起始和終止結點、組成區(qū)域的弧段等。為了完整描述要素之間拓撲關系,用于實現(xiàn)拓撲數(shù)據(jù)模型的數(shù)據(jù)結構通常需要包括以下內(nèi)容弧段(edge)E = {path, from, to, left, right},其中,path 為弧段的路徑;from, to分別表示起始和終止結點;left, right分別為弧段的左、右區(qū)域。同一拓撲集中的弧段的起點和終點都在所述拓撲集中的結點上,所述拓撲集中的任意兩條弧段之間不存在除端點外的其它交點有向邊,也稱關聯(lián)弧段(EI) EI = {e, f},其中e為弧段標識,f為方向標識。對于結點的有向邊,若f為正方向標識,表示所述結點為弧段e的起始結點,當f為反方向標識,表示所述結點為弧段e的終止結點;對于多邊形鏈中的有向邊,若f為正方向標識,表示在多邊形鏈中弧段e按正方向連接,當f為反方向標識,表示在多邊形鏈中弧段e按反方向連接。GIS拓撲集中的每一條弧段都對應兩條有向邊,其中的一條有向邊的方向與該弧段相同,該有向邊的起點和終點分別對應該弧段的起點和終點,另一條有向邊的方向與該弧段相反,該有向邊的起點和終點分別對應其使用的弧段的終點和起點。結點(node)N = {location, edges},其中 location 表示結點位置;edges 為有向邊(EI)表,其中的有向邊(EI)按其始端連接向量與X軸正向在逆時針方向上的夾角大小排序。所述有向邊的始端連接向量是指由有向邊的終點到與該終點順序上鄰近的節(jié)點的向量。區(qū)域(area) A= {main, holes},其中,main表示區(qū)域的外邊界,是一個多邊形鏈;holes為用于存儲描述區(qū)域內(nèi)邊界的多邊形鏈數(shù)組。多邊形鏈(CHAIN)是一個關聯(lián)弧段(EI)表,其中的關聯(lián)弧段(EI)按其在構成多邊形時的連接順序排序。在一個拓撲數(shù)據(jù)集中,并非所有弧段都可參與構成多邊形鏈,通常將不能參與構成多邊形鏈的弧段稱為懸掛弧段。另外,有向邊(EI)的末端結點是指,與有向邊的對應弧段e在其方向標識f指定方向上的末端結點,即當f標識為正方向時,指的是弧段e的終止結點;當f標識為反方向時,指e的起始結點;左轉有向邊是指,當前有向邊繞其末端結點順時針方向旋轉遇到的第一條有向邊。在Spaghetti模型中,點用一個二維空間坐標表示,線由一串坐標(稱為節(jié)點或頂點,vertex)組成,面是由一條或多條線所圍成的閉合多邊形區(qū)域。Spaghetti模型中,只存儲實體的坐標數(shù)據(jù),不記錄實體間的拓撲信息。GIS矢量數(shù)據(jù)處理的一項重要內(nèi)容是利用線數(shù)據(jù)生成拓撲數(shù)據(jù)集或Spaghetti模型的面數(shù)據(jù)。在拓撲數(shù)據(jù)集的建立過程涉及區(qū)域數(shù)據(jù)的生成;而利用線數(shù)據(jù)生成Spaghetti模型面數(shù)據(jù)時,則通常需要先建立拓撲區(qū)域數(shù)據(jù),然后利用拓撲區(qū)域數(shù)據(jù)生成面數(shù)據(jù)。因而,拓撲區(qū)域數(shù)據(jù)的建立是利用線數(shù)據(jù)生成面數(shù)據(jù)的關鍵。利用線數(shù)據(jù)生成拓撲數(shù)據(jù)集的建立步驟可歸結為線數(shù)據(jù)的預處理;結點的匹配和弧段連接關系的建立;同一結點上弧-弧拓撲關系的建立;多邊形鏈搜索、構建及包含關
系的確定等。這些環(huán)節(jié)中,多邊形鏈的搜索、構建是影響拓撲區(qū)域數(shù)據(jù)構建效率的關鍵因素之一,其目的是利用拓撲數(shù)據(jù)集中弧段生成用于描述區(qū)域邊界的所有多邊形鏈。多邊形鏈搜索算法主要涉及兩個方面,一是起始有向邊的選擇;二是單個多邊形鏈的搜索和構建。選擇起始有向邊時,要求從這些有向邊出發(fā),能構造出所有多邊形鏈,同時構造出的多邊形鏈不應與已有多邊形鏈相同。當無懸掛弧段時,GIS多邊形拓撲模型中的每條弧段由兩個且僅由兩個多邊形所公共(GIS中多邊形圖拓撲信息生成的數(shù)學基礎,《測繪學報》,1996年第4期,P267-271),即每條弧段都沿正反兩個方向分別參與構成不同區(qū)域邊界的多邊形鏈。因而需要遍歷每條弧段,對尚未使用的弧段,沿其正反兩個方向進行搜索,分別構建多邊形鏈。當不存在懸掛弧段時,多邊形鏈搜索和構建的一般思路為從指定有向邊出發(fā),到達末端結點時,則按左轉算法,沿繞該結點順時針方向旋轉遇到的第一條有向邊(即左轉有向邊)繼續(xù)搜索,直至回到起始有向邊,依次訪問過的有向邊即構成一個多邊形鏈。實際應用中,拓撲數(shù)據(jù)集中往往存在懸掛弧段,因而,單個多邊形鏈構建的關鍵在于懸掛弧段的處理。當拓撲數(shù)據(jù)集中存在懸掛弧段時,由于懸掛弧段不參與構建多邊形鏈,因而必須在構建多邊形鏈時必須排除懸掛弧段。為達到這一目的,傳統(tǒng)方法是通過預處理事先排除懸掛弧段,以便在進行單個多邊形鏈搜索、構建時不必考慮懸掛弧段的影響。由于懸掛弧段的判定需要采用類似于多邊形鏈搜索的算法,通過額外的搜索計算來完成,因而這種方法會增加通過訪問結點確定左轉有向邊的次數(shù),由于左轉有向邊的確定需要查找算法確定當前有向邊在結點關聯(lián)弧段表中的位置,時間復雜度高,從而降低了整個拓撲數(shù)據(jù)集中多邊形鏈生成的時間效率。為此,有必要提供一種全新的地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法,以提高多邊形鏈的生成效率。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術問題是提供一種地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法,該地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法易于實施,且能顯著提高多邊形鏈的生成效率。發(fā)明的技術解決方案如下一種地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法,所述拓撲集中包括至少一個結點,每一個結點采用一個點來表示它的位置,所述拓撲集中的不同結點的位置不相同;所述拓撲集中還包括至少一條弧段,用以連接所述拓撲集中的結點,所述弧段是由至少兩個節(jié)點順序地連接而成的曲線,所述拓撲集中的弧段的起點和終點都在所述拓撲集中的結點上,所述拓撲集中的任意兩條弧段之間不存在除端點外的其它交點;所述拓撲集中的每一條弧段都對應兩條有向邊,其中的一條有向邊的方向與該弧段相同,該有向邊的起點和終點分別對應該弧段的起點和終點,另一條有向邊的方向與該弧段相反,該有向邊的起點和終點分別對應其使用的弧段的終點和起點;指定任一有向邊作為一趟多邊形鏈搜索的起始有向邊所述有向邊可被選擇作
為一趟多邊形鏈搜索的起始有向邊,所述一趟多邊形鏈搜索的過程是指從起始有向邊出發(fā),不經(jīng)過其他弧段,或歷經(jīng)至少一條其他弧段,直到再次回到所述起始有向邊的多邊形鏈搜索過程;所述多邊形鏈包括至少一條有向邊,這些有向邊按其在構成多邊形鏈時的連接順序排序;多邊形鏈的生成方法包括以下步驟在一趟多邊形鏈搜索中,如果某一弧段會經(jīng)過兩次,則判定該弧段為懸掛弧段,所述懸掛弧段對應的有向邊不能參與構成多邊形鏈;利用一趟多邊形鏈搜索中同一懸掛弧段對應的兩條有向邊之間的可用有向邊構建多邊形鏈,所述可用有向邊是指不包括懸掛弧段對應的有向邊、以及已被用于構建多邊形鏈的有向邊在內(nèi)的有向邊。從起始有向邊出發(fā)搜索和生成多邊形鏈,使用一個搜索鏈來記錄所經(jīng)過的有向邊,所述搜索鏈是一個有向邊表;包括以下步驟先清空搜索鏈,并指定所述起始有向邊作為當前有向邊,然后執(zhí)行以下步驟此時,當前有向邊尚未加入搜索鏈步驟I :指定當前有向邊所使用的弧段作為當前弧段;重置當前弧段,此時,當前有向邊尚未加入搜索鏈步驟2 :檢查搜索鏈中是否存在使用一條當前弧段的有向邊,如果存在,則判定當前弧段為懸掛弧段,進入步驟處理懸掛弧段;否則,轉到步驟跳過步驟3、4,將當前有向邊加入搜索鏈;步驟3 :檢查所述使用當前弧段的有向邊是否位于搜索鏈的末尾,若是,則將該有向邊從搜索鏈中刪除;否則,利用搜索鏈中該有向邊所在位置之后的有向邊構建多邊形鏈,并從搜索鏈中刪除該有向邊及之后的有向邊;回溯可用有向邊步驟4 :轉到步驟6 ;跳過步驟5,當前有向邊不再加入搜索鏈步驟5 :將當前有向邊加入到搜索鏈末尾;步驟6 :指定當前有向邊的左轉有向邊作為當前有向邊;重置當前有向邊步驟7 :判定當前有向邊與起始有向邊是否相同回到起始有向邊?,若是,轉到步驟8結束搜索;否則,返回步驟I繼續(xù)搜索;
步驟8 :檢查搜索鏈是否為空,如果空,則直接結束搜索過程;如果不空,則不構建多邊形鏈結束搜索如果不為空,則利用其中的剩下的全部有向邊構建多邊形鏈。結束搜索其中所述當前有向邊的左轉有向邊是指以所述當前有向邊的末端連接向量繞其終點所在的結點順時針旋轉大于零度角度大于零度角度的目的,是避開當前有向邊的反向有向邊,以便只有該結點上只有當前有向邊的對應弧段連接時,才會選擇當前有向邊的反向有向邊,相當于對于當前有向邊,其反向有向邊的始端連接向量的旋角是360度的方向上遇到的第一個始端連接向量的有向邊定義左轉有向邊,該始端連接向量的起點是所述末端連接向量的終點,其中所述有向邊的末端連接向量是指由有向邊上的、與其終點順序上鄰近的節(jié)點到該終點的向量定義末端連接向量,所述有向邊的始端連接向量是指由有向邊的終點到與該終點順序上鄰近的節(jié)點的向量定義始端連接向量。定義左轉有向邊本發(fā)明的主要思想是,利用一趟搜索得到的搜索鏈中,懸掛弧段會出現(xiàn)兩次,來識
別懸掛弧段;利用多邊形鏈與同一懸掛弧段對應的有向邊的嵌套關系,來提取并構建多邊形鏈,并從搜索鏈中刪除該懸掛弧段對應的有向邊及之后的有向邊;一趟搜索結束的條件是回到起始有向邊。有益效果本發(fā)明的地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法與現(xiàn)有技術相比,其優(yōu)點在于可不必通過預處理來排除懸掛弧段,而是在多邊形鏈搜索、構建過程中完成懸掛弧段的識別和排除,這樣,每個弧段結點只需訪問兩次,減少拓撲數(shù)據(jù)集中弧段的遍歷次數(shù)和訪問結點查找左轉關聯(lián)弧段的次數(shù),從而提高多邊形鏈的生成效率,加快拓撲數(shù)據(jù)集的構建速度。
圖I示出了一個GIS拓撲數(shù)據(jù)集圖形實例;圖2示出了拓撲數(shù)據(jù)集存在懸掛弧段時的三種典型情況(分別對應圖a_c);圖3示出了根據(jù)本發(fā)明實施例的從起始有向邊出發(fā)搜索和構建多邊形鏈的方法流程;圖4示出了根據(jù)本發(fā)明實施例的利用一拓撲數(shù)據(jù)集中的弧段構建多邊形鏈的方法流程。表I示出了圖I所示的GIS拓撲數(shù)據(jù)集存儲結構;
具體實施例方式以下將結合附圖和具體實施例對本發(fā)明做進一步詳細說明實施例I :本實施例在計算機上實現(xiàn),其中的GIS拓撲數(shù)據(jù)集中的弧段和結點需要首先被創(chuàng)建或裝載到計算機上。圖I示出了一個GIS拓撲數(shù)據(jù)集圖形實例100。該GIS拓撲數(shù)據(jù)集包括5個結點,它們是 NOl、N02、N03、N04 和 N05 ;6 條弧段,即 EOl、E02、E03、E04、E05 和 E06 ;3 個區(qū)域A01、A02和A03 ;圖中VOl VlI為弧段的節(jié)點。為了便于相關領域的人員進一步理解本發(fā)明中所述GIS拓撲數(shù)據(jù)集,圖2示出了圖I所示的GIS拓撲數(shù)據(jù)集存儲結構200。包括結點表201、區(qū)域表202和弧段表即表I。結點表201中每一行表不一個結點,該表中ID為該結點的唯一標識;弧段屬性的值為與該結點關聯(lián)的弧段的ID,一個結點可以有一個或多條關聯(lián)弧段,其中正值表示起始端、負值表示終止端;坐標屬性的值表示該結點的坐標,第一個為X坐標,第二個為I坐標。弧段表中每一行表示一條弧段,表中ID為該弧段的唯一標識;起始結點、終止結點屬性值為與結點表ID屬性對應的結點標識;左區(qū)域、右區(qū)域屬性值為與區(qū)域表ID屬性對應的區(qū)域標識,其中的空值表示對應的區(qū)域不存在;節(jié)點屬性值為該弧段的節(jié)點序列。區(qū)域表中每一行表示一個區(qū)域,表中的ID為該區(qū)域的唯一標識;弧段屬性值表示圍成該區(qū)域的有向邊表,該有向邊表可以分為多組,每一組表示一個多邊形鏈,由一個或多個有向邊的對應弧段ID組成,其中弧段ID前的負號表不對該有向邊的方向標識為反方向,否則為正方向,這些多邊形鏈中的第一個為外邊界的多邊形鏈,其它為內(nèi)邊界的多邊形鏈,外邊界的多邊形鏈為反時針
方向,內(nèi)邊界的多邊形鏈為順時針方向。為了便于相關領域的人員進一步理解本發(fā)明中關于從起始有向邊出發(fā)搜索和構建多邊形鏈的思想,圖3示出了存在懸掛弧段時的幾種典型情況300,如果從弧段el出發(fā),沿其正方向進行搜索,則在圖中301,302,303三種情形下得到的弧段序列分別為(I) {e” e3, _e3, _e2, e5, _e5, _e4, e4, e2, _ej ;(2) {e1; e3, _e3, ~e2, _e4, e2, _ej ;(3) {e” -e2, _e4, e5, _e6, _e5, e3, e2}。其中的負號表示經(jīng)過弧段的方向與弧段自身的方向相反。顯然,序列⑴完全由懸掛弧段組成,為非閉合鏈;序列(2)含一個多邊形鏈,但有由懸掛弧段構成的支鏈與其連接;而序列(3)則包括兩條懸掛弧段和由這兩條弧段串起來的三個多邊形鏈,形成一個多邊形串。這些結果在拓撲構建中都是不可接受的。通過分析這三個弧段序列不難發(fā)現(xiàn)在一趟搜索得到的搜索鏈中,懸掛弧段會沿不同方向出現(xiàn)兩次,而非懸掛弧段則只出現(xiàn)了一次。因此,可以根據(jù)在一趟搜索中經(jīng)過的次數(shù)來判定懸掛弧段,然后將它們從搜索鏈中剔除。但是,理想的多邊形鏈搜索策略必須能直接得到單個的多邊形鏈,以避免額外的多邊形識別和分離計算。而對于圖303中從弧段ei出發(fā),沿其正方向進行的搜索,若在弧段序列{e” -e2, -e4, e5, -e6, -e5, e3, e2}生成后,再刪除其中的懸掛弧段e2,e5的對應記錄,則余下的序列為Ie1, _e4,_e6,e3},顯然不能直接構成單個的多邊形鏈,而且要將其拆分成單個的閉合鏈也比較困難。但若注意到多邊形鏈與懸掛弧段對應的兩條有向邊之間嵌套關系,在搜索過程中,按照懸掛弧段對應的第二條有向邊加入搜索鏈的先后順序,依次取其前后兩條對應記錄之間的非空子序列構建多邊形鏈,同時將此兩條記錄及它們之間的記錄從原序列中刪除,則可依次得到{_e6}、{-e4, e3}和IeJ三個多邊形鏈。采用同樣策略,對于圖302也可相應地得到多邊形鏈{_e4},而圖301則不會有多邊形鏈產(chǎn)生。為了便于相關領域的人員理解本發(fā)明中關于從起始有向邊出發(fā)搜索和構建多邊形鏈的思想,圖3示出了根據(jù)其實施例的處理方法流程300。該方法先進行初始化,以清空搜索鏈、將當前有向邊初始化為起始有向邊(步驟302 )、當前弧段初始化為當前有向邊所使用的弧段(步驟303),然后檢查搜索鏈中是否存在使用當前弧段的有向邊(步驟304),如果搜索鏈中不存在使用當前弧段的有向邊,則將當前有向邊加入到搜索鏈末尾(步驟305),并重新指定當前有向邊的左轉有向邊作為當前有向邊(步驟309);如果搜索鏈中存在一條使用當前弧段的有向邊,則說明當前弧段為懸掛弧段,不參與構建多邊形鏈,于是進一步檢查該條使用當前弧段的有向邊是否位于搜索鏈的末尾(步驟306),如果是,則將該條有向邊從搜索鏈中刪除(步驟308),并重新指定當前有向邊的左轉有向邊作為當前有向邊(步驟309);否則,利用搜索鏈中該有向邊所在位置之后的有向邊構建多邊形鏈,并從搜索鏈中刪除該有向邊及其所在位置之后的有向邊(步驟307),并重新指定當前有向邊的左轉有向邊作為當前有向邊(步驟309)。重新指定當前有向邊的左轉有向邊作為當前有向邊(步驟309)之后,再檢查當前有向邊與起始有 向邊是否相同(步驟310),如果不相同,則進一步指定當前有向邊所使用的弧段作為當前弧段(步驟303),繼續(xù)搜索;如果當前有向邊與起始有向邊相同,則說明已經(jīng)回到起始有向邊,于是進一步檢查搜索鏈是否為空(步驟311),如果空,則直接結束搜索過程(步驟313);如果不為空,則利用搜索鏈中的全部有向邊構建多邊形鏈(步驟312 ),再結束搜索過程(步驟313 )。為了便于相關領域的人員理解本發(fā)明中涉及的關于利用GIS拓撲集中的所有弧段搜索和構建多邊形鏈的思想,圖5示出了根據(jù)其實施例的處理方法流程500。該方法先將當前弧段初始化為拓撲集中弧段表的第一條弧段(步驟502),然后檢查當前弧段是否存在(步驟503),如果不存在,則結束搜索(步驟504);如果存在,則取當前弧段作為當前有向邊的對應弧段(步驟505),并將當前有向邊標記為正方向(步驟506),接著檢查當前有向邊是否已訪問過(步驟507),若當前有向邊未訪問過,將當前有向邊標記為反方向(步驟508 ),繼續(xù);否則,若當前有向邊未訪問過,則以當前有向邊為起始有向邊采用圖3所示方法(300)搜索和構造多邊形鏈(步驟509),接著將當前有向邊標記為反方向(步驟508)。將當前有向邊標記為反方向(步驟508)后,接著檢查當前有向邊是否已訪問過(步驟510),若當前有向邊已訪問過,則將當前弧段重置為弧段表中當前弧段的下一條弧段(步驟512);否則,若當前弧段為訪問過,則以當前有向邊為起始有向邊搜索和構造多邊形鏈(步驟511),并將當前弧段重置為弧段表中當前弧段的下一條弧段(步驟512)。將當前弧段重置為弧段表中當前弧段的下一條弧段(步驟512)后,返回步驟503繼續(xù)。為方便進一步說明本發(fā)明核心內(nèi)容的細節(jié),在下面的關于本發(fā)明的實施例的描述中主要采用了類C和C++算法描述語言。為方便代碼閱讀,下述代碼中采用的數(shù)據(jù)結構未經(jīng)優(yōu)化,高效的實現(xiàn)方法可使用更優(yōu)秀的數(shù)據(jù)結構和算法。表I給出了本實施例涉及到的主要數(shù)據(jù)結構,其中EIS為有向邊表;EIS為結點;EDGE為弧段;EI為有向邊。表I
權利要求
1.一種地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法,所述拓撲集中包括至少一個結點,每一個結點采用一個點來表示它的位置,所述拓撲集中的不同結點的位置不相同; 所述拓撲集中還包括至少一條弧段,用以連接所述拓撲集中的結點,所述弧段是由至少兩個節(jié)點順序地連接而成的曲線,所述拓撲集中的弧段的起點和終點都在所述拓撲集中的結點上,所述拓撲集中的任意兩條弧段之間不存在除端點外的其它交點; 所述拓撲集中的每一條弧段都對應兩條有向邊,其中的一條有向邊的方向與該弧段相同,該有向邊的起點和終點分別對應該弧段的起點和終點,另一條有向邊的方向與該弧段相反,該有向邊的起點和終點分別對應其使用的弧段的終點和起點; 指定任一有向邊作為一趟多邊形鏈搜索的起始有向邊,所述一趟多邊形鏈搜索的過程是指從起始有向邊出發(fā),不經(jīng)過其他弧段,或歷經(jīng)至少一條其他弧段,直到再次回到所述起始有向邊的多邊形鏈搜索過程; 所述多邊形鏈包括至少一條有向邊,這些有向邊按其在構成多邊形鏈時的連接順序排序; 其特征在于,多邊形鏈的生成方法包括以下步驟 在一趟多邊形鏈搜索中,如果某一弧段會經(jīng)過兩次,則判定該弧段為懸掛弧段,所述懸掛弧段對應的有向邊不能參與構成多邊形鏈; 利用一趟多邊形鏈搜索中同一懸掛弧段對應的兩條有向邊之間的可用有向邊構建多邊形鏈,所述可用有向邊是指不包括懸掛弧段對應的有向邊、以及已被用于構建多邊形鏈的有向邊在內(nèi)的有向邊。
2.根據(jù)權利要求I所述的地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法,其特征在于,從起始有向邊出發(fā)搜索和生成多邊形鏈,使用一個搜索鏈來記錄所經(jīng)過的有向邊,所述搜索鏈是一個有向邊表;包括以下步驟 先清空搜索鏈,并指定所述起始有向邊作為當前有向邊,然后執(zhí)行以下步驟 步驟I :指定當前有向邊所使用的弧段作為當前弧段; 步驟2:檢查搜索鏈中是否存在使用一條當前弧段的有向邊,如果存在,則判定當前弧段為懸掛弧段,進入步驟3 ;否則,轉到步驟5 ; 步驟3 :檢查所述使用當前弧段的有向邊是否位于搜索鏈的末尾,若是,則將該有向邊從搜索鏈中刪除;否則,利用搜索鏈中該有向邊所在位置之后的有向邊構建多邊形鏈,并從搜索鏈中刪除該有向邊及之后的有向邊; 步驟4 :轉到步驟6 ; 步驟5 :將當前有向邊加入到搜索鏈末尾; 步驟6 :指定當前有向邊的左轉有向邊作為當前有向邊; 步驟7 :判定當前有向邊與起始有向邊是否相同,若是,轉到步驟8 ;否則,返回步驟I ;步驟8 :檢查搜索鏈是否為空,如果空,則直接結束搜索過程;如果不為空,則利用其中的全部有向邊構建多邊形鏈。
3.如權利要求2所述的方法,其特征在于,其中所述當前有向邊的左轉有向邊是指以所述當前有向邊的末端連接向量繞其終點所在的結點順時針旋轉大于零度角度的方向上遇到的第一個始端連接向量的有向邊,該始端連接向量的起點是所述末端連接向量的終點,其中所述有向邊的末端連接向量是指由有向邊上的、與其終點順序上鄰近的節(jié)點到該終點的向量,所述有 向邊的始端連接向量是指由有向邊的終點到與該終點順序上鄰近的節(jié)點的向量。
全文摘要
本發(fā)明公開了一種地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法,在一趟多邊形鏈搜索中,如果某一弧段會經(jīng)過兩次,則判定該弧段為懸掛弧段,所述懸掛弧段對應的有向邊不能參與構成多邊形鏈;利用一趟多邊形鏈搜索中同一懸掛弧段對應的兩條有向邊之間的可用有向邊構建多邊形鏈,所述可用有向邊是指不包括懸掛弧段對應的有向邊、以及已被用于構建多邊形鏈的有向邊在內(nèi)的有向邊。該地理信息系統(tǒng)拓撲集中的多邊形鏈生成方法易于實施,且能顯著提高多邊形鏈的生成效率。
文檔編號G06F17/30GK102819581SQ20121026152
公開日2012年12月12日 申請日期2012年7月26日 優(yōu)先權日2012年7月26日
發(fā)明者鄒濱, 曾永年, 邱永紅 申請人:中南大學