本發(fā)明屬于電力線路設(shè)計的技術(shù)領(lǐng)域,具體地涉及一種傾斜測量場景中地物的提取方法。
背景技術(shù):
傾斜攝影三維建模技術(shù)及應(yīng)用是近年來測繪領(lǐng)域關(guān)注的熱點,由于其數(shù)據(jù)精度高、地表覆蓋全面等突出優(yōu)點廣泛應(yīng)用于智慧城市、智慧水利、智慧旅游等各方面。
電力線路設(shè)計中要求獲取線路走廊范圍內(nèi)的房屋、樹木、道路等交叉跨越地物信息,測量這些地物到電力線、桿塔等的距離,根據(jù)量測結(jié)果合理選擇桿塔位置、桿塔型號、架線參數(shù)等,以保證滿足電力線路設(shè)計規(guī)范的校核要求。然而傾斜測量的原始數(shù)據(jù)一般采用自動化方式生成三維場景成果,由于其生成機理,得到的模型是一個連續(xù)的TIN(不規(guī)則三角網(wǎng))加貼圖,即地物、地形等是作為一個整體提供的,并沒有根據(jù)地物劃分為可以單獨操作的對象,這種情況下是無法進行距離校核計算的。因此,在電力線路設(shè)計中使用傾斜測量場景時首先需要對場景中的房屋、樹木等電力線路關(guān)心的地物進行單體化處理。
目前市面上大部分傾斜測量場景三維應(yīng)用中的單體化只是在地物上疊加了配套的矢量面,表面上看起來是單體效果,實際上只是簡單地查詢了建筑輪廓點矢量面,而非真正意義上的單體分離。而簡單的單體化方法只是將場景中的三角面直接區(qū)分為地物或場景,但這樣的處理會導(dǎo)致地物邊界呈現(xiàn)鋸齒狀,且各精度等級的地物邊界不一致,這樣的邊界極其不美觀,并且當(dāng)需要將地物替換為人工制作的高精度模型時無法與地形場景實現(xiàn)無縫拼接。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是:克服現(xiàn)有技術(shù)的不足,提供一種傾斜測量場景中地物的提取方法,其能夠保證將房屋、樹木等地物真正與傾斜測量場景分離且地物邊緣整齊,可以獲取地物圖元信息,進行射線碰撞檢測、距離計算等操作,并且能夠附加地物類別、地物編號、地物名稱、選中狀態(tài)等屬性信息,使之滿足電力線路設(shè)計的使用要求。
本發(fā)明的技術(shù)解決方案是:這種傾斜測量場景中地物的提取方法,其包括以下步驟:
(1)開始;
(2)設(shè)定地物輪廓,用于定義要提取的地物邊界線;
(3)采用地物輪廓切割三角網(wǎng):采用地物輪廓切割場景中的三角形圖元,切割后每條輪廓線都有三角的邊與之重合,而不存在三角形的邊與輪廓線相交;
(4)采用地物輪廓分離出地物圖元;
(5)存取地物屬性;
(6)結(jié)束。
由于本發(fā)明采用實際分離原始傾斜測量場景圖元的方法進行單體化,實現(xiàn)了真正意義上的單體化,單體化后的地物作為獨立個體可以對其單獨操作,滿足了電力線路設(shè)計要求;本發(fā)明采用地物輪廓線切割三角形圖元的方式,將與輪廓線相交的三角形重新構(gòu)建為多個三角形的組合,再選取輪廓線內(nèi)的三角形作為地物數(shù)據(jù),不僅保證了地物輪廓的邊緣整齊美觀,而且方便替換為更高精度、更美觀的人工模型;本發(fā)明切割原有場景的所有精度等級圖元數(shù)據(jù),切割后的地物圖元數(shù)據(jù)以圖元組形式保留在原場景節(jié)點內(nèi),通過地物ID標(biāo)識,地物圖元組的精度等級及精度切換策略與單體化之前沒有變化,從而保證了較高的地物顯示精度與渲染速度,同時保證了在任意縮放狀態(tài)下地物邊界不變;由于本發(fā)明保留原始場景數(shù)據(jù),所以可以很方便地修改或刪除地物,只需對原始場景數(shù)據(jù)按照修改后的所有相關(guān)輪廓重新切割即可;由于本發(fā)明保存了所有地物輪廓數(shù)據(jù),當(dāng)需要更換更高精度的場景數(shù)據(jù)時,只需自動讀取所有輪廓數(shù)據(jù)重新切割即可,不必再次手工設(shè)定地物輪廓;因此能夠保證將房屋、樹木等地物真正與傾斜測量場景分離且地物邊緣整齊,可以獲取地物圖元信息,進行射線碰撞檢測、距離計算等操作,并且能夠附加地物類別、地物編號、地物名稱、選中狀態(tài)等屬性信息,使之滿足電力線路設(shè)計的使用要求。
附圖說明
圖1是根據(jù)本發(fā)明的傾斜測量場景中地物的提取方法的流程圖。
圖2是根據(jù)本發(fā)明的三角形被輪廓線切割(三角形內(nèi)無地物輪廓點)的示意圖。
圖3是根據(jù)本發(fā)明的三角形被輪廓線切割(三角形內(nèi)有部分地物輪廓點)的示意圖。
圖4是根據(jù)本發(fā)明的三角形被輪廓線切割(三角形內(nèi)有全部地物輪廓點)的示意圖。
具體實施方式
如圖1所示,這種傾斜測量場景中地物的提取方法,其包括以下步驟:
(1)開始;
(2)設(shè)定地物輪廓,用于定義要提取的地物邊界線;
(3)采用地物輪廓切割三角網(wǎng):采用地物輪廓切割場景中的三角形圖元,切割后每條輪廓線都有三角的邊與之重合,而不存在三角形的邊與輪廓線相交;
(4)采用地物輪廓分離出地物圖元;
(5)存取地物屬性;
(6)結(jié)束。
由于本發(fā)明采用實際分離原始傾斜測量場景圖元的方法進行單體化,實現(xiàn)了真正意義上的單體化,單體化后的地物作為獨立個體可以對其單獨操作,滿足了電力線路設(shè)計要求;本發(fā)明采用地物輪廓線切割三角形圖元的方式,將與輪廓線相交的三角形重新構(gòu)建為多個三角形的組合,再選取輪廓線內(nèi)的三角形作為地物數(shù)據(jù),不僅保證了地物輪廓的邊緣整齊美觀,而且方便替換為更高精度、更美觀的人工模型;本發(fā)明切割原有場景的所有精度等級圖元數(shù)據(jù),切割后的地物圖元數(shù)據(jù)以圖元組形式保留在原場景節(jié)點內(nèi),通過地物ID標(biāo)識,地物圖元組的精度等級及精度切換策略與單體化之前沒有變化,從而保證了較高的地物顯示精度與渲染速度,同時保證了在任意縮放狀態(tài)下地物邊界不變;由于本發(fā)明保留原始場景數(shù)據(jù),所以可以很方便地修改或刪除地物,只需對原始場景數(shù)據(jù)按照修改后的所有相關(guān)輪廓重新切割即可;由于本發(fā)明保存了所有地物輪廓數(shù)據(jù),當(dāng)需要更換更高精度的場景數(shù)據(jù)時,只需自動讀取所有輪廓數(shù)據(jù)重新切割即可,不必再次手工設(shè)定地物輪廓;因此能夠保證將房屋、樹木等地物真正與傾斜測量場景分離且地物邊緣整齊,可以獲取地物圖元信息,進行射線碰撞檢測、距離計算等操作,并且能夠附加地物類別、地物編號、地物名稱、選中狀態(tài)等屬性信息,使之滿足電力線路設(shè)計的使用要求。
另外,所述步驟(2)中,通過手工選取輪廓點來設(shè)定地物輪廓:通過在傾斜測量場景中逐個選取轉(zhuǎn)角點的方式來設(shè)定地物輪廓。
更進一步地,所述步驟(2)中,手工定義好的地物輪廓存入文件后,通過從文件加載來設(shè)定地物輪廓。
另外,所述步驟(3)包括以下分步驟:
(3.1)計算地物輪廓線與三角形的重疊折線段,考慮輪廓點在三角形內(nèi)以及輪廓線與三角形邊相交的情況;
(3.2)采用重疊折線段對原三角形進行三角剖分,剖分后一個三角形變?yōu)槎鄠€三角形的集合。
另外,所述步驟(4)包括以下分步驟:
(4.1)計算三角形水平中心點;
(4.2)采用射線法判定三角形水平中心點是否在地物輪廓內(nèi),若中心點在輪廓內(nèi),則三角形也在輪廓內(nèi);
(4.3)將處于地物輪廓內(nèi)的三角形從原圖元組分離出來。
另外,所述步驟(5)之后還包括:地物操作,對單體化的地物進行各種計算。
更進一步地,所述地物操作包括:
獲取指定傾斜測量地物的圖元信息,用于保存為模型文件的操作;
射線與傾斜測量地物之間進行碰撞檢測,將射線與當(dāng)前顯示節(jié)點逐個進行相交計算,以碰撞距離最近者作為命中目標(biāo);
其他地物圖元集與指定傾斜測量地物圖元集距離計算,采用指定精度的地物圖元組,線路設(shè)計中采用最高精度;
給傾斜測量地物附加屬性信息。
更進一步地,所述屬性信息包括:地物類別、地物ID、地物名稱、是否顯示、顯示顏色。
下面結(jié)合實施例對本發(fā)明進行詳細(xì)的描述。
原始傾斜測量場景采用樹狀存儲結(jié)構(gòu)數(shù)據(jù)。整個場景為根節(jié)點,由多個場景塊子節(jié)點構(gòu)成。每個子節(jié)點除了擁有自身的三角面圖元集,還包含若干個更高精度等級場景塊子節(jié)點。如此逐層細(xì)分下去,直到最高等級子節(jié)點。場景節(jié)點精度等級越高,其細(xì)節(jié)越豐富,而面積范圍越小。渲染場景時根據(jù)節(jié)點到攝像機(代表三維場景中的觀察者)的距離決定是渲染當(dāng)前節(jié)點圖元集還是渲染子節(jié)點。
本發(fā)明提供的傾斜測量場景地物提取方法,針對以上樹狀存儲結(jié)構(gòu)的傾斜測量場景數(shù)據(jù)進行地物切割分離操作,參見圖1,包括以下步驟:
1)設(shè)定地物輪廓
地物輪廓是地物邊界線的水平面投影??刹捎脙煞N方式設(shè)定地物輪廓,一是手工選取輪廓點,二是從文件加載。
1、手工定義地物輪廓
初次提取地物時可通過在三維場景中逐個選取轉(zhuǎn)角點定義地物輪廓。所有輪廓點構(gòu)成的多邊形應(yīng)為簡單多邊形,即多邊形的任意兩條線段之間不存在相交情況。輪廓點的順序統(tǒng)一為逆時針方向。
一般情況下,定義的輪廓多邊形應(yīng)包圍地物水平投影的所有點且盡量小,以保證獲取完整且邊界正確的地物,但在電力線路設(shè)計中為減小地物與電線之間距離的計算量,提高校核速度,也可以僅選取地物中距離線路較近的一部分,這是符合電力線路設(shè)計實際情況的。
2、使用已有輪廓數(shù)據(jù)
手工定義的輪廓數(shù)據(jù)可以保存到文件中,需要再次使用時從文件加載并直接作用于傾斜測量場景。特別適用于將原有場景數(shù)據(jù)更換為更高精度場景數(shù)據(jù)的情況,省去了重新逐個手工定義地物輪廓的繁瑣操作。文件中的輪廓數(shù)據(jù)保存了地物ID,創(chuàng)建時間等信息,重新選取地物時應(yīng)以上次創(chuàng)建時相同的順序進行。
2)切割三角形
切割三角形需要將地物輪廓線與場景中的所有三角形逐個進行相交判斷。
1、計算輪廓線與三角形相交折線
對于每一個三角形,首先定義一個二維頂點數(shù)組對象,用于存儲輪廓線與三角形相交的若干折線段,第一維表示折線段,第二維表示每個折線段的頂點。具體執(zhí)行步驟如下:
(1)創(chuàng)建一個頂點數(shù)組,該數(shù)組表示輪廓線與三角形相交的一個折線段。將其初始化為空。
(2)判斷起始輪廓點是否在三角形內(nèi),若是則加入頂點數(shù)組。
(3)判斷是否取遍所有輪廓點(即上次取的是起始點,這樣才能涵蓋所有子線段),是則將當(dāng)前頂點數(shù)組添加到二維數(shù)組(如果不為空的話),跳轉(zhuǎn)到第(8)步;否則進行下一步。
(4)取下一個輪廓點作為當(dāng)前點。
(5)判斷當(dāng)前點與上一個點之間的線段是否與三角形的邊相交。若相交,將交點加入頂點數(shù)組。
(6)判斷當(dāng)前點是否在三角形內(nèi),是則加入頂點數(shù)組,返回第(3)步;否則進行下一步。
(7)判斷頂點數(shù)組是否為空,若不為空,將頂點數(shù)組添加到二維數(shù)組,然后將其清空。返回第(3)步。
(8)若起始輪廓點在三角形內(nèi),則將最后一個頂點數(shù)組與第一個頂點數(shù)組合并為一個折線段(注意:起始點會在這兩個頂點數(shù)組中各出現(xiàn)一次,應(yīng)只保留一個)。
根據(jù)三角形中包含輪廓點的個數(shù),可將三角形與輪廓線相交分為3種情況,即沒有輪廓點在三角形中,有部分輪廓點在三角形中,全部輪廓點都在三角形中,參見圖2、3、4左側(cè)圖形。
2、三角剖分
將原三角形的3個頂點與上一步獲取的若干折線段的頂點構(gòu)造為三角網(wǎng)。構(gòu)造三角網(wǎng)可采用比較流行的德洛奈三角剖分法(Delaunaytriangulation)。需要注意的是,要保證各個折線段作為三角形的邊出現(xiàn)在新構(gòu)造的三角網(wǎng)中,這些折線段可以被分割為若干段,但不允許缺失。三角剖分結(jié)果,參見圖2、3、4右側(cè)圖形。
三角形剖分完成后,將原三角形從場景三角網(wǎng)中刪除,加入三角剖分生成的所有新三角形。
以上僅為處理一個三角形的情況,需要依次處理當(dāng)前場景分塊的其他所有三角形。再依次擴大到當(dāng)前精度等級的其他場景分塊,其他精度等級的傾斜測量場景數(shù)據(jù)。
切割時可采用輪廓包圍框與場景分塊包圍框不相交作為快速剔除手段,而不必每個三角形都詳細(xì)計算。
切割后每個三角網(wǎng)圖元組中的三角形邊與輪廓線相重疊,或者與輪廓線相接觸,或者與輪廓線相分離,而絕不會出現(xiàn)與輪廓線相交叉的情況。
3)分離地物
將當(dāng)前地物輪廓內(nèi)的所有三角面提取出來,存儲為單獨的地物圖元分組,并采用地物的ID加以標(biāo)識。地物分離操作僅用于第2)步中進行過三角剖分的節(jié)點,沒有進行過三角剖分的節(jié)點可直接忽略。在原場景節(jié)點中,首先新建一個單獨的圖元分組,與原場景圖元分組并列。此圖元分組即為地物在當(dāng)前場景節(jié)點中的圖元分組。
對于場景圖元分組中的每個三角形,執(zhí)行如下操作。
1、計算三角形水平中心點
將三角形三個頂點的平面坐標(biāo)(XY)分別相加再除以3,即可得三角形中心點坐標(biāo)為
((x1+x2+x3)/3,(y1+y2+y3)/3)
2、判定三角形是否在地物輪廓內(nèi)
判斷上述三角形二維中心點是否在地物輪廓內(nèi)的基本算法為:構(gòu)造一條原點為三角形中心點,且方向為(1,0)的射線。計算射線與地物輪廓多邊形相交的情況,每當(dāng)射線與多邊形的一條邊相交時,就進行一次從內(nèi)到外地轉(zhuǎn)換或者相反的轉(zhuǎn)換。記錄跟蹤穿過多邊形次數(shù)的奇偶性,穿過奇數(shù)次說明三角形中心點位于多邊形內(nèi),偶數(shù)次說明位于多邊形外。實際計算中還需要考慮多邊形的邊與射線重疊的情況。根據(jù)前述切割結(jié)果,不存在與輪廓線交叉點三角形,因此若三角形中心點在輪廓線內(nèi),則三角形在地物輪廓內(nèi)。
3、分離地物圖元
如果當(dāng)前三角形在輪廓多邊形內(nèi),則將其從場景圖元組中移除,并加入到當(dāng)前地物圖元分組中。如果不在輪廓多邊形內(nèi),則忽略。
依次處理當(dāng)前場景節(jié)點的所有其他三角形。處理完成后原先的一個場景節(jié)點中分為一個場景分組和多個地物分組(分別屬于多個地物)。地物圖元分組用地物ID標(biāo)記,并可以可通過地物ID進行圖元提取或設(shè)置顏色等操作。
依次處理當(dāng)前等級的其他場景節(jié)點。同一個地物可能由多個場景節(jié)點中的多個地物分組組成。需要提取數(shù)據(jù)時應(yīng)該獲取所有這些數(shù)據(jù)的組合。
依次處理其他等級的傾斜測量場景數(shù)據(jù)。地物分離后的節(jié)點圖元數(shù)據(jù)可以保存為新格式的節(jié)點文件,以后直接加載處理后的新格式的節(jié)點文件即可,而不用每次都重新根據(jù)地物輪廓切割分離原始節(jié)點數(shù)據(jù),從而提高了處理速度。
上述2)3)步驟操作場景節(jié)點采用的策略是先對所有節(jié)點(采取深度優(yōu)先或廣度優(yōu)先的搜索策略)執(zhí)行操作步驟2),再對所有節(jié)點執(zhí)行操作步驟3)。這種方式需要遍歷兩次樹結(jié)構(gòu),且第一次操作的中間結(jié)果需要保留在內(nèi)存中或者暫存到文件中供步驟3)使用,執(zhí)行效率較低。實際操作中可以采用另一種處理方式,即只遍歷一次樹結(jié)構(gòu),對于每個場景節(jié)點,先執(zhí)行步驟2),緊接著執(zhí)行步驟3),這樣可以省去暫存大量中間結(jié)果的開銷,提高了執(zhí)行效率。
4)地物操作
地物操作主要包括獲取地物圖元數(shù)據(jù)、距離計算、射線碰撞檢測等地物模型相關(guān)操作,以及地物屬性信息的添加與檢索操作。
1、獲取圖元信息
某些情況下需要使用地物的圖元信息,如將地物模型導(dǎo)出為指定格式的文件供別的程序使用等。從三維場景中獲取地物圖元信息需要指定地物ID以及模型的精度等級。從根節(jié)點開始逐級查詢,直到到達指定等級的節(jié)點。若節(jié)點圖元數(shù)據(jù)未加載,則從相應(yīng)的節(jié)點文件加載。根據(jù)ID獲取指定的圖元組,打包為需要的格式,返回到父節(jié)點。父節(jié)點將各個子節(jié)點返回的同一個地物的不同圖元組合并為一個圖元組,返回給自己的父節(jié)點。如此逐級向上,最終到達根節(jié)點,在根節(jié)點再次組合為一個整體圖元組返回給調(diào)用者。對于經(jīng)常使用的地物圖元等級,可以將其保存到單獨的文件中,需要時直接從文件讀取,而不必遍歷整個場景。
2、射線碰撞檢測
三維線路設(shè)計中經(jīng)常需要用鼠標(biāo)選中地物以執(zhí)行其他操作。首先將三維圖形窗口中的鼠標(biāo)點擊位置轉(zhuǎn)換為三維空間中的射線,再計算射線與每個地物的交點,碰撞距離(射線起始點到射線與地物碰撞點之間的距離)最短的地物即為被選中的地物。
(1)向場景根節(jié)點傳入各個參數(shù),包括輸入?yún)?shù)射線,輸出參數(shù)地物ID、碰撞距離(初始化為無窮大)、碰撞點。
(2)根節(jié)點遍歷各個子節(jié)點,對每個節(jié)點執(zhí)行碰撞檢測操作。
(3)對于當(dāng)前節(jié)點,首先判斷是否可見,不可見則忽略;可見則進行下一步。
(4)采用節(jié)點包圍球與射線進行碰撞檢測,如果碰撞失敗,或碰撞距離大于當(dāng)前輸出碰撞距離,則忽略當(dāng)前節(jié)點。采用包圍球檢測可以快速剔除一些節(jié)點。碰撞成功則進行下一步。
(5)判斷當(dāng)前節(jié)點是否為可渲染節(jié)點(已加載圖元組),若是,依次執(zhí)行射線與當(dāng)前節(jié)點每個圖元之間的碰撞檢測。對于每一個圖元,若當(dāng)前碰撞距離小于輸出碰撞距離,則輸出碰撞距離更新為當(dāng)前碰撞距離,輸出碰撞地物ID更新為當(dāng)前地物ID,輸出碰撞點更新為當(dāng)前碰撞點。執(zhí)行完畢后返回父節(jié)點;若當(dāng)前節(jié)點為不可渲染節(jié)點,遍歷當(dāng)前節(jié)點的所有子節(jié)點,遞歸執(zhí)行(3)~(5)。
(6)所有節(jié)點遍歷完成后,最終返回參數(shù)即為被點中的地物ID以及碰撞點、碰撞距離;若返回地物ID為空,則表示未選中任何地物。
3、距離計算
電力線路設(shè)計中導(dǎo)入地物的主要目的是計算電力線等帶電體與地物之間的距離,并與設(shè)計規(guī)范中的安全距離作比較以判別當(dāng)前設(shè)計是否合理。由于電氣校核要求精度高,因此應(yīng)該采用地物的最高精度圖元計算。本發(fā)明采用如下步驟計算電線(或其他物體)與地物的距離。
(1)向場景根節(jié)點傳入各個參數(shù),包括輸入?yún)?shù)電力線圖元集、地物ID,輸出參數(shù)電力線到地物距離(初始化為無窮大)、電力線上的最小距離點、地物上的最小距離點。
(2)根節(jié)點遍歷各個子節(jié)點,對每個節(jié)點執(zhí)行距離計算操作。
(3)對于當(dāng)前子節(jié)點,首先檢測是否包含指定地物ID的圖元組,若不包含,則忽略當(dāng)前節(jié)點,返回到父節(jié)點;若包含,執(zhí)行下一步。
(4)計算輸入圖元集包圍球與當(dāng)前節(jié)點包圍球距離,若大于輸出距離,則忽略當(dāng)前節(jié)點,返回到父節(jié)點。采用包圍球距離可快速剔除一些節(jié)點,提高運算速度。若包圍球距離小于輸出距離,則執(zhí)行下一步。
(5)遍歷當(dāng)前節(jié)點子節(jié)點,執(zhí)行第(3)(4)步操作,直到到達最高精度子節(jié)點。
(6)若最高精度子節(jié)點不可渲染,則從文件加載圖元;否則,執(zhí)行下一步
(7)計算當(dāng)前節(jié)點指定ID圖元組每個三角形圖元與輸入圖元集每個圖元的距離。若此距離小于輸出距離,則更新當(dāng)前距離,以及兩個最小距離點。返回結(jié)果到父節(jié)點。
(8)所有節(jié)點遍歷完成后,最終由根節(jié)點返回的參數(shù)即為被點中的地物以及碰撞點、碰撞距離。
4、附加屬性信息
對于每個地物創(chuàng)建一個屬性數(shù)據(jù)結(jié)構(gòu),采用地物ID標(biāo)識。共有屬性包含地物類別、地物名稱、地物顏色、是否顯示等,每種地物的私有屬性房屋高度、所有者、樹木高度等。地物屬性可與地物輪廓合并保存到數(shù)據(jù)文件中,以便下次讀取。
以上所述,僅是本發(fā)明的較佳實施例,并非對本發(fā)明作任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬本發(fā)明技術(shù)方案的保護范圍。