專利名稱::一種線面疊加方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算幾何、計(jì)算機(jī)圖形學(xué)的研究領(lǐng)域,更進(jìn)一步涉及地理信息系統(tǒng)(GeographicalInformationSystem-GIS)空間疊加分析算法的線面疊加方法。
背景技術(shù):
:地理信息系統(tǒng)是在計(jì)算機(jī)硬、軟件系統(tǒng)支持下,對(duì)整個(gè)或部分地球表層空間中的有關(guān)地理分布數(shù)據(jù)進(jìn)行采集、儲(chǔ)存、管理、運(yùn)算、分析、顯示和描述的技術(shù)系統(tǒng)。空間分析是地理信息系統(tǒng)的重要組成部分,也是評(píng)價(jià)一個(gè)地理信息系統(tǒng)功能的主要指標(biāo)之一??臻g分析是基于地理目標(biāo)的位置和形態(tài)特征的空間數(shù)據(jù)分析技術(shù),其目的是提取和發(fā)現(xiàn)隱含的空間信息和規(guī)律,是空間數(shù)據(jù)挖掘和知識(shí)發(fā)現(xiàn)的基本方法之一。空間分析主要包括空間量算、關(guān)系查詢、緩沖分析、疊加分析、網(wǎng)絡(luò)分析等內(nèi)容,其中的疊加分析是本發(fā)明所要關(guān)注的焦點(diǎn)。在常見的地理信息系統(tǒng)中,采用分層方式組織地理景觀,同一區(qū)域的整個(gè)數(shù)據(jù)層集表達(dá)了該地區(qū)地理景觀的內(nèi)容。在對(duì)分層數(shù)據(jù)進(jìn)行組合時(shí)采用了疊加分析。具體的說,疊加分析是將相關(guān)主題層組成的凄t據(jù)層進(jìn)行疊加產(chǎn)生一個(gè)新數(shù)據(jù)層的操作,其結(jié)果綜合了原來的兩層或多層要素所具有的屬性。疊加分析不僅包含空間關(guān)系的疊加,還包括屬性關(guān)系的綜合。疊加分析核心是相交線段的處理,即全局的疊加是通過對(duì)存在交點(diǎn)或者在端點(diǎn)相接的局部線段進(jìn)行處理來完成,兩個(gè)相離的線段對(duì)整體疊加的實(shí)現(xiàn)沒有任何意義。最基本的疊加分析是在兩個(gè)圖層上的操作,假設(shè)把第一個(gè)圖層叫做輸入圖層,第二個(gè)圖層叫做疊加圖層,則輸入圖層與疊加圖層之間互為對(duì)應(yīng)圖層。在疊加分析中,疊加圖層必須是面圖層,而輸入圖層可以是點(diǎn)、線或者面圖層,分別對(duì)應(yīng)點(diǎn)面、線面和面面疊加。本發(fā)明重點(diǎn)涉及線面疊加方法?,F(xiàn)有的公開技術(shù)中,只有單條線的裁剪算法,即線裁剪。對(duì)于大數(shù)據(jù)量線的裁剪,沒有相關(guān)的文獻(xiàn)可以參考。對(duì)每條線,其具體裁剪步驟如下1.求得線與多邊形的交點(diǎn),并把交點(diǎn)插入到線的存儲(chǔ)鏈表結(jié)構(gòu)中去。其中,對(duì)一些特殊類型的交點(diǎn),通過微小偏移,轉(zhuǎn)化成普通的兩兩相交的交點(diǎn)。因?yàn)橹挥幸粭l線與多邊形的線段,因此線段的數(shù)量比較少,求交點(diǎn)一般采用暴力求解法,即對(duì)線上的線段以及多邊形的邊兩兩求交點(diǎn)。2.對(duì)上述按順序存儲(chǔ)的鏈表結(jié)構(gòu)(包括端點(diǎn)與交點(diǎn)),選取某一段上的第一個(gè)交點(diǎn),判斷此交點(diǎn)的出入屬性。根據(jù)奇偶原則,可以得到所有的交點(diǎn)的出入屬性。所謂的奇偶原則即,正常相交的情形下,一條線與一個(gè)多邊形的所有交點(diǎn)必然是出入點(diǎn)交替出現(xiàn)的,不可能有兩個(gè)連續(xù)入點(diǎn),也不可能有兩個(gè)連續(xù)出點(diǎn)。因此一旦一個(gè)端點(diǎn)的出入屬性得到了,其余交點(diǎn)的出入也就得到了。3.根據(jù)交點(diǎn)及其屬性,順次得到在多邊形內(nèi)的以及在多邊形外的部分。這樣即完成了一條線與面的疊加。綜上,現(xiàn)有的技術(shù)主要存在兩方面的問題對(duì)線上的每條線段與多邊形上的每條邊計(jì)算交點(diǎn)采用暴力求解法,這樣兩兩計(jì)算的暴力算法計(jì)算速度慢。并且,對(duì)于一些特殊類型的交點(diǎn),比如相交在端點(diǎn)、重疊邊等情形,線裁剪算法一般是通過微小的數(shù)據(jù)偏移,把特殊類型的交點(diǎn)轉(zhuǎn)化成普通交點(diǎn),造成了精度的缺失。因此,迫切需要一種能夠有效降低算法復(fù)雜度、并對(duì)特殊交點(diǎn)特殊處理的方法。
發(fā)明內(nèi)容本發(fā)明的目的是克服現(xiàn)有的線面疊加方法中,在計(jì)算交點(diǎn)時(shí)暴力算法導(dǎo)致的計(jì)算速度慢的缺陷,從而提供一種基于掃描線算法的線面疊加方法。為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種線面疊加方法,包括以下步驟1)對(duì)所有線上的線段和多邊形的邊基于掃描線算法進(jìn)行計(jì)算,得到屬于線與多邊形的過同一個(gè)點(diǎn)的相交線段,計(jì)算相交線段的交點(diǎn);2)基于該交點(diǎn)對(duì)與多邊形有交點(diǎn)的線進(jìn)行處理,完成該線與該多邊形的幾4可疊加;3)基于與多邊形沒有交點(diǎn)的線上的代表點(diǎn)對(duì)該線進(jìn)行處理,完成該線與多邊形的幾何疊加;4)對(duì)幾何疊加結(jié)果賦以每條線和多邊形的屬性信息,完成所有線和多邊形的疊加。根據(jù)本發(fā)明的另一方面,上述步驟l)包括如下步驟11)接收線上線段和多邊形的邊,得到事件點(diǎn)結(jié)構(gòu);12)從事件點(diǎn)結(jié)構(gòu)中取得最小的事件點(diǎn),得到屬于線與多邊形的過同一個(gè)點(diǎn)的相交線段,計(jì)算相交線段的交點(diǎn),更新事件點(diǎn)結(jié)構(gòu);13)當(dāng)事件點(diǎn)結(jié)構(gòu)為空時(shí),輸出帶有屬性的交點(diǎn)的集合。根據(jù)本發(fā)明的另一方面,上述步驟12)中計(jì)算相交線段的交點(diǎn),包括以下步驟121)把相交線段根據(jù)所屬圖層、所屬的幾何體進(jìn)行分組,得到屬于不同圖層的小組對(duì);122)把小組對(duì)內(nèi)的任兩組相交線段的分布情形按照如下四類相交線段的分布情形進(jìn)行歸類,其中四類相交線段的分布情形是根據(jù)所述相交線段的條數(shù)以及線段之間的關(guān)系得到的redl—bluel、red2—bluel、redl—blue2以及red2—blue2,red和blue表示線段所在圖層;123)針對(duì)所屬類型,計(jì)算所述相交線段的交點(diǎn)。根據(jù)本發(fā)明的另一方面,對(duì)相交線段的分布情形的四種類別做進(jìn)一步分類,包括在redl—bluel中,相交線段的分布情形進(jìn)一步分為red線段與blue線4爻相交、相4妄和重疊;在redl一blue2中,相交線段的分布情形進(jìn)一步分為red線段與兩條blue線段分別是相接、相接和相接、重疊;在red2—bluel中,相交線段的分布情形進(jìn)一步分為兩條red線段與兩條blue線,殳相^妻、相4妄和相4妻、重疊;在red2一blue2中,相交線段的分布情形進(jìn)一步分為兩條red線段與兩條blue線段都相接、一條red線段與一條blue線段重疊和兩條red線段分別與兩條blue線段重疊。根據(jù)本發(fā)明的另一方面,上述步驟123)中計(jì)算相交線段的交點(diǎn)包括如下步驟a)、將交點(diǎn)所在的線段根據(jù)所屬圖層分為red線段和blue線段;b)、判斷所述red線段上的第二個(gè)端點(diǎn)的位置與所述blue線段的位置關(guān)系,若所述第二個(gè)端點(diǎn)在所述blue線段的內(nèi)側(cè),則所述交點(diǎn)為入點(diǎn),若所述第二個(gè)端點(diǎn)在所述blue線段的外側(cè),則所述交點(diǎn)為出點(diǎn)。根據(jù)本發(fā)明的另一方面,在redl—bluel中,red線段與blue線段相交時(shí),所述相交線段的交點(diǎn)的屬性包括出點(diǎn)或入點(diǎn)。根據(jù)本發(fā)明的另一方面,在redl—bluel中,red線段與blue線段相接時(shí),所述相交線段的交點(diǎn)不記錄或記錄并且其屬性包括相接。根據(jù)本發(fā)明的另一方面,在redl—bluel中,red線段與blue線段重疊時(shí),所述相交線段的交點(diǎn)屬性包括開始重疊或結(jié)束重疊。根據(jù)本發(fā)明的另一方面,在redl—blue2中,red線段跨越blue線段時(shí),所述相交線段的交點(diǎn)屬性包括出點(diǎn)或入點(diǎn)。根據(jù)本發(fā)明的另一方面,在redl—blue2中,red線段在blue線段的同一側(cè)時(shí),所述相交線段的交點(diǎn)不記錄或記錄并且其屬性包括相接。根據(jù)本發(fā)明的另一方面,在redl—blue2中,red線段與blue線段有重疊時(shí),所述相交線段的交點(diǎn)屬性包括開始重疊或結(jié)束重疊。根據(jù)本發(fā)明的另一方面,在red2—bluel中,兩red線段均與blue線段相接且在blue線^1的同側(cè)時(shí),所述相交線^更的交點(diǎn)不記錄或記錄并且其屬性包括相接。根據(jù)本發(fā)明的另一方面,在red2—bluel中,兩red線段均與blue線段相接且在blue線-歐的異側(cè)時(shí),所述相交線,殳的交點(diǎn)屬性包括出點(diǎn)或入點(diǎn)。根據(jù)本發(fā)明的另一方面,在red2—bluel中,當(dāng)有一條red線段與blue線段重疊時(shí),所述相交線段的交點(diǎn)屬性包括開始重疊或結(jié)束重疊。根據(jù)本發(fā)明的另一方面,在red2—blue2中,當(dāng)red線段與blue線段相接,且red線段與blue線段之間不存在交叉關(guān)系時(shí),所述相交線段的交點(diǎn)不記錄或記錄并且其屬性包括相接。根據(jù)本發(fā)明的另一方面,在red2—blue2中,當(dāng)red線段與blue線段相接時(shí),且red線段與blue線段之間存在交叉關(guān)系時(shí),所述相交線段的交點(diǎn)屬性包括出點(diǎn)或入點(diǎn)。根據(jù)本發(fā)明的另一方面,在red2—blue2中,當(dāng)一條red線段與一條blue線段重疊時(shí),所述相交線段的交點(diǎn)屬性包括開始重疊或結(jié)束重疊。根據(jù)本發(fā)明的另一方面,在red2—blue2中,red線段與blue線段不是完全重合時(shí),所述相交線段的交點(diǎn)不記錄。根據(jù)本發(fā)明的另一方面,在red2—blue2中,red線段與blue線段完全重合,且red線段所在的線與blue線段所在的多邊形的邊完全重合時(shí),所述相交線段的交點(diǎn)屬性包括完全重疊。根據(jù)本發(fā)明的另一方面,在red2—blue2中,red線段與blue線段完全重合,且red線段所在的線與blue線段所在的多邊形的邊不完全重合時(shí),所述相交線^:的交點(diǎn)不記錄。根據(jù)本發(fā)明的另一方面,上述步驟2)包括如下步驟把所述交點(diǎn)按照其所屬的線進(jìn)行分類;把屬于每一條線上的交點(diǎn)按照從所述線的起點(diǎn)到終點(diǎn)的順序排列;依次掃描所有的交點(diǎn),并根據(jù)交點(diǎn)的屬性,分別得到線在在多邊形外、在多邊形內(nèi)以及在多邊形邊界上的部分,完成幾何疊加。根據(jù)本發(fā)明的另一方面,上述步驟3)包括如下步驟在所述與多邊形沒有交點(diǎn)的線上選取代表點(diǎn);判斷代表點(diǎn)與所述多邊形的關(guān)系,并根據(jù)點(diǎn)在多邊形內(nèi)還是在多邊形外得到所述與多邊形沒有交點(diǎn)的線是在多邊形內(nèi)還是在多邊形外,完成幾何疊力口。與現(xiàn)有技術(shù)相比,本發(fā)明能夠達(dá)到如下技術(shù)效果基于掃描線算法計(jì)算交點(diǎn),降低了運(yùn)算復(fù)雜度,從而計(jì)算量減小;綜合考慮線上線段與整體多邊形的關(guān)系,提高了計(jì)算效率;且通過對(duì)各種交點(diǎn)特別是特殊交點(diǎn)的處理,提高了算法的魯棒性,使得算法能處理所有特殊的情形。以下,結(jié)合附圖來詳細(xì)說明本發(fā)明的實(shí)施例,其中圖l是本發(fā)明中所采用的掃描線算法的流程圖。圖2是異色線段位置關(guān)系示意圖。圖3是本發(fā)明線段分布情況分類示意圖。圖4是判斷僅屬于一條blue線段的交點(diǎn)的出入屬性示意圖。圖5是判斷屬于兩條blue線段的交點(diǎn)的出入屬性示意圖。圖6是兩條red線段恰好跨越兩個(gè)多邊形并且交點(diǎn)恰好是端點(diǎn)的情況示意圖。圖7是線面疊加示意圖。具體實(shí)施例方式本發(fā)明首先基于掃描線算法計(jì)算得到過同一點(diǎn)的所有線段(包括輸入圖層的線上的線段以及疊加圖層的多邊形的邊),根據(jù)過同一點(diǎn)的線段之間的關(guān)系,計(jì)算每個(gè)類型中相交線段交點(diǎn)的屬性,例如出點(diǎn)、入點(diǎn)、重疊點(diǎn)、相接點(diǎn)等;然后根據(jù)交點(diǎn)的屬性,分別計(jì)算得到線在多邊形內(nèi)的部分、在多邊形外的部分以及在多邊形邊界上的部分,亦可知道位于哪個(gè)多邊形內(nèi)部,即完成幾何疊加;最后把生成的線幾何體輔以線本身的屬性以及包含線的多邊形的屬性(對(duì)于在多邊形外側(cè)的則對(duì)應(yīng)多邊形的屬性為空),綜合生成疊加圖層?;趻呙杈€算法計(jì)算線段交點(diǎn),其輸入信息是一系列的線段,在線面疊加中包含線和多邊形上的線段,輸出信息是這些線段的交點(diǎn)。首先,接收線段,得到事件點(diǎn)結(jié)構(gòu);然后,從事件點(diǎn)結(jié)構(gòu)中取得最小的事件點(diǎn),對(duì)與此點(diǎn)關(guān)聯(lián)線段進(jìn)行處理,并把該線段存入臨時(shí)線段集合,對(duì)這些暫存的臨時(shí)線段進(jìn)行處理,更新事件點(diǎn)結(jié)構(gòu);最后,當(dāng)事件點(diǎn)結(jié)構(gòu)為空時(shí),即計(jì)算結(jié)束。在圖1中,對(duì)掃描線算法流程做了相應(yīng)的說明。該算法具體包括以下步驟a、做初始化操作,在初始化操作過程中,用所有輸入線段的端點(diǎn)初始化事件點(diǎn)結(jié)構(gòu)Q,并對(duì)初始化后的事件點(diǎn)結(jié)構(gòu)Q才艮據(jù)端點(diǎn)的坐標(biāo)做排序;初始化當(dāng)前激活線段束R為空集合;設(shè)定當(dāng)前所有線段有序集合為S;設(shè)定當(dāng)前輸出交點(diǎn)集合I為空集合。掃描線算法的基本思想是采用一條虛擬的豎直直線(即掃描線)從左到右順次掃描所有線l殳,直到結(jié)束。在這一掃描過程中,與掃描線相交的線段為所述的當(dāng)前激活線段。所述的當(dāng)前所有線段有序集合是指從輸入的幾何要素讀取得到的線段,例如,對(duì)于任一多邊形,把多邊形的組成線段插入到此集合中去,當(dāng)所有線段讀取結(jié)束后,要按照線段的左端點(diǎn)(對(duì)豎直線則是其下端點(diǎn))按照從左到右、從下到上的順序進(jìn)行排序。b、判斷Q是否是空集合,如果是空集合,則計(jì)算結(jié)束,I即為計(jì)算而得的交點(diǎn)的集合;否則循環(huán)以下操作直至Q是空集合。c、從Q中取得坐標(biāo)值最小的事件點(diǎn)p,并將其從Q中刪除。d、查找R中以p為終點(diǎn)的線段,把該線段存取到臨時(shí)線段集合segs中后,在R中依次刪除上述線段;在刪除過程中,R中線段的順序會(huì)發(fā)生改變,被刪除線段的兩相鄰線段由不相鄰轉(zhuǎn)變成相鄰,計(jì)算可能存在的交點(diǎn),若存在交點(diǎn),則把交點(diǎn)添加到Q中。e、查找R中經(jīng)過事件點(diǎn)p的線段,把查找到的線段存取到臨時(shí)線段集合segs中。將所查找到的線段的順序反置,當(dāng)R中線段的順序發(fā)生變化后,經(jīng)過此點(diǎn)的一束線段(可能是若干條)最上端與最下端的線段有了新的相鄰線段,計(jì)算可能的交點(diǎn),若存在交點(diǎn),則把交點(diǎn)添加到Q中。f、從S中選取從點(diǎn)p起始的線段,在S中刪除,加入到R中,把所選取的線段加入到segs中去,新插入的線段會(huì)導(dǎo)致R中線段順序的變化,計(jì)算新插入的線段與其相鄰線段間可能的交點(diǎn),若存在交點(diǎn),則將所得到的交點(diǎn)添加到Q中。g、返回segs內(nèi)線段,計(jì)算segs內(nèi)線段的交點(diǎn)的屬性,并把計(jì)算得到的交點(diǎn)加到交點(diǎn)集合I中去。segs中的所有線段就是過當(dāng)前交點(diǎn)的線段,包括起點(diǎn)、終點(diǎn)在當(dāng)前交點(diǎn)以及經(jīng)過當(dāng)前交點(diǎn)的線段。segs內(nèi)線段清空。從上述描述可知,通過掃描線算法所得到的計(jì)算結(jié)果中包括有通過某一交點(diǎn)的線段的信息,關(guān)于該線段的信息包括線段的起點(diǎn)坐標(biāo)、終點(diǎn)坐標(biāo)、線段所屬的圖層、所屬的幾何體ID(屬于哪條線段或者屬于哪個(gè)多邊形等)。同時(shí),任一交點(diǎn)的信息中包含產(chǎn)生此交點(diǎn)的兩線段信息,以便于后續(xù)計(jì)算中,根據(jù)交點(diǎn)的歸屬對(duì)交點(diǎn)進(jìn)行排序。在如上所述的步驟g中的返回segs內(nèi)線段,計(jì)算交點(diǎn)屬性,可以通過以下方法進(jìn)行。把這些經(jīng)過同一點(diǎn)的線段根據(jù)所屬圖層、所屬的幾何體進(jìn)行分組,然后對(duì)所有小組對(duì)進(jìn)行處理。首先按照所屬圖層進(jìn)行分組,即輸入圖層與疊加圖層上的線段各成一組;然后,再根據(jù)各線段所屬的幾何體ID進(jìn)行二次分組,比如屬于同一個(gè)多邊形或者屬于同一條線的線段分到一個(gè)小組。把屬于不同圖層的兩個(gè)小組進(jìn)行組合,形成一個(gè)小組對(duì),得到屬于不同圖層的且屬于不同幾何體的經(jīng)過同一點(diǎn)的線段分布類型的所有可能組合情形。因?yàn)槿我饩€或者多邊形幾何體經(jīng)過同一個(gè)頂點(diǎn)的邊不可能多于兩條,所以每個(gè)小組的線段數(shù)目至多為兩條。對(duì)于屬于疊加圖層的線段,因?yàn)榀B加圖層是面圖層,因此這些線段必定是多邊形的一條邊,若恰好交點(diǎn)在此類線段的端點(diǎn)位置,則必然有屬于此面圖層的兩條線段過此點(diǎn)。通過上述分組操作,根據(jù)過同一交點(diǎn)的線段中屬于同一個(gè)幾何體的線段數(shù)量,過同一點(diǎn)的線段情形分為四組redl—bluel,red2—bluel,redl—blue2,red2_blue2,其中red代表屬于輸入圖層的線段,即組成線幾何體的線段;blue代表屬于疊加圖層的線段,即組成多邊形的線段。l或2表示線段的個(gè)數(shù),例如bluel代表屬于疊加圖層的線段為1個(gè),進(jìn)一步的,redl—bluel表示這組線段分布情形中,有一條輸入圖層的線段和一條疊加圖層的線段,其他類推。在上述四組中,線段的分布又各不相同。按照線段之間的接觸關(guān)系進(jìn)行分類。經(jīng)過同一點(diǎn)的線段之間的接觸關(guān)系包括相交、相接和重疊。其中相接指兩線段僅有一個(gè)公共重合點(diǎn),并且重合點(diǎn)是至少一條線段的端點(diǎn);相交是指兩線段僅有一個(gè)公共重合點(diǎn),并且重合點(diǎn)不是任一線段的端點(diǎn);重疊包含部分重疊和完全重疊。所得到的線段關(guān)系的個(gè)數(shù)即red的線段個(gè)數(shù)與blue的線段個(gè)數(shù)之積,如red2一blue2得到的線段之間的關(guān)系有四個(gè)。然后,根據(jù)線段的位置關(guān)系來進(jìn)行細(xì)分類。特別是,對(duì)于任何有兩條線段時(shí),需要考慮異色線段是跨越這兩條線段所包圍的區(qū)域還是僅僅接觸兩線段包圍的區(qū)域,此情形如圖2所示,其中a是前者示意圖,b是后者示意圖。對(duì)線段位置關(guān)系的判斷方法如下例如判斷兩條線段ml、nl是否在線段kl的同側(cè),取ml和nl非公共交點(diǎn)的端點(diǎn),即圖中的端點(diǎn)Al和B1,以及kl的兩個(gè)端點(diǎn)Cl和Dl,分別計(jì)算A1、C1和D1構(gòu)成的三角形和Bl、Cl和Dl構(gòu)成的三角形的有向面積。若兩個(gè)面積的正負(fù)相同,則ml、nl在kl的同側(cè);反之在kl的異側(cè)。經(jīng)過上述根據(jù)線段接觸關(guān)系分類和根據(jù)線段位置關(guān)系細(xì)分類,線段全部分布情況分類如圖3所示,其中屬于輸入圖層的線段用虛線表示,屬于疊加圖層的線段用實(shí)線表示。對(duì)于redl—bluel,由于圖中實(shí)線是屬于疊加圖層上的線段,其是多邊形的一條邊,因此交點(diǎn)不可能在blue線段的端點(diǎn),否則屬于redl—blue2的情況。根據(jù)上述分析以及兩線段之間的關(guān)系,得到可能的情況有以下五種'.一是兩線段相交,如圖3中的1-l;二是red線段與blue線段接觸在端點(diǎn),如圖3中的1-2;三是兩線段部分重疊并且端點(diǎn)都不重疊,如圖3中的1-3;四是blue線段被red線段包含,即其另一個(gè)端點(diǎn)重合,如圖3中的1-4;五是blue線段在red線段內(nèi)部,即blue線段是red線段的一部分,并且沒有任何端點(diǎn)重合,如圖3中的1-5??傊瑀edl—bluel這一組的分類過程中,只是根據(jù)兩條線段之間的接觸關(guān)系來進(jìn)行分類;并且根據(jù)blue的線段一定是來自多邊形的一條邊的特點(diǎn),得到可能的五種類型。對(duì)于redl—blue2,共有9種情況,需要計(jì)算兩次線段之間的關(guān)系,即兩條blue線段分別與red線段的關(guān)系。此時(shí),red線段以及兩條blue線段的公共點(diǎn)必然是兩blue線段的端點(diǎn),并且red線段經(jīng)過端點(diǎn)。因此,可能的線段之間的關(guān)系是相接、相接;相接、重疊。對(duì)于相接、相接類型,blue的線段必定包含一個(gè)三角形區(qū)域,或者是blue所在的多邊形內(nèi)部或者外部,那么red線段雖然與兩blue線段的關(guān)系都是相接,但可能是red線段1跨越blue區(qū)域,也可能是red線段一直在blue區(qū)域的同一側(cè),如圖3中的2-1,2-2所示。2-l是穿越多邊形,2-2是與多邊形接觸而過。還有一種情形即圖3中2-3,即兩blue線的端點(diǎn)恰好是red線段的端點(diǎn)。對(duì)于相接、重疊類型,如圖3中2-4,5,6,7,8,9所示。其中重疊如redl—bluel中所述,在重疊的位置的另一個(gè)端點(diǎn)處,可能是端點(diǎn)重合或者不重合,不重合又分為兩種red線段端點(diǎn)被blue線段包含或者blue線段端點(diǎn)被red線段包含。類似地,red2—bluel共有5種情況分屬于兩種類型相接、相接;相接、重疊。其中相接、相接類型分為圖3中3-1,3-2兩種情形,3-1是兩red線段接觸blue線段代表的區(qū)域,即兩red線段在blue線段的同側(cè),3-2是兩red線段跨越blue線段,即兩red線段在blue線段的異側(cè)。相接、重疊類型如圖3中3-3,3-4,3-5所示。對(duì)于red2一blue2根據(jù)四個(gè)線段之間的關(guān)系共存在14種情況。總體可以分為如下三種僅Y又相接;一條重疊;兩條都重疊。對(duì)僅僅相接的情形,即任意兩個(gè)不同圖層的線段都是相接的關(guān)系。如圖3中4-1,4-2所示;二者區(qū)別在于兩線段互相交叉,如圖4-2,還是僅僅相接如圖4-1。對(duì)于一條重疊的情形,共有圖3中4-3,4,5這三種情況。對(duì)于兩條都重疊的情形,共有3乂3=9種情況,如圖3中4-6至4-14所示。本發(fā)明根據(jù)線段之間的關(guān)系來進(jìn)行分類,附圖只是示意,并不代表計(jì)算過程中線段就是按照?qǐng)D示的方向或者角度。實(shí)際應(yīng)用中,只要線段之間的接觸關(guān)系滿足相交、相接、重疊等,就將其劃歸到相應(yīng)的類別。只要線段之間的接觸關(guān)系確定了,并且線段所代表的幾何實(shí)體的局部位置關(guān)系確定了,那么對(duì)這些線段的處理就確定了。處理每種不同的線段組合時(shí),其基本的計(jì)算是判斷兩個(gè)線段之間的交點(diǎn)是出點(diǎn)還是入點(diǎn),可根據(jù)red線段在其方向上的第二個(gè)端點(diǎn)與多邊形的blue線段間的關(guān)系得到,即若第二個(gè)端點(diǎn)在當(dāng)前blue線段的內(nèi)側(cè),為入點(diǎn);否則為出點(diǎn)。當(dāng)然若用red線段的第一個(gè)端點(diǎn),則其出入屬性恰好變反,即第一個(gè)端點(diǎn)在內(nèi)側(cè)時(shí)是出點(diǎn),在外側(cè)時(shí)是入點(diǎn)。在上述的判斷過程中,線段都是有方向的,每條線段都有兩個(gè)端點(diǎn),沿著線段方向的第一個(gè)端點(diǎn)就是本申請(qǐng)中所涉及的第一個(gè)端點(diǎn),相應(yīng)的,沿著線段方向的第二個(gè)端點(diǎn)就是本申請(qǐng)中所涉及的第二個(gè)端點(diǎn)。如圖4所示,假設(shè)有兩條線段A、B相交,它們的交點(diǎn)為C,線段A的方向?yàn)橄蛴?,而線段B的方向?yàn)橄蛏稀O旅嫘枰袛嘟稽c(diǎn)C為出點(diǎn)還是入點(diǎn)。通常而言,一個(gè)交點(diǎn)是入點(diǎn),就表示一條線段在經(jīng)過該交點(diǎn)后進(jìn)入到一個(gè)多邊形的內(nèi)部,而一個(gè)交點(diǎn)是出點(diǎn),就表示一條線段在經(jīng)過該交點(diǎn)后走出多邊形的內(nèi)部。因此,要判斷交點(diǎn)C是出點(diǎn)還是入點(diǎn),就要看線段A是要通過點(diǎn)C進(jìn)入線段B所在多邊形的內(nèi)部還是走出線段B所在多邊形的內(nèi)部。從圖4可以知道,C點(diǎn)為入點(diǎn)。但在實(shí)際判斷過程中,通常并不能直接知道線段B所在多邊形的形狀與位置,對(duì)于線段B而言,它既可能如圖所示,為其所在多邊形區(qū)域左側(cè)的邊(即邊的右側(cè)是多邊形內(nèi)部區(qū)域),也可能是所在多邊形右側(cè)的邊。如果線段B是其所在多邊形右側(cè)的邊,則點(diǎn)C則為出點(diǎn)。因此,在本發(fā)明中給出了根據(jù)線段的方向判斷兩個(gè)線段間的交點(diǎn)是出點(diǎn)還是入點(diǎn)的判斷方法若線段的第二個(gè)端點(diǎn)在相交線段的內(nèi)側(cè),則交點(diǎn)為入點(diǎn),若線段的第二個(gè)端點(diǎn)在相交線段的外側(cè),則交點(diǎn)為出點(diǎn)。采用上述方法進(jìn)行判斷時(shí),一個(gè)前提條件是線段所在的多邊形的方向是固定的。在本發(fā)明中,假設(shè)blue線段所在多邊形的方向外環(huán)是順時(shí)針方向,內(nèi)環(huán)是逆時(shí)針。因此,根據(jù)blue線段的方向就可以知道所在多邊形的大體位置。例如,已知線段B的方向向上,則按照順時(shí)針方向,且線段B屬于多邊形的外環(huán),則線段B所在多邊形與圖中的多邊形相同。在確定多邊形方向后,就可以對(duì)內(nèi)側(cè)和外側(cè)進(jìn)4亍判斷。在判斷所述的內(nèi)側(cè)或外側(cè)時(shí),與相交線段的方向有關(guān)。例如,圖中的線段B的方向向上,則線段B的右側(cè)就是所述的內(nèi)側(cè),假如線段B的方向向下,則線段B的左側(cè)是所述的內(nèi)側(cè),而線段B的右側(cè)為外側(cè)。需要說明的是,在上述判斷過程中,在判斷的第二個(gè)端點(diǎn)是否在相交線段的內(nèi)側(cè)時(shí),并不意味著所述的第二個(gè)端點(diǎn)必須在相交線段所在多邊形的內(nèi)部,仍然以圖4為例,線段A的第二個(gè)端點(diǎn)在線段B所在多邊形的外部,但由于該端點(diǎn)在線段B的右側(cè),因此仍然可以認(rèn)為第二個(gè)端點(diǎn)在線段B的內(nèi)側(cè),使得交點(diǎn)C為入點(diǎn)。通過上述說明可以知道,利用兩個(gè)帶有方向的相交線^:,可以知道兩條相交線段的交點(diǎn)是出點(diǎn)還是入點(diǎn)。上述方法是相對(duì)于一條blue線段進(jìn)行計(jì)算。若恰好事件點(diǎn)是多邊形的端點(diǎn),即有多邊形的兩條邊也即兩條blue線段經(jīng)過此red線段,需要對(duì)一個(gè)點(diǎn)與兩鄰接邊的位置關(guān)系做判斷。其判斷方法如下這個(gè)位置關(guān)系的判斷不是得到當(dāng)前點(diǎn)是否位于多邊形的內(nèi)部,而是相對(duì)于兩條邊而言,這個(gè)點(diǎn)是否在這兩邊的內(nèi)側(cè),從而得到交點(diǎn)是出點(diǎn)還是入點(diǎn)。如圖5所示,當(dāng)前已知的線段即帶箭頭的red線段和兩條粗線條的blue線段。當(dāng)前所需的計(jì)算即判斷帶箭頭的red線段的第二個(gè)端點(diǎn)即箭頭所在的端點(diǎn)與兩粗線條blue線段的位置關(guān)系。首先判斷兩blue線段是順時(shí)針還是逆時(shí)針。若是順時(shí)針且是多邊形的外環(huán),則其多邊形類似細(xì)線條的blue實(shí)線所示,則箭頭所在的端點(diǎn)在兩blue線段的內(nèi)側(cè)(雖然可能未必在多邊形的內(nèi)部)。具體的實(shí)現(xiàn)方法是首先判斷兩鄰接邊的方向,順時(shí)針或者逆時(shí)針。兩鄰接邊把平面區(qū)域劃分為四部分,如圖所示,這四部分分別對(duì)應(yīng)兩線段的左左,左右,右左,右右區(qū)域。若兩鄰接邊是順時(shí)針的,則右右區(qū)域才是多邊形的內(nèi)側(cè)區(qū)域,其余的皆為多邊形的外側(cè)區(qū)域;若兩鄰接邊是逆時(shí)針的,則左左區(qū)域是多邊形的外側(cè)區(qū)域,其余區(qū)域都是多邊形的內(nèi)側(cè)。對(duì)于內(nèi)環(huán)與外環(huán),以上規(guī)則都適用。所以,才艮據(jù)兩鄰接邊的方向,以及點(diǎn)與兩線l殳的關(guān)系,可以得到點(diǎn)在兩線段的內(nèi)側(cè)還是外側(cè),從而得到交點(diǎn)是出點(diǎn)還是入點(diǎn)。特別地,說明一下對(duì)發(fā)生重疊情形的交點(diǎn)處理。對(duì)于任何一種有重疊發(fā)生的情形,需要記錄該點(diǎn)是開始重疊還是結(jié)束重疊,計(jì)算的方法即根據(jù)當(dāng)前red線l殳的起點(diǎn)、當(dāng)前事件點(diǎn)以及當(dāng)前red線^:的終點(diǎn)的相對(duì)位置關(guān)系,也就是線段的走向來確定的。對(duì)于red線,殳的兩端點(diǎn)沒有完全落在blue邊上或者其延長(zhǎng)線上的情形(也就是可以計(jì)算至少一個(gè)端點(diǎn)落在blue線的內(nèi)側(cè)還是外側(cè)時(shí)),則需要根據(jù)端點(diǎn)與blue邊的位置關(guān)系計(jì)算此交點(diǎn)是出點(diǎn)還是入點(diǎn)。下面根據(jù)上述判斷兩個(gè)線段之間的交點(diǎn)是出點(diǎn)還是入點(diǎn)方法,分別對(duì)每種線段分布情形做處理。Redl—bluel情形對(duì)于圖3的1-1所示的正常相交情形,計(jì)算交點(diǎn)的出入屬性,保存。對(duì)于圖3的1-2所示的在端點(diǎn)相接情形,一般可以不算交點(diǎn);當(dāng)然根據(jù)某些特殊的需求,比如要求把線面接觸而沒有真正相交的情形也算作交點(diǎn),則可以記錄這樣的點(diǎn)為交點(diǎn),交點(diǎn)屬性i殳置為相接即可。對(duì)于圖3的1-3、4、5所示的三種情形,記錄當(dāng)前交點(diǎn),并設(shè)置屬性為重疊,進(jìn)一步根據(jù)red線段走向計(jì)算是開始重疊還是結(jié)束重疊。此外,因?yàn)楫?dāng)前的blue哉段僅有一條并且red線段與blue線段是共線的,因此無法根據(jù)red線段與blue線段的關(guān)系得到此交點(diǎn)是出點(diǎn)還是入點(diǎn),因此也就不計(jì)算出入屬性。從示意圖可得,當(dāng)前的交點(diǎn)必然是red線段所在的整條線的起點(diǎn)或者終點(diǎn)(若是中間點(diǎn)的話,則在當(dāng)前點(diǎn)的位置必然還有一條線段)。Redl—blue2情形對(duì)于圖3的2-1所示的正常相交情形,兩blue線段任選一條作為產(chǎn)生交點(diǎn)的線段,并計(jì)算red線段出入屬性。對(duì)于圖3的2-2、3所示情形,根據(jù)對(duì)這種相接類型的交點(diǎn)是否記錄的需要,或記錄為相接屬性的交點(diǎn)或不記錄為交點(diǎn)。若是記錄交點(diǎn)的話,也可以計(jì)算交點(diǎn)的出入,雖然線并沒有真正走出或者走入多邊形。對(duì)于2-4,5,6而言,如圖所示,red線段的端點(diǎn)與當(dāng)前的事件點(diǎn)(也就是當(dāng)前的交點(diǎn))是不重合的,而red線段的另一個(gè)端點(diǎn)可能位于blue線段的內(nèi)部、重疊端點(diǎn)或者外部,即分別對(duì)應(yīng)三種情形。對(duì)于這三種情形,需要按照red線段的走向標(biāo)記當(dāng)前交點(diǎn)是開始重疊還是結(jié)束重疊。同時(shí),還要根據(jù)red線段的不重疊的那個(gè)端點(diǎn)與blue線段(與red線段不重疊的那條)的位置關(guān)系進(jìn)行計(jì)算,以得到當(dāng)前交點(diǎn)是出點(diǎn)還是入點(diǎn)。也就是,對(duì)上述三種情形,需要記錄開始重疊還是結(jié)束重疊,以及計(jì)算交點(diǎn)的出入屬性。對(duì)于2-7,8,9三種情形,與2-4,5,6的不同之處在于當(dāng)前的事件點(diǎn)(即交點(diǎn))恰好是red線段的端點(diǎn),并且是個(gè)末端點(diǎn)(若非末端點(diǎn),必然過此點(diǎn)還有red線段)。除了與上述重疊的端點(diǎn)對(duì)應(yīng)的端點(diǎn),red線段的另一個(gè)端點(diǎn)與blue線段有三種關(guān)系在blue線段內(nèi)部、重疊端點(diǎn)或外部,與上2-4,5,6類似。對(duì)于另一端點(diǎn)在blue線段的內(nèi)部或者端點(diǎn)重疊時(shí),則不計(jì)算此交點(diǎn)的出入屬性,這與redl—bluel的處理類似。對(duì)于端點(diǎn)在blue線段的外側(cè),則可以根據(jù)這個(gè)端點(diǎn)與blue線段(與red線段不重合的那條blue線段)的位置關(guān)系以及red線段的走向,得到當(dāng)前交點(diǎn)的出入屬性。但是,不論何種情形,都需要記錄此交點(diǎn)是開始重疊還是結(jié)束重疊。Red2—bluel情形對(duì)于圖3的3-1所示情形,同理可才艮據(jù)對(duì)這種相接類型的交點(diǎn)是否記錄的需要,或記錄為相接屬性的交點(diǎn)或不記錄為交點(diǎn)。圖3的3-2所示情形算作正常相交的交點(diǎn),并且red線段選擇在blue線段對(duì)應(yīng)多邊形內(nèi)側(cè)的一個(gè)作為產(chǎn)生交點(diǎn)的線段。這樣對(duì)于特殊類型的交點(diǎn),如圖6所示,即兩條red線段(如圖中虛線所示)恰好跨越兩個(gè)多邊形(如圖中實(shí)線所示),并且交點(diǎn)恰好是端點(diǎn)。按照上述方式,選取在多邊形內(nèi)部的線段作為產(chǎn)生交點(diǎn)的blue線段,即對(duì)左側(cè)的選取左側(cè)的線段,右側(cè)的多邊形則選取右側(cè)的線段作為產(chǎn)生交點(diǎn)的線段,如是,則具有相同坐標(biāo)的兩個(gè)交點(diǎn)被劃分到了兩條線段上,方便了對(duì)線段上的交點(diǎn)進(jìn)行排序。若第二組多邊形只有一個(gè)多邊形,則無須計(jì)較選取哪條線段作為產(chǎn)生交點(diǎn)的線段。對(duì)于3-3,4,5三種情形,因?yàn)橛幸粭l邊不重疊,因此需要計(jì)算得到當(dāng)前交點(diǎn)的出入屬性。出入屬性的計(jì)算通過不重疊的red線段的那個(gè)不重疊的端點(diǎn)與blue線段的位置關(guān)系以及red線段的走向即可得到。同時(shí),所有的交點(diǎn)都要根據(jù)red線的走向記錄開始重疊還是結(jié)束重疊。Red2—blue2情形對(duì)于圖3的4-1所示情形,根據(jù)需求記錄相接類型交點(diǎn)或者不記錄交點(diǎn)。對(duì)于圖3的4-2所示情形,記錄正常相交的交點(diǎn),與圖3的3-2情形類似,red線段也選取在blue線段對(duì)應(yīng)的多邊形內(nèi)部的作為產(chǎn)生交點(diǎn)的線段。對(duì)于圖3的4-3、4、5所示情形,因?yàn)橛幸粭l邊沒有重疊,需要計(jì)算交點(diǎn)的出入屬性;也需要根據(jù)red線段的走向,記錄交點(diǎn)是開始重疊還是結(jié)束重疊。對(duì)于圖3的4-6至14所示情形,若red線段與blue線段不是完全重合(即在末端點(diǎn)位置,端點(diǎn)沒有完全重合),則因?yàn)槠渲丿B必然從某一個(gè)點(diǎn)開始記錄,此處的交點(diǎn)只是繼續(xù)其重疊的部分,沒有終止,所以不記錄任何交點(diǎn);若是red線段與blue線段恰好完全重合,則需要判斷red線段代表的線與blue線段代表的多邊形是否完全重合,也就是各個(gè)點(diǎn)坐標(biāo)以及點(diǎn)的順序是否完全重合。此判斷是根據(jù)red線段的數(shù)據(jù)結(jié)構(gòu)和blue線段的數(shù)據(jù)結(jié)構(gòu)進(jìn)行的,其中red線段的數(shù)據(jù)結(jié)構(gòu)中包括一個(gè)指向red線段所屬線的指針,blue線段也類似,即可以通過此線段來得到整個(gè)線或者面幾何體的所有端點(diǎn)坐標(biāo)值。若重合,則記錄當(dāng)前交點(diǎn),并設(shè)置屬性為完全重疊,此后掃描到這樣的點(diǎn)即得到此線與多邊形的邊界完全重合。若不完全重合,但在此點(diǎn)處red線段與blue線段重合,即線的一部分與多邊形的邊重合,則無須記錄交點(diǎn)。這是因?yàn)檫@僅僅是重疊部分的延續(xù),因此/人不重疊到重疊的部分必然有一個(gè)界點(diǎn),那個(gè)界點(diǎn)必然被記做交點(diǎn)。根據(jù)上述掃描線算法得到交點(diǎn)后,基于交點(diǎn)是出點(diǎn)、入點(diǎn)、相接、重疊等屬性對(duì)與多邊形有交點(diǎn)的線進(jìn)行處理,得到線的信息,例如線在多邊形外的部分以及在多邊形內(nèi)的部分;對(duì)于在多邊形內(nèi)的部分,也可以根據(jù)產(chǎn)生交點(diǎn)的多邊形的ID得到在哪個(gè)多邊形內(nèi)。對(duì)所有交點(diǎn)排序,首先按照其所屬的線進(jìn)行排序,即屬于同一條線上的所有交點(diǎn)放在一起,并且根據(jù)線的ID進(jìn)行排序;然后對(duì)這些屬于同一條線上的交點(diǎn),按照其所屬的線段方向進(jìn)行排序,最終使得每條線上的交點(diǎn)按照從起點(diǎn)到終點(diǎn)的順序排列。依次掃描所有的交點(diǎn),并根據(jù)交點(diǎn)的出入,以及開始重疊、終止重疊等屬性,分別得到在多邊形外、在多邊形內(nèi)以及在多邊形邊界上的部分,完成幾何疊加。從線段的起點(diǎn)開始,若是遇到開始重疊點(diǎn)(不可能首先遇到結(jié)束重疊的點(diǎn)),則忽視其出入屬性,找到下一個(gè)交點(diǎn)(必然是結(jié)束重疊點(diǎn)),此時(shí)得到的必然是與多邊形的邊界重疊的部分。對(duì)于不是重疊的部分,則根據(jù)產(chǎn)生的線對(duì)應(yīng)的兩個(gè)交點(diǎn)(即此線的起點(diǎn)與終點(diǎn))的屬性得到此產(chǎn)生的線是在多邊形的內(nèi)部還是外部。入點(diǎn)與出點(diǎn)之間的部分必然是在多邊形內(nèi)部;出點(diǎn)與入點(diǎn)之間的部分,必然是在多邊形外部。對(duì)于產(chǎn)生的兩線只有一個(gè)是交點(diǎn)而另一個(gè)是端點(diǎn)(即原始輸入線的起點(diǎn)或者終點(diǎn))的情形,則根據(jù)一個(gè)交點(diǎn)的屬性即可得到。若是從起點(diǎn)到入點(diǎn),則是在多邊形外部的部分;起點(diǎn)到出點(diǎn),則是多邊形內(nèi)部的部分。出點(diǎn)到終點(diǎn),則是外部部分;入點(diǎn)到終點(diǎn),則是內(nèi)部部分。需要說明的是,任何產(chǎn)生的結(jié)果部分,若是對(duì)應(yīng)一個(gè)端點(diǎn)是初始輸入線的起點(diǎn)或者終點(diǎn),則另一個(gè)交點(diǎn)必然是有出入屬性的交點(diǎn),而不可能是上述計(jì)算中所述的不計(jì)算出入屬性的點(diǎn)。舉例如圖7所示,在求得所有交點(diǎn)并排序之后,順次掃描交點(diǎn)。若第一個(gè)交點(diǎn)是出點(diǎn),則起點(diǎn)到此交點(diǎn)部分即在多邊形內(nèi)部;反之在多邊形外部。之后順次掃描所有交點(diǎn),根據(jù)兩個(gè)交點(diǎn)的出入以及重疊屬性,順次得到兩個(gè)交點(diǎn)之間的線段以及這部分線段在多邊形內(nèi)還是多邊形外,直到掃描到終點(diǎn)。上述通過掃描線算法計(jì)算得到所有的交點(diǎn)后,根據(jù)交點(diǎn)即可得到與多邊形有交點(diǎn)的線與多邊形的幾何疊加結(jié)果。此外,也有一些線與多邊形沒有產(chǎn)生任何交點(diǎn)。對(duì)于與多邊形沒有交點(diǎn)的線則選取代表點(diǎn),然后判斷代表點(diǎn)與多邊形的關(guān)系,并根據(jù)點(diǎn)在多邊形內(nèi)還是在多邊形外得到輸入線是在多邊形內(nèi)還是在多邊形外,完成幾何疊加。類似的,對(duì)于在多邊形內(nèi)的線,也就得到了是在哪個(gè)多邊形內(nèi)。上述對(duì)與多邊形產(chǎn)生交點(diǎn)和沒有產(chǎn)生交點(diǎn)的線分別處理后,即得到在多邊形外的線段,在多邊形內(nèi)的線段。并且,對(duì)于在多邊形內(nèi)的線段,同時(shí)記錄了多邊形的ID。根據(jù)不同的疊加操作,可以得到在多邊形外或者在多邊形內(nèi)的部分,并且可以根據(jù)線段所屬幾何體的ID(包含red線段的輸入線的ID以及包含blue線段的多邊形的ID)繼承屬性,生成帶有屬性信息(即有地理信息意義)的要素(包括幾何體信息以及屬性信息)。也即生成的結(jié)果繼承其原來的屬性以及包含線的多邊形的屬性。比如有條高速路叫京滬高速,并且有個(gè)多邊形是山東省,則得到在山東省內(nèi)部的部分線路后,得到的結(jié)果有其地理意義京滬高速(從線繼承來的屬性),山東省(從面繼承來的屬性)。然后把這些要素綜合生成圖層并保存,即完成了整個(gè)疊加的操作。應(yīng)用了掃描線算法,本發(fā)明不僅通過對(duì)各種交點(diǎn)特別是特殊交點(diǎn)的處理,提高了算法的魯棒性,使得算法能處理所有特殊的情形;而且還通過計(jì)算局部線段的關(guān)系得到線段與整體多邊形的關(guān)系,從而提高了計(jì)算交點(diǎn)的速度。表1描述了分別應(yīng)用本發(fā)明和ArcGIS產(chǎn)品實(shí)驗(yàn)數(shù)據(jù)結(jié)果表1本發(fā)明與ArcGIS試驗(yàn)數(shù)據(jù)對(duì)比表<table>tableseeoriginaldocumentpage20</column></row><table>如表1所示,對(duì)于同一實(shí)驗(yàn)數(shù)據(jù),本發(fā)明與ArcGIS產(chǎn)品相比,計(jì)算交點(diǎn)所需要的時(shí)間明顯減少。例如對(duì)于輸入圖層線段數(shù)是924951,并且這些線段具有205269個(gè)交點(diǎn)的試驗(yàn)數(shù)據(jù),本發(fā)明所需時(shí)間為123秒,而ArcGIS產(chǎn)品需要357秒。應(yīng)該注意到并理解,在不脫離后附的權(quán)利要求所要求的本發(fā)明的精神和范圍的情況下,能夠?qū)ι鲜鲈敿?xì)描述的本發(fā)明做出各種修改和改進(jìn)。因此,要求保護(hù)的技術(shù)方案的范圍不受所給出的任何特定示范教導(dǎo)的限制。權(quán)利要求1.一種線面疊加方法,包括以下步驟1)對(duì)所有線上的線段和多邊形的邊基于掃描線算法進(jìn)行計(jì)算,得到屬于所述線與多邊形的邊的過同一個(gè)點(diǎn)的相交線段,計(jì)算所述相交線段的交點(diǎn);2)基于所述交點(diǎn)對(duì)與多邊形有交點(diǎn)的線進(jìn)行處理,完成所述與多邊形有交點(diǎn)的線與所述多邊形的幾何疊加;3)基于與多邊形沒有交點(diǎn)的線上的代表點(diǎn)對(duì)所述與多邊形沒有交點(diǎn)的線進(jìn)行處理,完成所述與多邊形沒有交點(diǎn)的線與所述多邊形的幾何疊加;4)對(duì)所述幾何疊加結(jié)果賦以每條線和多邊形的屬性信息,完成線和所述多邊形的疊加。2.根據(jù)權(quán)利要求1所示的方法,其特征在于,所述步驟l)包括如下步驟11)接收線上線段和多邊形的邊,得到事件點(diǎn)結(jié)構(gòu);12)從所述事件點(diǎn)結(jié)構(gòu)中取得最小的事件點(diǎn),得到屬于所述線與多邊形的邊的過同一個(gè)點(diǎn)的相交線段,計(jì)算所述相交線段的交點(diǎn),更新所述事件點(diǎn)結(jié)構(gòu);13)所述事件點(diǎn)結(jié)構(gòu)為空時(shí),輸出帶有屬性的交點(diǎn)的集合。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,步驟12)中所述計(jì)算所述相交線段的交點(diǎn),包括以下步驟121)把所述相交線段根據(jù)所屬圖層、所屬的幾何體進(jìn)行分組,得到屬于不同圖層的小組對(duì);122)把所述小組對(duì)內(nèi)的相交線段的分布情形按照如下四類相交線段的分布情形進(jìn)行歸類,其中所述四類相交線段的分布情形是根據(jù)所述相交線段的條數(shù)以及線段之間的關(guān)系得到的redl—bluel、red2一bluel、redl—blue2以及red2—blue2,red和blue表示線段所在圖層;123)針對(duì)所屬類型,計(jì)算所述相交線段的交點(diǎn)。4.根據(jù)權(quán)利要求3所述的方法,其特征在于,對(duì)所述相交線段的分布情形的四種類別做進(jìn)一步分類,包括在redl—bluel中,所述相交線段的分布情形進(jìn)一步分為red線段與blue線段相交、相4姿和重疊;在redl—blue2中,所述相交線段的分布情形進(jìn)一步分為red線段與兩條blue線段分別是相接、相接和相接、重疊;在red2—bluel中,所述相交線段的分布情形進(jìn)一步分為兩條red線段與兩條blue線段相接、相接和相接、重疊;在red2—blue2中,所述相交線段的分布情形進(jìn)一步分為兩條red線段與兩條blue線段都相接、一條red線段與一條blue線段重疊和兩條red線段分別與兩條blue線段重疊。5.根據(jù)權(quán)利要求3所述的方法,其特征在于,步驟123)中所述計(jì)算所述相交線段的交點(diǎn)包括如下步驟a)、將交點(diǎn)所在的線段根據(jù)所屬圖層分為red線段和blue線段;b)、判斷所述red線段上的第二個(gè)端點(diǎn)的位置與所述blue線段的位置關(guān)系,若所述第二個(gè)端點(diǎn)在所述blue線段的內(nèi)側(cè),則所述交點(diǎn)為入點(diǎn),若所述第二個(gè)端點(diǎn)在所述blue線段的外側(cè),則所述交點(diǎn)為出點(diǎn)。6.根據(jù)權(quán)利要求5所述的方法,其特征在于,在redl—bluel中,red線段與blue線段相交時(shí),所述相交線段的交點(diǎn)屬性包括出點(diǎn)或入點(diǎn)。7.根據(jù)權(quán)利要求5所述的方法,其特征在于,在redl—bluel中,red線段與blue線段相接時(shí),所述相交線段的交點(diǎn)不記錄或記錄并且其屬性包括相接。8.根據(jù)權(quán)利要求5所述的方法,其特征在于,在redl—bluel中,red線段與blue線段重疊時(shí),所述相交線段的交點(diǎn)屬性包括開始重疊或結(jié)束重疊。9.根據(jù)權(quán)利要求5所述的方法,其特征在于,在redl—blue2中,red線段跨越blue線段時(shí),所述相交線段的交點(diǎn)屬性包括出點(diǎn)或入點(diǎn)。10.根據(jù)權(quán)利要求5所述的方法,其特征在于,在redl_blue2中,red線段在blue線段的同一側(cè)時(shí),所述相交線段的交點(diǎn)不記錄或記錄并且其屬性包括相接。11.根據(jù)權(quán)利要求5所述的方法,其特征在于,在redl—blue2中,red線段與blue線段有重疊時(shí),所述相交線段的交點(diǎn)屬性包括開始重疊或結(jié)束重疊。12.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2一bluel中,兩red線段均與blue線段相接且在blue線段的同側(cè)時(shí),所述相交線段的交點(diǎn)不記錄或記錄并且其屬性包括相接。13.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2—bluel中,兩red線段均與blue線段相接且在blue線段的異側(cè)時(shí),所述相交線段的交點(diǎn)屬性包括出點(diǎn)或入點(diǎn)。14.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2—bluel中,當(dāng)有一條red線段與blue線段重疊時(shí),所述相交線段的交點(diǎn)屬性包括開始重疊或結(jié)束重疊。15.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2—blue2中,當(dāng)red線段與blue線段相接,且red線段與blue線段之間不存在交叉關(guān)系時(shí),所述相交線段的交點(diǎn)不記錄或記錄并且其屬性包括相接。16.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2—blue2中,當(dāng)red線段與blue線段相接時(shí),且red線段與blue線l殳之間存在交叉關(guān)系時(shí),所述相交線段的交點(diǎn)屬性包括出點(diǎn)或入點(diǎn)。17.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2—blue2中,當(dāng)一條red線段與一條blue線段重疊時(shí),所述相交線段的交點(diǎn)屬性包括開始重疊或結(jié)束重疊。18.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2—blue2中,red線段與blue線段不是完全重合時(shí),所述相交線段的交點(diǎn)不記錄。19.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2—blue2中,red線段與blue線段完全重合,且red線段所在的線與blue線段所在的多邊形的邊完全重合時(shí),所述相交線段的交點(diǎn)屬性包括完全重疊。20.根據(jù)權(quán)利要求5所述的方法,其特征在于,在red2—blue2中,red線段與blue線段完全重合,且red線段所在的線與blue線段所在的多邊形的邊不完全重合時(shí),所述相交線段的交點(diǎn)不記錄。21.根據(jù)權(quán)利要求1所示的方法,其特征在于,所述步驟2)包括如下步驟把所述交點(diǎn)按照其所屬的線進(jìn)行排序;把屬于每一條線上的交點(diǎn)按照從所述線的起點(diǎn)到終點(diǎn)的順序排列;依次掃描所有的交點(diǎn),并根據(jù)交點(diǎn)的屬性,分別得到線在在多邊形外、在多邊形內(nèi)以及在多邊形邊界上的部分,完成幾何疊加。22.根據(jù)權(quán)利要求1所示的方法,其特征在于,所述步驟3)包括如下步驟在所述與多邊形沒有交點(diǎn)的線上選取代表點(diǎn);判斷代表點(diǎn)與所述多邊形的關(guān)系,并根據(jù)點(diǎn)在多邊形內(nèi)還是在多邊形外得到所述與多邊形沒有交點(diǎn)的線是在多邊形內(nèi)還是在多邊形外,完成幾何疊加。全文摘要本發(fā)明提供一種線面疊加方法,包括對(duì)所有線上的線段和多邊形的邊基于掃描線算法進(jìn)行計(jì)算,得到屬于線與多邊形的邊的過同一個(gè)點(diǎn)的相交線段,計(jì)算相交線段的交點(diǎn);基于交點(diǎn)對(duì)與多邊形有交點(diǎn)的線進(jìn)行處理,完成與多邊形有交點(diǎn)的線與多邊形的幾何疊加;基于與多邊形沒有交點(diǎn)的線上的代表點(diǎn)對(duì)該線進(jìn)行處理,完成該線與多邊形的幾何疊加;對(duì)幾何疊加結(jié)果賦以每條線和多邊形的屬性信息,完成對(duì)線和多邊形的疊加。基于掃描線算法計(jì)算交點(diǎn),降低了運(yùn)算復(fù)雜度,從而計(jì)算量減??;綜合考慮線上線段與整體多邊形的關(guān)系,提高了計(jì)算效率;且通過對(duì)各種交點(diǎn)特別是特殊交點(diǎn)的處理,提高了算法的魯棒性,使得算法能處理所有特殊的情形。文檔編號(hào)G06T17/05GK101533524SQ20081010161公開日2009年9月16日申請(qǐng)日期2008年3月10日優(yōu)先權(quán)日2008年3月10日發(fā)明者焱劉,方金云,朱效民,申排偉,杰閆申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所