專利名稱:空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法
技術(shù)領(lǐng)域:
本發(fā)明屬于空間數(shù)據(jù)引擎領(lǐng)域,特別地涉及一種用于空間數(shù)據(jù)引擎中復(fù)雜窗口提取空間信息的方法。
背景技術(shù):
空間數(shù)據(jù)引擎(Spatial Data Engine)是位于應(yīng)用程序和數(shù)據(jù)庫管理系統(tǒng) (RDBMS)之間的一種中間件技術(shù),其實(shí)質(zhì)是基于商用數(shù)據(jù)庫構(gòu)建空間數(shù)據(jù)庫,以提供數(shù)據(jù)存儲、管理的功能。用戶通過空間數(shù)據(jù)引擎將各種來源的空間數(shù)據(jù)提交給RDBMS進(jìn)行統(tǒng)一管理,也可以通過空間數(shù)據(jù)引擎從RDBMS中提取滿足需要的數(shù)據(jù)。基于空間數(shù)據(jù)引擎的應(yīng)用系統(tǒng)一般可以劃分為三個層次前臺客戶端、中間層應(yīng)用服務(wù)器和后臺數(shù)據(jù)庫服務(wù)器,空間數(shù)據(jù)引擎屬于中間層應(yīng)用服務(wù)器,它向客戶端提供一套空間數(shù)據(jù)的訪問接口,處理客戶端的請求,執(zhí)行空間查詢,從后臺數(shù)據(jù)庫服務(wù)器獲得數(shù)據(jù)并返回給客戶端。空間數(shù)據(jù)引擎中如何實(shí)現(xiàn)數(shù)據(jù)的高效快速提取是評判空間數(shù)據(jù)引擎系統(tǒng)設(shè)計(jì)優(yōu)劣的一項(xiàng)重要指標(biāo)。空間數(shù)據(jù)引擎向客戶端提供的訪問接口是通過一套符合OpenGIS規(guī)范的空間函數(shù)實(shí)現(xiàn)的,這套空間函數(shù)是對關(guān)系數(shù)據(jù)標(biāo)準(zhǔn)查詢語言(SQL)的一種擴(kuò)充,它要解決的是如何操縱空間數(shù)據(jù)和執(zhí)行各種空間查詢等問題。窗口空間信息提取主要是指多邊形窗口對點(diǎn)圖層、線圖層或多邊形圖層的信息提取,一個圖層在數(shù)據(jù)庫中就是一張表,表中記錄了圖層中幾何要素的空間信息和屬性信息。 多邊形窗口對點(diǎn)圖層、線圖層和多邊形圖層的空間信息提取,結(jié)果可以是與窗口相交的點(diǎn)、 線、多邊形記錄號,也可以是與窗口進(jìn)行裁剪的結(jié)果點(diǎn)、線、多邊形。空間信息提取主要步驟為⑴客戶端給空間數(shù)據(jù)引擎發(fā)送請求,該請求是一條空間查詢語句,語句給定了要查詢的相關(guān)圖層信息;(2)空間數(shù)據(jù)引擎解析查詢語句,從數(shù)據(jù)庫中提取數(shù)據(jù),并按照查詢語句中的空間函數(shù),執(zhí)行相關(guān)處理得到滿足條件的結(jié)果集;(3)空間數(shù)據(jù)引擎將滿足條件的空間信息發(fā)送給客戶端。在上述步驟中,空間函數(shù)的實(shí)現(xiàn)效率決定了客戶端與服務(wù)器之間消息傳遞響應(yīng)的速度。目前,在這一環(huán)節(jié)中,針對空間信息的提取前人提出了一些相關(guān)的拓?fù)溆?jì)算和多邊形裁剪方法,這些方法雖然提高了空間查詢效率,但是弧段之間的大量無效判斷難以避免,在處理海量空間數(shù)據(jù)時效率較低,客戶端和服務(wù)器端的響應(yīng)速度較慢而難以滿足應(yīng)用。
發(fā)明內(nèi)容
本發(fā)明要解決技術(shù)問題是克服現(xiàn)有技術(shù)的上述不足,提供一種制圖過程簡單、運(yùn)算速度快的空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法。為了解決以上技術(shù)問題,本發(fā)明提供的空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法,包括以下步驟a、針對數(shù)據(jù)庫中的線數(shù)據(jù)表和多邊形數(shù)據(jù)表,分別構(gòu)建各自的輔助表;其中,構(gòu)建線數(shù)據(jù)表的輔助表方法如下將線數(shù)據(jù)表讀入內(nèi)存,構(gòu)成線圖層,過線圖層中各線目標(biāo)的端點(diǎn)及轉(zhuǎn)折點(diǎn)作水平掃描線,將與掃描線相交的線目標(biāo)一次分割為若干線段單元,利用所有線段單元的信息建立線數(shù)據(jù)表的輔助表,并存入數(shù)據(jù)庫,該線數(shù)據(jù)表的輔助表至少包括線段單元的編號信息、線段單元的端點(diǎn)坐標(biāo)信息、以及線段單元所屬線目標(biāo)的信息;構(gòu)建多邊形數(shù)據(jù)表的輔助表方法如下將多邊形數(shù)據(jù)表讀入內(nèi)存,構(gòu)成多邊形圖層,過多邊形圖層中各多邊形的所有轉(zhuǎn)折點(diǎn)作水平掃描線,將多邊形一次分割成若干多邊形單元,所述多邊形單元包括梯形、三角形,利用所有多邊形單元的信息建立多邊形數(shù)據(jù)表的輔助表,并存入數(shù)據(jù)庫,該多邊形數(shù)據(jù)表的輔助表至少包括多邊形單元的編號信息、多邊形單元的端點(diǎn)坐標(biāo)信息、多邊形單元所屬多邊形的信息;b、空間數(shù)據(jù)引擎接收來自客戶端的查詢請求,解析查詢語句,讀取查詢所涉圖層對應(yīng)的數(shù)據(jù)表,完成基本的查詢過濾,所述查詢所涉圖層對應(yīng)的數(shù)據(jù)表包括點(diǎn)數(shù)據(jù)表、線數(shù)據(jù)表的輔助表、多邊形數(shù)據(jù)表的輔助表,過多邊形窗口的轉(zhuǎn)折點(diǎn)做水平掃描線,將多邊形窗口一次分割成若干多邊形窗口單元;C、判斷要執(zhí)行空間查詢對象的類型,若查詢對象為點(diǎn)數(shù)據(jù),則轉(zhuǎn)至步驟d ;若查詢對象為線數(shù)據(jù),則轉(zhuǎn)至步驟e ;若查詢對象為多邊形數(shù)據(jù),則轉(zhuǎn)至步驟f ;d、將落入所有多邊形窗口單元的點(diǎn)信息作為點(diǎn)數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g;e、利用線數(shù)據(jù)表的輔助表中的掃描線信息,對多邊形窗口單元進(jìn)行二次分割,利用多邊形窗口的掃描線信息對線段單元二次分割,若查詢對象為相交線數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上線段單元,將與多邊形窗口單元相交的線段單元所屬線目標(biāo)的信息作為相交線數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g ;若查詢對象為裁剪線數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的線段單元,記錄與多邊形窗口單元相交的線段單元所屬線目標(biāo)的信息及交點(diǎn)信息,遍歷完成后,為每條線目標(biāo)記錄其線上所有交點(diǎn)信息,并將位于多邊形窗口單元內(nèi)部的線目標(biāo)的初始端點(diǎn)、終止端點(diǎn)作為相應(yīng)線目標(biāo)的交點(diǎn)予以保存,以線目標(biāo)的初始端點(diǎn)為起點(diǎn),對線目標(biāo)上的各交點(diǎn)出現(xiàn)次序排序,按照排序的順序,相鄰交點(diǎn)依次兩兩組對,成對交點(diǎn)之間的線段即為裁剪結(jié)果,并將該成對交點(diǎn)之間的線段作為裁剪線數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g ;f、利用多邊形數(shù)據(jù)表的輔助表中的掃描線信息,對多邊形窗口單元進(jìn)行二次分割,利用多邊形窗口的掃描線信息對多邊形單元二次分割,若查詢對象為相交多邊形數(shù)據(jù), 遍歷所有由相鄰掃描線構(gòu)成的條帶上的多邊形單元,將與多邊形窗口相交的多邊形單元所屬多邊形的信息作為相交多邊形數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g ; 若查詢對象為裁剪多邊形數(shù)據(jù),則過多邊形單元與多邊形窗口的交點(diǎn)作水平掃描線,將與該水平掃描線相交的多邊形單元及多邊形窗口單元進(jìn)行三次分割,遍歷所有由相鄰掃描線構(gòu)成的條帶上的多邊形單元,將多邊形單元與多邊形窗口單元重疊部分作為獨(dú)立的重疊多邊形單元,以重疊多邊形單元為基礎(chǔ)進(jìn)行邊界追蹤提取多邊形,并將所述通過邊界追蹤獲得的多邊形作為裁剪多邊形數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g ;g、空間數(shù)據(jù)引擎將步驟d、e、f中返回的信息提取結(jié)果發(fā)送給客戶端。本發(fā)明中,線段單元與多邊形窗口單元相交的判斷方法是當(dāng)線段單元的兩端點(diǎn)中只有一個端點(diǎn)位于同一多邊形窗口單元內(nèi)部,則表明該線段單元與多邊形窗口單元相交。多邊形單元與多邊形窗口單元相交的判斷方法是當(dāng)多邊形單元的任意斜邊與多邊形窗口單元的斜邊相交,則表明該多邊形單元與多邊形窗口單元相交。其中,斜邊與多邊形窗口單元相交的判斷方法可參見線段單元與多邊形窗口單元相交的判斷方法。本發(fā)明的有益效果是(1)、執(zhí)行空間信息提取時,將線分割成線段單元,多邊形分割成多邊形單元,并且將多邊形窗口也進(jìn)行了分割。多邊形窗口對點(diǎn)的信息提取轉(zhuǎn)化為點(diǎn)與多邊形基元的包含關(guān)系判斷;多邊形窗口對線的信息提取轉(zhuǎn)化為多邊形單元對線段單元的裁剪及相交關(guān)系判斷;多邊形窗口對多邊形的信息提取轉(zhuǎn)化為圖層間多邊形單元對多邊形單元的裁剪及相交關(guān)系判斷。大大簡化運(yùn)算的復(fù)雜程度,避免大量的弧段求交和弧段打斷重組等過程,提高運(yùn)算效率,杜絕運(yùn)算錯誤。(2)、本發(fā)明方法將復(fù)雜的空間關(guān)系運(yùn)算轉(zhuǎn)化為位于同一條帶上點(diǎn)與多邊形(梯形)、線段與多邊形(梯形)、多邊形(梯形)與多邊形(梯形)的空間位置關(guān)系判定,判斷方法簡單,易于實(shí)現(xiàn),計(jì)算機(jī)的執(zhí)行效率高;并且目標(biāo)元素的端點(diǎn)、轉(zhuǎn)折點(diǎn)以及與窗口多變性的交點(diǎn)都采用浮點(diǎn)數(shù)形式表示,在提高運(yùn)算效率的情況下保證運(yùn)算精度不受影響。因此,本方法相對于傳統(tǒng)矢量圖元素空間關(guān)系運(yùn)算具有無可比擬的優(yōu)越性,主要體現(xiàn)在算法簡單、程序量少、處理效率高;而相對于傳統(tǒng)純柵格圖的元素空間關(guān)系運(yùn)算方法而言,又具有運(yùn)算量小、運(yùn)算速度快、精度高的優(yōu)點(diǎn)。O)、對數(shù)據(jù)進(jìn)行預(yù)處理,將線、多邊形進(jìn)行一次分割,將線打斷成線段單元,將多邊形分割為多邊形基元,并以輔助表形式存儲于數(shù)據(jù)庫,查詢時直接讀取相應(yīng)輔助表,可以優(yōu)化數(shù)據(jù)查詢處理速度。查詢時無需再次進(jìn)行一次分割,而可直接執(zhí)行二次分割及三次分割,查詢時所要執(zhí)行的分割運(yùn)算量大大減少,提高運(yùn)算速率,加速空間數(shù)據(jù)查詢的響應(yīng)速度。除此之外,本發(fā)明還提供了另一種空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法, 包括以下步驟A、空間數(shù)據(jù)引擎接收來自客戶端的查詢請求,解析查詢語句,讀取查詢所涉圖層對應(yīng)的數(shù)據(jù)表,完成基本的查詢過濾;B、判斷要執(zhí)行空間查詢對象的類型,若查詢對象為點(diǎn)數(shù)據(jù),則轉(zhuǎn)至步驟C;若查詢對象為線數(shù)據(jù),則轉(zhuǎn)至步驟D ;若查詢對象為多邊形數(shù)據(jù),則轉(zhuǎn)至步驟E ;C、多邊形窗口的轉(zhuǎn)折點(diǎn)做水平掃描線,將多邊形窗口分割成若干多邊形窗口單元,將落入所有多邊形窗口單元的點(diǎn)信息作為點(diǎn)數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,轉(zhuǎn)至步驟F;D、過線圖層中各線目標(biāo)的端點(diǎn)及轉(zhuǎn)折點(diǎn)、多邊形窗口的轉(zhuǎn)折點(diǎn)做水平掃描線,將線目標(biāo)分割為若干線段單元,同時將多邊形窗口分割成若干多邊形窗口單元,若查詢對象為相交線數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的線段單元,將與多邊形窗口單元相交的線段單元所屬線目標(biāo)的信息作為相交線數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟F;若查詢對象為裁剪線數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的線段單元, 記錄與多邊形窗口單元相交的線段單元所屬線目標(biāo)的信息及交點(diǎn)信息,遍歷完成后,為每條線目標(biāo)記錄其線上所有交點(diǎn)信息,并將位于多邊形窗口單元內(nèi)部的線目標(biāo)的初始端點(diǎn)、終止端點(diǎn)作為相應(yīng)線目標(biāo)的交點(diǎn)予以保存,以線目標(biāo)的初始端點(diǎn)為起點(diǎn),對線目標(biāo)上的各交點(diǎn)出現(xiàn)次序排序,按照排序的順序,相鄰交點(diǎn)依次兩兩組對,成對交點(diǎn)之間的線段即為裁剪結(jié)果,并將該成對交點(diǎn)之間的線段作為裁剪線數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟F;E、過多邊形圖層中多邊形的轉(zhuǎn)折點(diǎn)、多邊形窗口的轉(zhuǎn)折點(diǎn)做水平掃描線,將多邊形分割為若干多邊形單元,同時將多邊形窗口分割成若干多邊形窗口單元,若查詢對象為相交多邊形數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的多邊形單元,將與多邊形窗口相交的多邊形單元所屬多邊形的信息作為相交多邊形數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟F ;若查詢對象為裁剪多邊形數(shù)據(jù),則過多邊形單元與多邊形窗口的交點(diǎn)作水平掃描線,將與該水平掃描線相交的多邊形單元及多邊形窗口單元再次分割,遍歷所有由相鄰掃描線構(gòu)成的條帶上的多邊形單元,將多邊形單元與多邊形窗口單元重疊部分作為獨(dú)立的重疊多邊形單元,以重疊多邊形單元為基礎(chǔ)進(jìn)行邊界追蹤提取多邊形,并將所述通過邊界追蹤獲得的多邊形作為裁剪多邊形數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟F ;F、空間數(shù)據(jù)引擎將步驟C、D、E中返回的信息提取結(jié)果發(fā)送給客戶端。與前述空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法相比,本提取方法在查詢時對線數(shù)據(jù)、多邊形數(shù)據(jù)進(jìn)行分割,而不進(jìn)行預(yù)處理,雖然運(yùn)算數(shù)率、處理效率不及前者,但同樣采用單元判別的方法,因此運(yùn)算過程較傳統(tǒng)方法更簡單,查詢效率更高且不會出錯,具備本發(fā)明有益效果部分第一條、第二條的優(yōu)點(diǎn)。
下面結(jié)合附圖對本發(fā)明作進(jìn)一步的說明。圖1是本發(fā)明方法的流程圖。圖2是線圖層數(shù)據(jù)的線目標(biāo)分解示意圖,圖層中有兩條線目標(biāo)。圖3是多邊形圖層數(shù)據(jù)的多邊形分解示意圖,圖層中有兩個多邊形,圖中給出了 4 個多邊形單元示例,分別以橫線和豎線填充;圖中兩個多邊形被分解為25個多邊形單元。圖4是多邊形窗口對點(diǎn)數(shù)據(jù)的信息提取示意圖,位于多邊形內(nèi)的點(diǎn)將被提取出來;多邊形窗口與點(diǎn)的信息提取轉(zhuǎn)化為多邊形窗口單元與點(diǎn)數(shù)據(jù)的包含關(guān)系判定。圖5是多邊形窗口對線數(shù)據(jù)的信息提取示意圖,圖中多邊形窗口具有11條條帶, 線數(shù)據(jù)有5條條帶,在進(jìn)行信息提取時條帶間交叉將生成17條條帶。圖6是多邊形窗口對線數(shù)據(jù)的信息提取結(jié)果示意圖,以粗線條表示的線為線數(shù)據(jù)提取結(jié)果。圖7是多邊形窗口對多邊形數(shù)據(jù)的信息提取示意圖,圖中多邊形窗口具有11條條帶,多邊形數(shù)據(jù)具有3條條帶,在進(jìn)行信息提取時條帶間交叉將生成15條條帶。圖8是在完成多邊形窗口與多邊形數(shù)據(jù)條帶交叉后,針對條帶中多邊形單元與多邊形窗口單元斜邊相交計(jì)算過程示意圖,圖中虛線為基元間相交點(diǎn)所做的水平線,這將進(jìn)一步細(xì)化多邊形單元、多邊形窗口單元。圖9是多邊形窗口單元對多邊形單元裁剪的信息提取過程,此過程中需要將多邊形單元、多邊形窗口單元進(jìn)行分裂,保留重合部分,并剔除掉不重合的部分。
圖10是多邊形窗口對多邊形裁剪過程邊界追蹤提取示意圖,圖中箭頭表示以多邊形單元、多邊形窗口單元的斜邊為基礎(chǔ)進(jìn)行的追蹤方向示意。圖11是多邊形窗口對多邊形裁剪結(jié)果示意圖,圖中粗線條表示的多邊形是最終提取結(jié)果。
具體實(shí)施例方式下面根據(jù)附圖詳細(xì)說明本發(fā)明,本發(fā)明的目的和效果將變得更加明顯,圖1為本發(fā)明方法的流程圖。在空間數(shù)據(jù)引擎中,窗口可以是通過在客戶端繪制的一般規(guī)則或不規(guī)則多邊形, 也可以是數(shù)據(jù)庫中經(jīng)過基本查詢過濾所得的多邊形圖層,其空間信息提取原理相同,為敘述簡便,本發(fā)明以數(shù)據(jù)庫中的多邊形圖層作為基本信息提取窗口。本發(fā)明空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法,包括以下步驟a、針對數(shù)據(jù)庫中的線數(shù)據(jù)表和多邊形數(shù)據(jù)表,分別構(gòu)建各自的輔助表;其中,構(gòu)建線數(shù)據(jù)表的輔助表方法如下將線數(shù)據(jù)表讀入內(nèi)存,構(gòu)成線圖層,過線圖層中各線目標(biāo)的端點(diǎn)及轉(zhuǎn)折點(diǎn)作水平掃描線,將與掃描線相交的線目標(biāo)一次分割為若干線段單元,利用所有線段單元的信息建立線數(shù)據(jù)表的輔助表,并存入數(shù)據(jù)庫,該線數(shù)據(jù)表的輔助表至少包括線段單元的編號信息、線段單元的端點(diǎn)坐標(biāo)信息、以及線段單元所屬線目標(biāo)的信息;構(gòu)建多邊形數(shù)據(jù)表的輔助表方法如下將多邊形數(shù)據(jù)表讀入內(nèi)存,構(gòu)成多邊形圖層,過多邊形圖層中各多邊形的所有轉(zhuǎn)折點(diǎn)作水平掃描線,將多邊形一次分割成若干多邊形單元,所述多邊形單元包括梯形、三角形,利用所有多邊形單元的信息建立多邊形數(shù)據(jù)表的輔助表,并存入數(shù)據(jù)庫,該多邊形數(shù)據(jù)表的輔助表至少包括多邊形單元的編號信息、多邊形單元的端點(diǎn)坐標(biāo)信息、多邊形單元所屬多邊形的信息;在空間數(shù)據(jù)庫中,空間數(shù)據(jù)及其屬性數(shù)據(jù)存儲在數(shù)據(jù)庫表中,一張表代表一個圖層,該圖層數(shù)據(jù)為點(diǎn)、線或者多邊形的一種。對于線和多邊形數(shù)據(jù)的輔助表構(gòu)建,附圖2給出了線數(shù)據(jù)的分解過程,附圖3給出了多邊形數(shù)據(jù)的分解過程,在完成這種分解后,按照新的幾何要素構(gòu)建對應(yīng)的輔助表。在附圖2中,假定一張線數(shù)據(jù)表中有兩條線,對組成線的每個點(diǎn)做水平掃描線,則可以將空間分為多個條帶。圖中所有的線共有12個頂點(diǎn),12條水平線將線數(shù)據(jù)所在的空間分解為11個條帶。在某條條帶上有多條小線段,本發(fā)明稱之為線段單元,且每個小線段屬于已知的原線數(shù)據(jù)表中某條線,圖中標(biāo)記了每個小線段在該條帶上的編號。因此,可以為每個線數(shù)據(jù)表新增一個輔助表,該表記錄了所有的小線段,每條小線段作為輔助表中的一條記錄。線數(shù)據(jù)輔助表的各字段及其意義如下表 表 權(quán)利要求
1.空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法,包括以下步驟a、針對數(shù)據(jù)庫中的線數(shù)據(jù)表和多邊形數(shù)據(jù)表,分別構(gòu)建各自的輔助表;其中,構(gòu)建線數(shù)據(jù)表的輔助表方法如下將線數(shù)據(jù)表讀入內(nèi)存,構(gòu)成線圖層,過線圖層中各線目標(biāo)的端點(diǎn)及轉(zhuǎn)折點(diǎn)作水平掃描線,將與掃描線相交的線目標(biāo)一次分割為若干線段單元,利用所有線段單元的信息建立線數(shù)據(jù)表的輔助表,并存入數(shù)據(jù)庫,該線數(shù)據(jù)表的輔助表至少包括線段單元的編號信息、線段單元的端點(diǎn)坐標(biāo)信息、以及線段單元所屬線目標(biāo)的 fn息;構(gòu)建多邊形數(shù)據(jù)表的輔助表方法如下將多邊形數(shù)據(jù)表讀入內(nèi)存,構(gòu)成多邊形圖層, 過多邊形圖層中各多邊形的所有轉(zhuǎn)折點(diǎn)作水平掃描線,將多邊形一次分割成若干多邊形單元,所述多邊形單元包括梯形、三角形,利用所有多邊形單元的信息建立多邊形數(shù)據(jù)表的輔助表,并存入數(shù)據(jù)庫,該多邊形數(shù)據(jù)表的輔助表至少包括多邊形單元的編號信息、多邊形單元的端點(diǎn)坐標(biāo)信息、多邊形單元所屬多邊形的信息;b、空間數(shù)據(jù)引擎接收來自客戶端的查詢請求,解析查詢語句,讀取查詢所涉圖層對應(yīng)的數(shù)據(jù)表,完成基本的查詢過濾,所述查詢所涉圖層對應(yīng)的數(shù)據(jù)表包括點(diǎn)數(shù)據(jù)表、線數(shù)據(jù)表的輔助表、多邊形數(shù)據(jù)表的輔助表,過多邊形窗口的轉(zhuǎn)折點(diǎn)做水平掃描線,將多邊形窗口一次分割成若干多邊形窗口單元;C、判斷要執(zhí)行空間查詢對象的類型,若查詢對象為點(diǎn)數(shù)據(jù),則轉(zhuǎn)至步驟d ;若查詢對象為線數(shù)據(jù),則轉(zhuǎn)至步驟e ;若查詢對象為多邊形數(shù)據(jù),則轉(zhuǎn)至步驟f ;d、將落入所有多邊形窗口單元的點(diǎn)信息作為點(diǎn)數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g;e、利用線數(shù)據(jù)表的輔助表中的掃描線信息,對多邊形窗口單元進(jìn)行二次分割,利用多邊形窗口的掃描線信息對線段單元二次分割,若查詢對象為相交線數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上線段單元,將與多邊形窗口單元相交的線段單元所屬線目標(biāo)的信息作為相交線數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g ;若查詢對象為裁剪線數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的線段單元,記錄與多邊形窗口單元相交的線段單元所屬線目標(biāo)的信息及交點(diǎn)信息,遍歷完成后,為每條線目標(biāo)記錄其線上所有交點(diǎn)信息,并將位于多邊形窗口單元內(nèi)部的線目標(biāo)的初始端點(diǎn)、終止端點(diǎn)作為相應(yīng)線目標(biāo)的交點(diǎn)予以保存,以線目標(biāo)的初始端點(diǎn)為起點(diǎn),對線目標(biāo)上的各交點(diǎn)出現(xiàn)次序排序,按照排序的順序,相鄰交點(diǎn)依次兩兩組對,成對交點(diǎn)之間的線段即為裁剪結(jié)果,并將該成對交點(diǎn)之間的線段作為裁剪線數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g ;f、利用多邊形數(shù)據(jù)表的輔助表中的掃描線信息,對多邊形窗口單元進(jìn)行二次分割,利用多邊形窗口的掃描線信息對多邊形單元二次分割,若查詢對象為相交多邊形數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的多邊形單元,將與多邊形窗口相交的多邊形單元所屬多邊形的信息作為相交多邊形數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g ;若查詢對象為裁剪多邊形數(shù)據(jù),則過多邊形單元與多邊形窗口的交點(diǎn)作水平掃描線,將與該水平掃描線相交的多邊形單元及多邊形窗口單元進(jìn)行三次分割,遍歷所有由相鄰掃描線構(gòu)成的條帶上的多邊形單元,將多邊形單元與多邊形窗口單元重疊部分作為獨(dú)立的重疊多邊形單元,以重疊多邊形單元為基礎(chǔ)進(jìn)行邊界追蹤提取多邊形,并將所述通過邊界追蹤獲得的多邊形作為裁剪多邊形數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟g ;g、空間數(shù)據(jù)引擎將步驟d、e、f中返回的信息提取結(jié)果發(fā)送給客戶端。
2.根據(jù)權(quán)利要求1所述的空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法,其特征在于 線段單元與多邊形窗口單元相交的判斷方法是當(dāng)線段單元的兩端點(diǎn)中只有一個端點(diǎn)位于同一多邊形窗口單元內(nèi)部,則表明該線段單元與多邊形窗口單元相交。
3.根據(jù)權(quán)利要求1所述的空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法,其特征在于 多邊形單元與多邊形窗口單元相交的判斷方法是當(dāng)多邊形單元的任意斜邊與多邊形窗口單元的斜邊相交,則表明該多邊形單元與多邊形窗口單元相交。
4.空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法,包括以下步驟A、空間數(shù)據(jù)引擎接收來自客戶端的查詢請求,解析查詢語句,讀取查詢所涉圖層對應(yīng)的數(shù)據(jù)表,完成基本的查詢過濾;B、判斷要執(zhí)行空間查詢對象的類型,若查詢對象為點(diǎn)數(shù)據(jù),則轉(zhuǎn)至步驟C;若查詢對象為線數(shù)據(jù),則轉(zhuǎn)至步驟D ;若查詢對象為多邊形數(shù)據(jù),則轉(zhuǎn)至步驟E ;C、多邊形窗口的轉(zhuǎn)折點(diǎn)做水平掃描線,將多邊形窗口分割成若干多邊形窗口單元,將落入所有多邊形窗口單元的點(diǎn)信息作為點(diǎn)數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,轉(zhuǎn)至步驟F;D、過線圖層中各線目標(biāo)的端點(diǎn)及轉(zhuǎn)折點(diǎn)、多邊形窗口的轉(zhuǎn)折點(diǎn)做水平掃描線,將線目標(biāo)分割為若干線段單元,同時將多邊形窗口分割成若干多邊形窗口單元,若查詢對象為相交線數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的線段單元,將與多邊形窗口單元相交的線段單元所屬線目標(biāo)的信息作為相交線數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟F ;若查詢對象為裁剪線數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的線段單元,記錄與多邊形窗口單元相交的線段單元所屬線目標(biāo)的信息及交點(diǎn)信息,遍歷完成后,為每條線目標(biāo)記錄其線上所有交點(diǎn)信息,并將位于多邊形窗口單元內(nèi)部的線目標(biāo)的初始端點(diǎn)、終止端點(diǎn)作為相應(yīng)線目標(biāo)的交點(diǎn)予以保存,以線目標(biāo)的初始端點(diǎn)為起點(diǎn),對線目標(biāo)上的各交點(diǎn)出現(xiàn)次序排序,按照排序的順序,相鄰交點(diǎn)依次兩兩組對,成對交點(diǎn)之間的線段即為裁剪結(jié)果,并將該成對交點(diǎn)之間的線段作為裁剪線數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟F ;E、過多邊形圖層中多邊形的轉(zhuǎn)折點(diǎn)、多邊形窗口的轉(zhuǎn)折點(diǎn)做水平掃描線,將多邊形分割為若干多邊形單元,同時將多邊形窗口分割成若干多邊形窗口單元,若查詢對象為相交多邊形數(shù)據(jù),遍歷所有由相鄰掃描線構(gòu)成的條帶上的多邊形單元,將與多邊形窗口相交的多邊形單元所屬多邊形的信息作為相交多邊形數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎, 并轉(zhuǎn)至步驟F ;若查詢對象為裁剪多邊形數(shù)據(jù),則過多邊形單元與多邊形窗口的交點(diǎn)作水平掃描線,將與該水平掃描線相交的多邊形單元及多邊形窗口單元再次分割,遍歷所有由相鄰掃描線構(gòu)成的條帶上的多邊形單元,將多邊形單元與多邊形窗口單元重疊部分作為獨(dú)立的重疊多邊形單元,以重疊多邊形單元為基礎(chǔ)進(jìn)行邊界追蹤提取多邊形,并將所述通過邊界追蹤獲得的多邊形作為裁剪多邊形數(shù)據(jù)的信息提取結(jié)果返回給空間數(shù)據(jù)引擎,并轉(zhuǎn)至步驟F;F、空間數(shù)據(jù)引擎將步驟C、D、E中返回的信息提取結(jié)果發(fā)送給客戶端。
全文摘要
空間數(shù)據(jù)引擎中復(fù)雜窗口空間信息提取方法,提出一種將線及多邊形圖層數(shù)據(jù)按照掃描帶分帶存儲的思想,為線和多邊形數(shù)據(jù)庫表構(gòu)建相應(yīng)的輔助表,空間數(shù)據(jù)實(shí)現(xiàn)分帶存儲,以借助這種輔助表加速空間信息提取運(yùn)算效率;復(fù)雜窗口空間信息提取時,將復(fù)雜的空間關(guān)系運(yùn)算轉(zhuǎn)化為同一條帶上的單元之間的相交或重疊判斷,大大簡化運(yùn)算的復(fù)雜程度,避免大量的弧段求交和弧段打斷重組等過程,提高運(yùn)算效率,杜絕運(yùn)算錯誤。本方法相對于傳統(tǒng)矢量圖元素空間關(guān)系運(yùn)算具有無可比擬的優(yōu)越性,主要體現(xiàn)在算法簡單、程序量少、處理效率高;而相對于傳統(tǒng)純柵格圖的元素空間關(guān)系運(yùn)算方法而言,又具有運(yùn)算量小、運(yùn)算速度快、精度高的優(yōu)點(diǎn)。
文檔編號G06F17/30GK102236721SQ20111021957
公開日2011年11月9日 申請日期2011年8月2日 優(yōu)先權(quán)日2011年8月2日
發(fā)明者王結(jié)臣, 蒲英霞, 謝順平, 陳剛, 馬勁松 申請人:南京大學(xué)