專利名稱:一種無拓?fù)浣Y(jié)構(gòu)矢量圖形的多邊形快速合并方法
技術(shù)領(lǐng)域:
本發(fā)明屬于矢量圖形處理技術(shù)領(lǐng)域,特別涉及一種無拓?fù)浣Y(jié)構(gòu)矢量圖形的多邊形 合并方法。
背景技術(shù):
目前柵格影像矢量化后得到的圖形大多為無拓?fù)浣Y(jié)構(gòu)矢量圖形,該圖形呈網(wǎng)絡(luò)形 態(tài),由彼此相鄰但不重合的多邊形構(gòu)成。POLYGON型的矢量圖形,由若干個(gè)多邊形結(jié)構(gòu)體組 成,每個(gè)多邊形結(jié)構(gòu)體內(nèi)包含一個(gè)容納封閉環(huán)線的子結(jié)構(gòu)體,其中每個(gè)封閉環(huán)線又包含一 組首尾相同的節(jié)點(diǎn)集。可見,原有的POLYGON型矢量圖形中,每個(gè)多邊形結(jié)構(gòu)內(nèi)只記錄了自 身節(jié)點(diǎn)集信息,缺乏拓?fù)潢P(guān)系,因此在進(jìn)行多邊形合并時(shí),必須通過大量節(jié)點(diǎn)坐標(biāo)的比較, 才能確定各多邊形的鄰近關(guān)系,在合并處理中需要大量時(shí)間和運(yùn)算開銷。另外,如果為矢量 圖形生成拓?fù)潢P(guān)系,一方面生成拓?fù)湫畔⒁残枰罅窟\(yùn)算和時(shí)間開銷,另一方面目前使用 最為廣泛、可移植性最好的矢量文件格式shp格式,并不能保存拓?fù)湫畔?,因此每次重新?開都需要耗費(fèi)大量時(shí)間重新生成拓?fù)潢P(guān)系。由此可見,目前急需一種簡便有效的新矢量圖 形數(shù)據(jù)結(jié)構(gòu),一方面可以用于保存和傳播,另一方面可以進(jìn)行多邊形快速合并等操作。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)的不足,提供一種無拓?fù)浣Y(jié)構(gòu)矢量圖形的多邊形快 速合并方法。本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的一種無拓?fù)浣Y(jié)構(gòu)矢量圖形的多邊形 快速合并方法,包括如下步驟
(1)導(dǎo)入待合并的并且具有本發(fā)明所述矢量數(shù)據(jù)結(jié)構(gòu)的矢量圖形;
(2)取出需合并兩個(gè)多邊形Al、A2(如圖1),其標(biāo)號(hào)分別為“ 1 ”、“2” ;
(3)從Al中找到含有與A2相鄰公共弧段的封閉環(huán)線,同時(shí)將公共弧段的bUsed變量標(biāo) 記為TRUE ;
(4)從A2中找到含有與Al相鄰公共弧段的封閉環(huán)線,同時(shí)將公共弧段的bUsed變量設(shè) 為 TRUE ;
(5)開始遍歷Al的選定封閉環(huán)線AlCircle中的vBds數(shù)組,即遍歷公共弧段;
(6)將A2中不含公共弧段的所有封閉環(huán)線也加入到Al多邊形的vcCircle數(shù)組中;
(7)刪除Al中含有公共弧段的封閉環(huán)線;
(8)在該矢量圖形中刪除A2多邊形;
(9)遍歷原先與A2相鄰的所有多邊形,將與A2相鄰的公共弧段的nLeftPolygonLabel 標(biāo)記“2”改為Al的標(biāo)記“1”;
(10)重復(fù)步驟2至步驟9,合并所有需合并的多邊形;
(11)導(dǎo)出合并后的矢量圖形。本發(fā)明的有益效果是,1、本發(fā)明提出一種無拓?fù)浣Y(jié)構(gòu)矢量圖形的快速合并方法,該方法包含兩方面創(chuàng)新 (1)創(chuàng)立了一種新的多邊形多層數(shù)據(jù)結(jié)構(gòu),增加記錄了公共弧段起始點(diǎn)及其鄰接信息的數(shù) 據(jù)結(jié)構(gòu);(2)提出一種“同向追蹤有效弧段”的多邊形合并方法。本文方法可以有效提高矢 量圖形的合并速度,并且可以保證合并的正確性。2、本發(fā)明方法設(shè)計(jì)了一種新的矢量圖形數(shù)據(jù)結(jié)構(gòu),并采用該結(jié)構(gòu)進(jìn)行多邊形合并 操作針對(duì)導(dǎo)入圖形中待合并的兩個(gè)多邊形,先找到含鄰接弧段的環(huán)線,并標(biāo)記公共弧段為 已使用,然后采用同向追蹤的方法在兩個(gè)環(huán)線中尋找連續(xù)未使用弧段,并將生成的新環(huán)線 和待刪除多邊形中的其他環(huán)線賦予待保留的多邊形,刪除多邊形,最終導(dǎo)出合并后的矢量 圖形。本發(fā)明采用簡便方式建立了拓?fù)浣Y(jié)構(gòu),可有效降低時(shí)間和運(yùn)算開銷。
圖1為本發(fā)明方法中多邊形快速合并示意圖。
具體實(shí)施例方式本發(fā)明建立的矢量圖形數(shù)據(jù)結(jié)構(gòu)如下所示
struct Polygon{
vector<Circle;!<> vcCircle ; int nLabel ;
ι ;
其中,vector是C++標(biāo)準(zhǔn)模板庫(Standard Template Library)中定義的一個(gè)可用于 容納各種數(shù)據(jù)類型的動(dòng)態(tài)數(shù)組。每個(gè)多邊形中包含一個(gè)容納所有封閉環(huán)線數(shù)據(jù)指針的動(dòng)態(tài) 數(shù)組vcCircle,和一個(gè)表示多邊形標(biāo)號(hào)nLabel,用以唯一標(biāo)識(shí)該多邊形。Circle是封閉環(huán) 線的數(shù)據(jù)結(jié)構(gòu),定義如下
struct Circle{
vector<point> vcPnt ; vector<BD> vcBds ;
ι ;
每個(gè)封閉環(huán)線包含一個(gè)容納所有節(jié)點(diǎn)的動(dòng)態(tài)數(shù)組vcPnt和一個(gè)容納所有公共弧段的 動(dòng)態(tài)數(shù)組vcBds。其中point是節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),BD是公共弧段的數(shù)據(jù)結(jié)構(gòu),它們的定義如 下
struct point { double χ ; double y ;
ι ;
其中X,y分別是節(jié)點(diǎn)的橫坐標(biāo)和縱坐標(biāo),它們均是實(shí)型數(shù)據(jù);
struct BD {
int nStartPos ;
int nLeftPoIygonLabel ;
int nRightPo1ygonLabe1 ;BOOL bUsed ;
};
該BD結(jié)構(gòu)中存儲(chǔ)了三個(gè)interger型數(shù)據(jù)和一個(gè)BOOL型數(shù)據(jù),其中r^tartPos用于存 儲(chǔ)該公共弧段起始點(diǎn)在該環(huán)線點(diǎn)集中的序號(hào),nLeftPolygonLabel記錄該公共弧段左側(cè)多 邊形標(biāo)號(hào),nRightPolygonLabel記錄該公共弧段右側(cè)多邊形標(biāo)號(hào),Wsed用于在合并時(shí)標(biāo) 記該公共弧段是否使用過,初始默認(rèn)值為FALSE。本發(fā)明無拓?fù)浣Y(jié)構(gòu)矢量圖形的多邊形快速合并方法的步驟如下 1、導(dǎo)入待合并的并且具有本發(fā)明所述矢量數(shù)據(jù)結(jié)構(gòu)的矢量圖形。2、取出需合并兩個(gè)多邊形A1、A2 (如圖1),其標(biāo)號(hào)分別為“1”、“2”。3、從Al中找到含有與A2相鄰公共弧段的封閉環(huán)線,即圖1中由abcde五條公共 弧段組成的封閉環(huán)線(以下簡稱為AlCircle)。同時(shí)將公共弧段c、e的bUsed變量標(biāo)記為 TRUE04、同理,從A2中找到含有與Al相鄰公共弧段的封閉環(huán)線,即圖1中由fghijekc 八條公共弧段組成的封閉環(huán)線(以下簡稱為A2Circle),同時(shí)將公共弧段c、e (與Al中方向 相反)的Wsed變量設(shè)為TRUE。5、開始遍歷Al的選定封閉環(huán)線AlCircle中的vBds數(shù)組,即遍歷abcde五條公共 弧段,具體包括以下子步驟。5. 1、如果當(dāng)前公共弧段的I^sed標(biāo)記為TRUE,則跳過,不處理。5. 2、反之,首先設(shè)置該公共弧段的I^sed等于TRUE,然后新建一個(gè)空的封閉環(huán)線 變量newCircle,記錄下起始點(diǎn)startpoint,并進(jìn)行如下處理。5. 2. 1、記錄下當(dāng)前公共弧段的終止點(diǎn)endpoint,若endpoint等于startpoint,則 進(jìn)入步驟5. 3。5. 2. 2、將當(dāng)前公共弧段中的數(shù)據(jù)加入newCircle中。5. 2. 3、從Al的所有公共弧段中搜索以endpoint為起點(diǎn)且Wsed標(biāo)記為FALSE 的公共弧段,若找到了則重復(fù)5. 2. 1-5. 2. 3步驟;若未找到,則進(jìn)入A2的所有公共弧段中搜 索以endpoint為起點(diǎn)且Wsed標(biāo)記為FALSE的公共弧段,然后重復(fù)5. 2. 1-5. 2. 3步驟。5. 3、將該新建的封閉環(huán)線變量newCircle加入到Al多邊形的vcCircle數(shù)組中。6、將A2中不含公共弧段的所有封閉環(huán)線也加入到Al多邊形的vcCircle數(shù)組中。7、刪除Al中含有公共弧段的封閉環(huán)線,如圖1中即刪除AlCircle。8、在該矢量圖形中刪除A2多邊形。9、遍歷原先與A2相鄰的所有多邊形,將與A2相鄰的公共弧段的 nLeftPolygonLabel 標(biāo)記 “2” 改為 Al 的標(biāo)記 “1”。10、重復(fù)步驟2至步驟9,合并所有需合并的多邊形。11、導(dǎo)出合并后的矢量圖形。
權(quán)利要求
1.一種無拓?fù)浣Y(jié)構(gòu)矢量圖形的多邊形快速合并方法,其特征在于,包括如下步驟(1)導(dǎo)入待合并的并且具有本發(fā)明所述矢量數(shù)據(jù)結(jié)構(gòu)的矢量圖形;(2)取出需合并兩個(gè)多邊形A1、A2(如圖1),其標(biāo)號(hào)分別為“1”、“2”;(3)從Al中找到含有與A2相鄰公共弧段的封閉環(huán)線,同時(shí)將公共弧段的bUsed變量標(biāo) 記為TRUE ;(4)從A2中找到含有與Al相鄰公共弧段的封閉環(huán)線,同時(shí)將公共弧段的bUsed變量設(shè) 為 TRUE ;(5)開始遍歷Al的選定封閉環(huán)線AlCircle中的vBds數(shù)組,即遍歷公共弧段;(6)將A2中不含公共弧段的所有封閉環(huán)線也加入到Al多邊形的vcCircle數(shù)組中;(7)刪除Al中含有公共弧段的封閉環(huán)線;(8)在該矢量圖形中刪除A2多邊形;(9)遍歷原先與A2相鄰的所有多邊形,將與A2相鄰的公共弧段的nLeftPolygonLabel 標(biāo)記“2”改為Al的標(biāo)記“1”;(10)重復(fù)步驟2至步驟9,合并所有需合并的多邊形;(11)導(dǎo)出合并后的矢量圖形。
2.根據(jù)權(quán)利要求1所述無拓?fù)浣Y(jié)構(gòu)矢量圖形的多邊形快速合并方法,其特征在于,所 述步驟(5)具體包括以下子步驟;(5. 1)如果當(dāng)前公共弧段的I^sed標(biāo)記為TRUE,則跳過,不處理;(5. 2)反之,首先設(shè)置該公共弧段的I^sed等于TRUE,然后新建一個(gè)空的封閉環(huán)線變量 newCircle,記錄下起始點(diǎn)startpoint,并進(jìn)行如下處理;(5. 2. 1)記錄下當(dāng)前公共弧段的終止點(diǎn)endpoint,若endpoint等于startpoint,則進(jìn) 入步驟5. 3 ;(5. 2. 2)將當(dāng)前公共弧段中的數(shù)據(jù)加入newCircle中;(5. 2. 3)從Al的所有公共弧段中搜索以endpoint為起點(diǎn)且Wsed標(biāo)記為FALSE的公 共弧段,若找到了則重復(fù)5. 2. 1-5. 2. 3步驟;若未找到,則進(jìn)入A2的所有公共弧段中搜索以 endpoint為起點(diǎn)且bUsed標(biāo)記為FALSE的公共弧段,然后重復(fù)5. 2. 1-5. 2. 3步驟;(5. 3)將該新建的封閉環(huán)線變量newCircle加入到Al多邊形的vcCircle數(shù)組中。
全文摘要
本發(fā)明公開了一種無拓?fù)浣Y(jié)構(gòu)矢量圖形的多邊形快速合并方法,本發(fā)明方法設(shè)計(jì)了一種新的矢量圖形數(shù)據(jù)結(jié)構(gòu),并采用該結(jié)構(gòu)進(jìn)行多邊形合并操作針對(duì)導(dǎo)入圖形中待合并的兩個(gè)多邊形,先找到含鄰接弧段的環(huán)線,并標(biāo)記公共弧段為已使用,然后采用同向追蹤的方法在兩個(gè)環(huán)線中尋找連續(xù)未使用弧段,并將生成的新環(huán)線和待刪除多邊形中的其他環(huán)線賦予待保留的多邊形,刪除多邊形,最終導(dǎo)出合并后的矢量圖形。本發(fā)明采用簡便方式建立了拓?fù)浣Y(jié)構(gòu),可有效降低時(shí)間和運(yùn)算開銷。
文檔編號(hào)G06T11/00GK102103759SQ201110080279
公開日2011年6月22日 申請(qǐng)日期2011年3月31日 優(yōu)先權(quán)日2011年3月31日
發(fā)明者吳寧, 陳秋曉 申請(qǐng)人:浙江大學(xué)