專利名稱:電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔⑸煞椒把b置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子地圖技術(shù)領(lǐng)域,特別是一種電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔⑸?成方法及裝置,生成的電子地圖的道路拓?fù)湫畔⒅邪c、線段和面之間的相互關(guān)系。
背景技術(shù):
在現(xiàn)有的電子地圖技術(shù)領(lǐng)域中,道路網(wǎng)絡(luò)的拓?fù)湫畔⑹呛诵臄?shù)據(jù),其在電子導(dǎo)航、 路線規(guī)劃和實時導(dǎo)航等提供了數(shù)據(jù)基礎(chǔ)。隨著道路網(wǎng)絡(luò)的日益復(fù)雜,獲取道路網(wǎng)絡(luò)的拓?fù)湫畔⒌挠嬎懔吭絹碓酱?,因此,現(xiàn) 有的電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔H包括了點和線段,以及二者之間的聯(lián)系,而沒有 涉及到面。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔⑸煞椒把b置,使 得生成的道路網(wǎng)絡(luò)的拓?fù)湫畔⒉坏c的信息和線段的信息,還包括面的信息,擴大了 道路網(wǎng)絡(luò)的拓?fù)湫畔⒌氖褂梅秶?。為了實現(xiàn)上述目的,本發(fā)明實施例提供了一種電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔?生成方法,包括根據(jù)線段和端點之間的關(guān)系,建立每一個事件點的關(guān)聯(lián)線段集合,每一個事件點 的關(guān)聯(lián)線段集合包括第一線段集合中所有以該事件點作為終點的線段,所述第一線段集合 為源電子地圖中所有線段的集合;將所述源電子地圖中所有線段的端點組成的第一事件點集合中的每一個事件點 作為當(dāng)前事件點,并將每一個所述當(dāng)前事件點的關(guān)聯(lián)線段集合中的每一條關(guān)聯(lián)線段作為當(dāng) 前線段,對所述當(dāng)前線段執(zhí)行如下步驟判斷所述當(dāng)前線段的兩個端點對應(yīng)的頂點的創(chuàng)建情況,得到一判斷結(jié)果;所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都沒有創(chuàng)建時,在所述當(dāng) 前線段所在的面中,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和兩個頂點,并將一個半邊作為面的孔加 入描述面的面結(jié)構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié) 構(gòu);所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都已經(jīng)創(chuàng)建時,根據(jù)所述 當(dāng)前線段創(chuàng)建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu);所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點已經(jīng)創(chuàng)建一個時,根據(jù)所 述當(dāng)前線段創(chuàng)建半邊和一個頂點,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂 點的頂點結(jié)構(gòu)。上述的拓?fù)湫畔⑸煞椒?,其中,所述第一事件點集合中的所有事件點按序排列。上述的拓?fù)湫畔⑸煞椒ǎ渲?,所述在所述?dāng)前線段所在的面中,根據(jù)所述當(dāng)前 線段創(chuàng)建半邊和兩個頂點,并將一個半邊作為面的孔加入描述面的面結(jié)構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu)具體包括步驟Al,為所述當(dāng)前線段的起點和終點對應(yīng)創(chuàng)建兩個新的頂點;步驟A2,為所述當(dāng)前線段創(chuàng)建互為對稱兄弟半邊和接續(xù)半邊的兩個新的半邊;步驟A3,獲取所述當(dāng)前線段所屬的面;步驟A4,將步驟A2中創(chuàng)建的兩個新的半邊中的一個作為孔邊界加入到描述步驟 A3中獲取的面的面結(jié)構(gòu)中;步驟A5,建立步驟A2中創(chuàng)建的兩個新的半邊以及步驟Al中創(chuàng)建的兩個新的頂點 的結(jié)構(gòu)。上述的拓?fù)湫畔⑸煞椒?,其中,所述根?jù)所述當(dāng)前線段創(chuàng)建半邊和一個頂點,并 建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu)具體包括步驟Bi,為所述當(dāng)前線段創(chuàng)建互為對稱兄弟半邊的第一半邊和第二半邊,并將所 述第二半邊作為所述第一半邊的接續(xù)半邊;步驟B2,為所述當(dāng)前線段創(chuàng)建新頂點,所述第一半邊指向所述新頂點,且所述第二 半邊指向所述當(dāng)前線段的已創(chuàng)建頂點;步驟B3,將掛接于所述當(dāng)前線段的已創(chuàng)建頂點的第三半邊的半邊結(jié)構(gòu)中的接續(xù)半 邊修改為所述第一半邊,且所述第二半邊的接續(xù)半邊為掛接于所述當(dāng)前線段的已創(chuàng)建的頂 點的第四半邊,相對于所述當(dāng)前線段的已創(chuàng)建頂點,所述第三半邊、第一半邊和第四半邊呈 順時鐘方向,且所述第三半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第四半邊;步驟B4,建立所述第一半邊、第二半邊、新頂點的結(jié)構(gòu)。上述的拓?fù)湫畔⑸煞椒?,其中,所述根?jù)所述當(dāng)前線段創(chuàng)建半邊,同時建立描述 新創(chuàng)建的半邊的半邊結(jié)構(gòu)具體包括步驟Cl,對所述當(dāng)前線段的已創(chuàng)建的第一頂點和第二頂點,創(chuàng)建一個指向所述第 二頂點的第一新半邊,并創(chuàng)建指向所述第二頂點,且與第一新半邊為對稱兄弟半邊的第二 新半邊;步驟C2,將掛接于所述第一頂點的第四半邊的半邊結(jié)構(gòu)中的接續(xù)半邊修改為所述 第一新半邊,且所述第一新半邊的接續(xù)半邊為掛接于所述第二頂點的第五半邊,所述第二 新半邊的接續(xù)半邊為掛接于所述第一頂點的第六半邊,掛接于所述第二頂點的第七半邊的 半邊結(jié)構(gòu)中的接續(xù)半邊修改為所述第二新半邊,相對于所述第一頂點,所述第四半邊、第一 新半邊和第六半邊呈順時鐘方向,且所述第四半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第六 半邊;相對于所述第二頂點,所述第七半邊、第一新半邊和第五半邊呈順時鐘方向,且所述 第七半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第五半邊;步驟C3,判斷所述第四半邊和第七半邊原來是否在同一個連通邊界,如果是,進入 步驟C5,否則進入步驟C4;步驟C4,刪除第四半邊和第七半邊中作為孔邊界的一個半邊,并將第一新半邊和 第二新半邊所在的面設(shè)置為所述第四半邊的半邊結(jié)構(gòu)中的面,結(jié)束處理;步驟C5,判斷第四半邊和第七半邊原來所在的連通邊界是否為面的連通邊界,如 果是進入步驟C6,否則進入步驟C7 ;步驟C6,創(chuàng)建一個第一新面,將第四半邊 原來所屬的面的面結(jié)構(gòu)中的面連通邊界 設(shè)置為所述第一新半邊,而將第一新面的面結(jié)構(gòu)中的面連通邊界設(shè)置為所述第二新半邊,并將與所述第二新半邊處于同一連通邊界所有其它半邊的半邊結(jié)構(gòu)中的面設(shè)置為第一新面,并刪除所述第四半邊原來所屬的面的面結(jié)構(gòu)中處于所述第一新面中的孔連通分量,將 刪除的孔連通分量作為第一新面的孔連通分量添加到第一新面的面結(jié)構(gòu)中,且第一新半邊 的半邊結(jié)構(gòu)中的面為所述第四半邊原來所屬的面,第二新半邊的半邊結(jié)構(gòu)中的面為所述第
一新面; 步驟C7,創(chuàng)建一個第二新面,將所述第一新半邊和第二新半邊中,所在的連通分量 構(gòu)成的面的有向面積大于0的半邊作為所述第二新面的面結(jié)構(gòu)中的面連通分量,并將所述 第四半邊原來所屬的面的面結(jié)構(gòu)中第四半邊和第七半邊所在的孔連通邊界修改為所述第 一新半邊和第二新半邊中的另一個,將與第二新半邊處于同一連通邊界所有其它半邊的半 邊結(jié)構(gòu)中的面設(shè)置為第二新面,刪除第四半邊原來所屬的面的面結(jié)構(gòu)中處于第二新面中的 孔連通分量,將刪除的孔連通分量作為第二新面的孔連通分量添加到面結(jié)構(gòu)中,且第一新 半邊和第二新半邊的半邊結(jié)構(gòu)中的面分別為第四半邊原來所屬的面和第二新面。為了實現(xiàn)上述目的,本發(fā)明實施例還提供了一種電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫?息生成裝置,包括關(guān)聯(lián)線段集合建立模塊,用于根據(jù)線段和端點之間的關(guān)系,建立每一個事件點的 關(guān)聯(lián)線段集合,每一個事件點的關(guān)聯(lián)線段集合包括第一線段集合中所有以該事件點作為終 點的線段,所述第一線段集合為源電子地圖中所有線段的集合;判斷模塊,用于判斷當(dāng)前事件點的當(dāng)前線段的兩個端點對應(yīng)的頂點的創(chuàng)建情況, 得到一判斷結(jié)果;所述當(dāng)前事件點為所述源電子地圖中所有線段的端點組成的第一事件點 集合中的任意一個事件點,所述當(dāng)前線段為所述當(dāng)前事件點的關(guān)聯(lián)線段集合中的任意一條 關(guān)聯(lián)線段;第一創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都 沒有創(chuàng)建時,在所述當(dāng)前線段所在的面中,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和兩個頂點,并將一 個半邊作為面的孔加入描述面的面結(jié)構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新 創(chuàng)建的頂點的頂點結(jié)構(gòu);第二創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都 已經(jīng)創(chuàng)建時,根據(jù)所述當(dāng)前線段創(chuàng)建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu);第三創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點已 經(jīng)創(chuàng)建一個時,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和一個頂點,并建立描述新創(chuàng)建的半邊的半邊 結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu)。上述的拓?fù)湫畔⑸裳b置,其中,所述第一事件點集合中的所有事件點按序排列。上述的拓?fù)湫畔⑸裳b置,其中,所述第一創(chuàng)建模塊具體包括第一單元,用于為所述當(dāng)前線段的起點和終點對應(yīng)創(chuàng)建兩個新的頂點;第二單元,用于為所述當(dāng)前線段創(chuàng)建互為對稱兄弟半邊和接續(xù)半邊的兩個新的半 邊;第三單元,用于獲取所述當(dāng)前線段所屬的面;第四單元,用于將所述第二單元創(chuàng)建的兩個新的半邊中的一個作為孔邊界加入到 描述所述第三單元獲取的面的面結(jié)構(gòu)中;第五單元,用于建立所述第二單元創(chuàng)建的兩個新的半邊以及所述第一單元創(chuàng)建的兩個新的頂點的結(jié)構(gòu)。
上述的拓?fù)湫畔⑸裳b置,其中,所述第二創(chuàng)建模塊具體包括第六單元,用于為所述當(dāng)前線段創(chuàng)建互為對稱兄弟半邊的第一半邊和第二半邊, 并將所述第二半邊作為所述第一半邊的接續(xù)半邊;第七單元,用于為所述當(dāng)前線段創(chuàng)建新頂點,所述第一半邊指向所述新頂點,且所 述第二半邊指向所述當(dāng)前線段的已創(chuàng)建頂點;第八單元,用于將掛接于所述當(dāng)前線段的已創(chuàng)建頂點的第三半邊的半邊結(jié)構(gòu)中的 接續(xù)半邊修改為所述第一半邊,且所述第二半邊的接續(xù)半邊為掛接于所述當(dāng)前線段的已創(chuàng) 建的頂點的第四半邊,相對于所述當(dāng)前線段的已創(chuàng)建頂點,所述第三半邊、第一半邊和第四 半邊呈順時鐘方向,且所述第三半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第四半邊;第九單元,用于建立所述第一半邊、第二半邊、新頂點的結(jié)構(gòu)。上述的拓?fù)湫畔⑸裳b置,其中,所述第三創(chuàng)建模塊具體包括第十單元,用于對所述當(dāng)前線段的已創(chuàng)建的第一頂點和第二頂點,創(chuàng)建一個指向 所述第二頂點的第一新半邊,并創(chuàng)建指向所述第二頂點,且與第一新半邊為對稱兄弟半邊 的第二新半邊;第十一單元,用于將掛接于所述第一頂點的第四半邊的半邊結(jié)構(gòu)中的接續(xù)半邊修 改為所述第一新半邊,且所述第一新半邊的接續(xù)半邊為掛接于所述第二頂點的第五半邊, 所述第二新半邊的接續(xù)半邊為掛接于所述第一頂點的第六半邊,掛接于所述第二頂點的第 七半邊的半邊結(jié)構(gòu)中的接續(xù)半邊修改為所述第二新半邊,相對于所述第一頂點,所述第四 半邊、第一新半邊和第六半邊呈順時鐘方向,且所述第四半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊 為所述第六半邊;相對于所述第二頂點,所述第七半邊、第一新半邊和第五半邊呈順時鐘方 向,且所述第七半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第五半邊;第十二單元,用于判斷所述第四半邊和第七半邊原來是否在同一個連通邊界;第十三單元,用于在第十二單元判斷出所述第四半邊和第七半邊原來不在同一個 連通邊界時,刪除第四半邊和第七半邊中作為孔邊界的一個半邊,并將第一新半邊和第二 新半邊所在的面設(shè)置為所述第四半邊的半邊結(jié)構(gòu)中的面,結(jié)束處理;第十四單元,用于在第十二單元判斷出所述第四半邊和第七半邊原來不在同一個 連通邊界時,判斷第四半邊和第七半邊原來所在的連通邊界是否為面的連通邊界;第十五單元,用于在第十四單元判斷出第四半邊和第七半邊原來所在的連通邊 界為面的連通邊界時,創(chuàng)建一個第一新面,將第四半邊原來所屬的面的面結(jié)構(gòu)中的面連通 邊界設(shè)置為所述第一新半邊,而將第一新面的面結(jié)構(gòu)中的面連通邊界設(shè)置為所述第二新半 邊,并將與所述第二新半邊處于同一連通邊界所有其它半邊的半邊結(jié)構(gòu)中的面設(shè)置為第一 新面,并刪除所述第四半邊原來所屬的面的面結(jié)構(gòu)中處于所述第一新面中的孔連通分量, 將刪除的孔連通分量作為第一新面的孔連通分量添加到第一新面的面結(jié)構(gòu)中,且第一新半 邊的半邊結(jié)構(gòu)中的面為所述第四半邊原來所屬的面,第二新半邊的半邊結(jié)構(gòu)中的面為所述 第一新面;第十六單元,用于在第十四單元判斷出第四半邊和第七半邊原來所在的連通邊界 不是面的連通邊界時,創(chuàng)建一個第二新面,將所述第一新半邊和第二新半邊中,所在的連通 分量構(gòu)成的面的有向面積大于0的半邊作為所述第二新面的面結(jié)構(gòu)中的面連通分量,并將所述第四半邊原來所屬的面的面結(jié)構(gòu)中第四半邊和第七半邊所在的孔連通邊界修改為所 述第一新半邊和第二新半邊中的另一個,將與第二新半邊處于同一連通邊界所有其它半邊 的半邊結(jié)構(gòu)中的面設(shè)置為第二新面,刪除第四半邊原來所屬的面的面結(jié)構(gòu)中處于第二新面 中的孔連通分量,將刪除的孔連通分量作為第二新面的孔連通分量添加到面結(jié)構(gòu)中,且第 一新半邊和第二新半邊的半邊結(jié)構(gòu)中的面分別為第四半邊原來所屬的面和第二新面。本發(fā)明實施例具有以下的有益效果 本發(fā)明實施例的電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔⑸煞椒把b置中,在所述判 斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都沒有創(chuàng)建時,在所述當(dāng)前線段所在的面 中,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和兩個頂點,并將一個半邊作為面的孔加入描述面的面結(jié) 構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu);在所述判斷 結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點已經(jīng)創(chuàng)建一個時,根據(jù)所述當(dāng)前線段創(chuàng)建半 邊和一個頂點,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu),在 所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都已經(jīng)創(chuàng)建時,根據(jù)所述當(dāng)前線段 創(chuàng)建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu),通過這樣的過程,電子地圖中的道路網(wǎng) 絡(luò)的拓?fù)湫畔⒉粌H包括了點和線段,還包括面,以及三者之間的聯(lián)系,為電子地圖的擴展應(yīng) 用提供了支持。
圖1為用于說明本發(fā)明實施例涉及到的概念的示意圖;圖2為本發(fā)明實施例的方法的總的流程示意圖;圖3為本發(fā)明實施例的步驟207的詳細(xì)流程示意圖;圖4為本發(fā)明實施例的方法中兩個頂點都沒有創(chuàng)建的一種情況的示意圖;圖5為本發(fā)明實施例的步驟208的詳細(xì)流程示意圖;圖6為本發(fā)明實施例的方法中創(chuàng)建了一個頂點的一種情況的示意圖;圖7為本發(fā)明實施例的步驟209的詳細(xì)流程示意圖;圖8為本發(fā)明實施例的方法中兩個頂點都已創(chuàng)建的一種情況的示意圖;圖9為本發(fā)明實施例的裝置的結(jié)構(gòu)示意圖。
具體實施例方式在對本發(fā)明實施例進行詳細(xì)說明之前,先對本發(fā)明實施例涉及到的一些概念進行 說明,以便于更好的理解本發(fā)明。線段,用于在電子地圖上表示道路網(wǎng)絡(luò)中的道路;事件點,以坐標(biāo)(X,y)描述,為電子地圖上表示道路的線段的端點;事件點的大小,根據(jù)事件點坐標(biāo)來確定,如可以通過如下規(guī)則來限定事件點的大 小假定事件點1和事件點2的坐標(biāo)分別為(xl,yl)和(x2, y2),如果xl小于x2,則 表示事件點1小于事件點2,如果xl等于x2,而yl小于y2,也表示事件點1小于事件點2。當(dāng)然,也可以采用其他的方式來限定事件點的大小,如采用上述方式相反的方式 來定義。
線段和事件點的關(guān)聯(lián),如果事件點位于線段上(作為線段的端點),則表示線段和事件點之間相互關(guān)聯(lián)。事件點的關(guān)聯(lián)線段集,與事件點相關(guān)聯(lián)的所有線段的集合。下面以圖1為例對本發(fā)明實施例涉及到的其他概念進行說明。如圖1所示,該電子地圖中包括外圍的形成四邊形的4條道路,分別為道路A1、B1、 Cl和D1,以及內(nèi)部的形成四邊形的4條道路,分別為道路A2、B2、C2和D2,其中,在本發(fā)明 的具體實施例中,每條道路(線段)都由方向相反的兩個半邊組成,兩個半邊互為對稱兄弟 半邊,如對于道路Al,其由半邊Al和半邊Al的對稱兄弟半邊組成,而對于任意一個用于描 述半邊的半邊結(jié)構(gòu)Hedge包括如下信息半邊所在的面;半邊的對稱兄弟半邊;半邊所指向的頂點(圖1中沒有示出,也就是半邊所屬道路的其中一個端點,如對 于圖1而言,半邊Al所指向的頂點為道路Al的左端點);與半邊共面的下一個接續(xù)半邊(如圖1中,半邊Al共面的下一個接續(xù)半邊為半邊 Bi)。頂點,對應(yīng)于線段的端點,也就是事件點,用于描述頂點的頂點結(jié)構(gòu)Vertex包括 指向該頂點的所有半邊中的一個,如圖1中道路Al的左端點所在的頂點的頂點結(jié)構(gòu)中包括 半邊Al。一系列的首尾相連的半邊組成一個連通邊界,如圖1中由半邊Al、Bi、Cl和Dl即 組成一個連通邊界,而半邊 symmetry (Al)、symmetry (Bi)、symmetry (Cl)禾口 symmetry (Dl) 也組成一個連通邊界。面,由一個連通邊界來限定,如圖1中半邊A1、B1、C1和Dl組成的連通邊界所限定 的面X,以及半邊A2、B2、C2和D2組成的連通邊界所限定的面Y ;孔,是一個相對概念,孔至少屬于一個面,其可能是兩種情況位于面內(nèi)部的線段;或在物理位置上被一個面所包圍的另一個面,即半邊A2、B2、C2和D2組成的連通邊 界所限定的面Y相對于面X而言,為一個孔。以圖1所示的情況而 目,半邊 symmetry (A2)、symmetry (B2)、symmetry (C2)禾口 symmetry (D2)組成的連通邊界所限定的面,對于半邊symmetry (Al)、symmetry (Bi)、 symmetry (Cl)和Symmetry(Dl)所限定的面而言,就是一個孔。由于每個線段都具有兩個半邊,為了區(qū)分面和孔,在本發(fā)明的具體實施例中,使用 不同的邊來表示,其中,限定如下假定連通邊界所限定的面在組成連通邊界的半邊的左側(cè),而連通邊界所限定的孔 在組成連通邊界的半邊的右側(cè)。以圖1為例,根據(jù)上述的限定,面Y的連通邊界為半邊A2、B2、C2和D2組成的連通 邊界組成的連通邊界,也就是面的連通邊界為逆時鐘方向,而對于面X而言,而孔Y連通邊 界為 symmetry (A2) >symmetry (B2) >symmetry (C2)和 symmetry (D2)組成的連通邊界組成的 連通邊界??梢钥吹剑M成任意一個孔的連通邊界的半邊的對稱邊會形成一個連通邊界,而該連通邊界限定了一個面。根據(jù)上述的描述,可以知道,用于描述面的面結(jié)構(gòu)中包括用于限定面的面連通邊界;以及用于限定面內(nèi)部的孔的孔連通邊界。由于所有的半邊的半邊結(jié)構(gòu)中都保存有該半邊共面的下一個半邊,所以所有的連 通邊界都可以使用組成連通邊界的所有半邊中的任意一個來表示。如面X可以使用Al來表示,通過Al的半邊結(jié)構(gòu)可以找到Bi,而通過Bl的半邊結(jié) 構(gòu)可以找到Cl,而通過Cl的半邊結(jié)構(gòu)可以找到D1,最后通過Dl的半邊結(jié)構(gòu)可以找到Al,所 以可以通過組成連同邊界中的任意一個半邊找到組成該連通邊界的所有半邊。同時,在對本發(fā)明實施例的方法和裝置進行詳細(xì)說明之前,為了簡化描述,先定義 一些函數(shù),在后續(xù)的描述中利用函數(shù)來代替對應(yīng)的功能。next (hedge e),用于獲取和半邊e共面的,且屬于同一個連通邊界的下一半邊,由 于用于描述半邊的半邊結(jié)構(gòu)中直接記錄了這個信息,所以可以直接通過描述半邊e的半邊 結(jié)構(gòu)得到。symmetry (hedge e),用于獲取半邊e的對稱兄弟半邊,由于用于描述半邊的半邊 結(jié)構(gòu)中直接記錄了這個信息,所以可以直接通過描述半邊e的半邊結(jié)構(gòu)得到。face (hedge e),用于獲取半邊e所屬的面,由于用于描述半邊的半邊結(jié)構(gòu)中直接 記錄了這個信息,所以可以直接通過描述半邊e的半邊結(jié)構(gòu)得到。edge (vertex ν),用于獲取指向頂點ν的一個半邊,由于用于描述頂點的頂點結(jié)構(gòu) 中直接記錄了這個信息,所以可以直接通過描述頂點ν的頂點結(jié)構(gòu)得到。outer_boundary(face f),用于獲取組成面f的連通邊界的一個半邊,由于用于描 述面的面結(jié)構(gòu)中直接記錄了這個信息,所以可以直接通過描述面f的面結(jié)構(gòu)得到。hole_boundary(face f, int i),用于獲取屬于面f的第i個孔連通邊界的一個組 成半邊,由于用于描述面的面結(jié)構(gòu)中直接記錄了這個信息,所以可以直接通過描述面f的 面結(jié)構(gòu)得到。neW_edge (DCEL),用于加入一對新半邊(對應(yīng)于一個線段),并返回其中的一個半 邊。new_vertex (DCEL),用于加入一個新頂點。new_face (DCEL),用于加入一個新面。bool orientate_clockwise(segment cv, segment cvl, segment cv2,point ρ), 用于判斷在點ρ處,cvl、cv和cv2是否成順時針方向,也就是用于判斷cvl、cv和cv2之間 的位置關(guān)系。在對上述的概念描述清楚之后,下面對本發(fā)明實施例的方法進行詳細(xì)描述。如圖2所示,本發(fā)明實施例的方法包括步驟201,利用源電子地圖中所有 的線段形成第一線段集合,并利用所有線段的端 點形成第一事件點集合,進入步驟202 ;步驟202,根據(jù)線段和端點之間的關(guān)系,建立每一個事件點的關(guān)聯(lián)線段集合,每一 個事件點的關(guān)聯(lián)線段集合包括第一線段集合中,所有以該事件作為終點的線段,進入步驟 203 ;
步驟203,根據(jù)預(yù)設(shè)規(guī)則,對第一事件點集合中的所有事件點進行排序,得到按序 排列的事件點組成的第二事件點集合,進入步驟204 ;步驟204,按照排列順序,從第二事件點集合中取出排在最前面的還未處理的事件 點作為當(dāng)前事件點,進入步驟205 ;步驟205,從當(dāng)前事件點的關(guān)聯(lián)線段集合中取出一個還未處理的線段作為當(dāng)前線 段,進入步驟206 ;步驟206,判斷所述當(dāng)前線段的兩個端點對應(yīng)的頂點的創(chuàng)建情況,在當(dāng)前線段的兩 個端點對應(yīng)的頂點都沒有創(chuàng)建時,進入步驟207,在當(dāng)前線段的兩個端點對應(yīng)的頂點已經(jīng)創(chuàng) 建一個時,在當(dāng)前線段的兩個端點對應(yīng)的頂點都已經(jīng)創(chuàng)建時,進入步驟208,進入步驟209 ;步驟207,在當(dāng)前線段所在的面中,根據(jù)當(dāng)前線段創(chuàng)建半邊和兩個頂點,并將一個 半邊作為面的孔加入描述面的面結(jié)構(gòu)中,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新 創(chuàng)建的頂點的頂點結(jié)構(gòu),進入步驟210 步驟208,根據(jù)當(dāng)前線段創(chuàng)建半邊和一個頂點,同時建立描述新創(chuàng)建的半邊的半邊 結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu),進入步驟210 ;步驟209,根據(jù)當(dāng)前線段創(chuàng)建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu),進入 步驟210 ;步驟210,判斷當(dāng)前事件點的關(guān)聯(lián)線段集合中是否還有未處理的線段,如果是,返 回步驟205,否則進入步驟211 ;步驟211,判斷第二事件點集合中是否還有未處理的事件點,如果是,返回進入步 驟204,否則進入步驟212 ;步驟212,結(jié)束。下面對步驟207、208和209分別進行詳細(xì)說明。結(jié)合圖3和圖4所示,步驟207包括步驟2071,為當(dāng)前線段的起點和終點對應(yīng)創(chuàng)建新的頂點Bl和B2,創(chuàng)建當(dāng)前線段的 半邊Al和A2,其中Al和A2互為對稱兄弟半邊,且互為接續(xù)半邊;步驟2072,獲取當(dāng)前線段所屬的面F ;步驟2073,將半邊Al作為孔邊界加入到描述所述面F的面結(jié)構(gòu)中;步驟2074,建立新創(chuàng)建的半邊A1、A2以及頂點B1、B2的結(jié)構(gòu),進入步驟210,其中代表半邊Al的半邊結(jié)構(gòu)中包括面F、半邊A2、頂點Bi、半邊A2 ;代表半邊A2的半邊結(jié)構(gòu)中包括面F、半邊Al、頂點B2、半邊Al ;代表頂點Bl的頂點結(jié)構(gòu)中包括半邊Al ;代表頂點B2的頂點結(jié)構(gòu)中包括半邊A2。步驟2072中,需要獲取當(dāng)前線段所屬的面,其通過如下方式實現(xiàn)所有沿著從線段的端點引出一條射線,該射線最先碰到的連通邊界所限定的面即 當(dāng)前線段所屬的面。步驟208主要處理已存在一個頂點的情況,結(jié)合圖5和圖6所示,其中圖6中,對 于待加入的當(dāng)前線段(圖6中的虛線)而言,其中一個頂點已經(jīng)創(chuàng)建,即圖6中的頂點VI, 且頂點Vl的頂點結(jié)構(gòu)中包括半邊Al,同時,存在以下的已有半邊結(jié)構(gòu),即半邊Al當(dāng)前的半邊結(jié)構(gòu)中包括面F、半邊A2、頂點Vl和半邊Cl。
半邊Cl當(dāng)前的半邊結(jié)構(gòu)中包括面F、半邊C2、頂點V4和半邊C2。半邊C2當(dāng)前的半邊結(jié)構(gòu)中包括面F、半邊Cl、頂點Vl和半邊D2。半邊D2當(dāng)前的半邊結(jié)構(gòu)中包括面F、半邊D1、頂點V5和半邊D1。半邊Dl當(dāng)前的半邊結(jié)構(gòu)中包括面F、半邊D2、頂點Vl和半邊A2。半邊A2當(dāng)前的半邊結(jié)構(gòu)中包括面F、半邊Al、頂點V3和半邊Al??梢园l(fā)現(xiàn),在新半邊Bl加入時,首先要需要獲取新的半邊Bl插入的位置,步驟208如圖5所示,包括步驟2081,為當(dāng)前線段創(chuàng)建一個新半邊Bl以及新半邊Bl的對稱兄弟半邊B2,并 將B2作為Bl的接續(xù)半邊;步驟2082,除已創(chuàng)建的頂點Vl之外,創(chuàng)建新頂點V2,使得半邊Bl指向該新創(chuàng)建的 頂點V2,且新半邊Bl的對稱兄弟半邊B2指向該已創(chuàng)建的頂點Vl ;步驟2083,將掛接于已創(chuàng)建的頂點的第一半邊(圖中的Al)的半邊結(jié)構(gòu)中的接續(xù) 半邊修改為新創(chuàng)建的半邊Bi,且B2的接續(xù)半邊為掛接于已創(chuàng)建的頂點Vl的第二半邊Cl, 相對于所述頂點VI,所述第一半邊、新半邊Bl和第二半邊呈順時鐘方向,且所述第一半邊 的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第二半邊;該第一半邊和第二半邊利用前面提到的函數(shù) bool orientate_clockwise (segment cv,segment cvl,segment cv2, point p)得到。步驟2084,建立新創(chuàng)建的半邊B1、B2的半邊結(jié)構(gòu)和新創(chuàng)建的頂點V2的頂點結(jié)構(gòu), 其中代表半邊Bl的半邊結(jié)構(gòu)中包括面F、半邊B2、頂點V2、半邊B2 ;代表半邊B2的半邊結(jié)構(gòu)中包括面F、半邊Bi、頂點VI、半邊Cl ;代表頂點V2的頂點結(jié)構(gòu)中包括半邊B1。上述的兩種情況的處理比較簡單,而對于兩個頂點都已經(jīng)創(chuàng)建的情況,需要就不 同的情況進行分別處理。步驟2083中可通過如下方式找到插入線段的合適位置步驟20831,選擇頂點Vl的頂點結(jié)構(gòu)中的半邊Al作為半邊Xl ;步驟20832,將半邊Xl半邊結(jié)構(gòu)中的接續(xù)半邊的對稱兄弟半邊作為半邊X2 ;步驟20833,判斷在頂點Vl處,X1、B1和X2是否成順時鐘方向,如果是,將Xl和X2 的對稱兄弟半邊分別作為第一半邊和第二半邊,否則,將X2的對稱兄弟半邊作為新的XI, 返回步驟20832。結(jié)合圖7和圖8,如圖7所示,步驟209包括步驟2091,對已創(chuàng)建的頂點Vl和V2,創(chuàng)建一個指向V2的新半邊Bl以及新半邊Bl 的指向已創(chuàng)建的頂點V2的對稱兄弟半邊B2 ;步驟2092,將掛接于已創(chuàng)建的頂點Vl的第一半邊(圖8中的Al)的半邊結(jié)構(gòu)中 的接續(xù)半邊修改為新創(chuàng)建的半邊Bi,且Bl的接續(xù)半邊為掛接于已創(chuàng)建的頂點V2的第二半 邊E2,B2的接續(xù)半邊為掛接于已創(chuàng)建的頂點Vl的第三半邊C2,掛接于已創(chuàng)建的頂點V2的 第四半邊(圖8中的Fl)的半邊結(jié)構(gòu)中的接續(xù)半邊修改為新創(chuàng)建的半邊B2,相對于所述頂 點VI,所述第一半邊Al、新半邊Bl和第二半邊C2呈順時鐘方向,且所述第一半邊Al的原 半邊結(jié)構(gòu)中的接續(xù)半邊為所述第二半邊C2 ;相對于所述頂點V2,所述第四半邊F1、新半邊 Bl和第二半邊E2呈順時鐘方向,且所述第四半邊Fl的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第二半邊E2 ; 步驟2093,判斷所述第一半邊Al和第四半邊Fl原來是否在同一個連通邊界,如果 是,進入步驟2095 (在這種情況下,必然產(chǎn)生新面),否則進入步驟2094 (在這種情況下,不 產(chǎn)生新面);步驟2094,在這種情況下,不構(gòu)成新面,但加入的新邊會將第一半邊Al的連通分 量和第四半邊Fl所在的連通分量結(jié)合起來,且第一半邊Al的連通分量和第四半邊Fl的連 通分量中必然有一個孔邊界,此時,刪除第一半邊Al和第四半邊Fl中作為孔邊界的一個半 邊,并將半邊Bl和半邊B2所在的面設(shè)置為所述半邊Al的半邊結(jié)構(gòu)中的面,結(jié)束處理;步驟2095,判斷第一半邊Al和第四半邊Fl原來所在的連通邊界是否為面的連通 邊界,如果是進入步驟2096,否則進入步驟2097 ;步驟2096,創(chuàng)建一個新面Face2,將第一半邊Al原來所屬的面Facel的面結(jié)構(gòu)中 的面連通邊界設(shè)置為半邊Bl和半邊B2中的其中一個(假定為Bi),而將新面Face2的面結(jié) 構(gòu)中的面連通邊界設(shè)置為半邊Bl和半邊B2中的另一個(假定為B2),并將與B2處于同一 連通邊界所有其它半邊的半邊結(jié)構(gòu)中的面設(shè)置為生成的新面Face2,并刪除面Facel的面 結(jié)構(gòu)中處于新面Face2中的孔連通分量,將刪除的孔連通分量作為新面Face2的孔連通分 量添加到新面Face2的面結(jié)構(gòu)中,且Bl和B2的半邊結(jié)構(gòu)中的面分別為Facel和Face2 ;步驟2097,創(chuàng)建一個新面Face3,將新邊Bl和B2中,所在的連通分量構(gòu)成的面的 有向面積大于0的半邊(假定為B2)作為新面Face3的面結(jié)構(gòu)中的面連通分量,并將第一 半邊Al原來所屬的面Facel的面結(jié)構(gòu)中第一半邊Al和第四半邊Fl所在的孔連通邊界修 改為另一個半邊,將與B2處于同一連通邊界所有其它半邊的半邊結(jié)構(gòu)中的面設(shè)置為生成 的新面Face3,并刪除面Facel的面結(jié)構(gòu)中處于新面Face3中的孔連通分量,將刪除的孔連 通分量作為新面Face3的孔連通分量添加到新面Face3的面結(jié)構(gòu)中,且Bl和B2的半邊結(jié) 構(gòu)中的面分別為Facel和Face3。本發(fā)明實施例的電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔⑸裳b置如圖9所示,包括關(guān)聯(lián)線段集合建立模塊,用于根據(jù)線段和端點之間的關(guān)系,建立每一個事件點的 關(guān)聯(lián)線段集合,每一個事件點的關(guān)聯(lián)線段集合包括第一線段集合中所有以該事件點作為終 點的線段,所述第一線段集合為源電子地圖中所有線段的集合;判斷模塊,用于判斷當(dāng)前事件點的當(dāng)前線段的兩個端點對應(yīng)的頂點的創(chuàng)建情況, 得到一判斷結(jié)果;所述當(dāng)前事件點為所述源電子地圖中所有線段的端點組成的第一事件點 集合中的任意一個事件點,所述當(dāng)前線段為所述當(dāng)前事件點的關(guān)聯(lián)線段集合中的任意一條 關(guān)聯(lián)線段;第一創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都 沒有創(chuàng)建時,在所述當(dāng)前線段所在的面中,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和兩個頂點,并將一 個半邊作為面的孔加入描述面的面結(jié)構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新 創(chuàng)建的頂點的頂點結(jié)構(gòu);第二創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都 已經(jīng)創(chuàng)建時,根據(jù)所述當(dāng)前線段創(chuàng)建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu);第三創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點已 經(jīng)創(chuàng)建一個時,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和一個頂點,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu)。 以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應(yīng) 視為本發(fā)明的保護范圍。
權(quán)利要求
一種電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔⑸煞椒?,其特征在于,包括根?jù)線段和端點之間的關(guān)系,建立每一個事件點的關(guān)聯(lián)線段集合,每一個事件點的關(guān)聯(lián)線段集合包括第一線段集合中所有以該事件點作為終點的線段,所述第一線段集合為源電子地圖中所有線段的集合;將所述源電子地圖中所有線段的端點組成的第一事件點集合中的每一個事件點作為當(dāng)前事件點,并將每一個所述當(dāng)前事件點的關(guān)聯(lián)線段集合中的每一條關(guān)聯(lián)線段作為當(dāng)前線段,對每個當(dāng)前線段執(zhí)行如下步驟判斷所述當(dāng)前線段的兩個端點對應(yīng)的頂點的創(chuàng)建情況,得到一判斷結(jié)果;所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都沒有創(chuàng)建時,在所述當(dāng)前線段所在的面中,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和兩個頂點,并將一個半邊作為面的孔加入描述面的面結(jié)構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu);所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都已經(jīng)創(chuàng)建時,根據(jù)所述當(dāng)前線段創(chuàng)建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu);所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點已經(jīng)創(chuàng)建一個時,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和一個頂點,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu)。
2.根據(jù)權(quán)利要求1所述的拓?fù)湫畔⑸煞椒ǎ涮卣髟谟?,所述第一事件點集合中的 所有事件點按序排列。
3.根據(jù)權(quán)利要求1所述的拓?fù)湫畔⑸煞椒?,其特征在于,所述在所述?dāng)前線段所在 的面中,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和兩個頂點,并將一個半邊作為面的孔加入描述面的 面結(jié)構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu)具體包 括步驟A1,為所述當(dāng)前線段的起點和終點對應(yīng)創(chuàng)建兩個新的頂點;步驟A2,為所述當(dāng)前線段創(chuàng)建互為對稱兄弟半邊和接續(xù)半邊的兩個新的半邊;步驟A3,獲取所述當(dāng)前線段所屬的面;步驟A4,將步驟A2中創(chuàng)建的兩個新的半邊中的一個作為孔邊界加入到描述步驟A3中 獲取的面的面結(jié)構(gòu)中;步驟A5,建立步驟A2中創(chuàng)建的兩個新的半邊以及步驟A1中創(chuàng)建的兩個新的頂點的結(jié)構(gòu)。
4.根據(jù)權(quán)利要求1所述的拓?fù)湫畔⑸煞椒?,其特征在于,所述根?jù)所述當(dāng)前線段創(chuàng) 建半邊和一個頂點,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu) 具體包括步驟B1,為所述當(dāng)前線段創(chuàng)建互為對稱兄弟半邊的第一半邊和第二半邊,并將所述第 二半邊作為所述第一半邊的接續(xù)半邊;步驟B2,為所述當(dāng)前線段創(chuàng)建新頂點,所述第一半邊指向所述新頂點,且所述第二半邊 指向所述當(dāng)前線段的已創(chuàng)建頂點;步驟B3,將掛接于所述當(dāng)前線段的已創(chuàng)建頂點的第三半邊的半邊結(jié)構(gòu)中的接續(xù)半邊修 改為所述第一半邊,且所述第二半邊的接續(xù)半邊為掛接于所述當(dāng)前線段的已創(chuàng)建的頂點的 第四半邊,相對于所述當(dāng)前線段的已創(chuàng)建頂點,所述第三半邊、第一半邊和第四半邊呈順時鐘方向,且所述第三半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第四半邊;步驟B4,建立所述第一半邊、第二半邊、新頂點的結(jié)構(gòu)。
5.根據(jù)權(quán)利要求1所述的拓?fù)湫畔⑸煞椒?,其特征在于,所述根?jù)所述當(dāng)前線段創(chuàng) 建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)具體包括步驟Cl,對所述當(dāng)前線段的已創(chuàng)建的第一頂點和第二頂點,創(chuàng)建一個指向所述第二頂 點的第一新半邊,并創(chuàng)建指向所述第二頂點,且與第一新半邊為對稱兄弟半邊的第二新半 邊;步驟C2,將掛接于所述第一頂點的第四半邊的半邊結(jié)構(gòu)中的接續(xù)半邊修改為所述第 一新半邊,且所述第一新半邊的接續(xù)半邊為掛接于所述第二頂點的第五半邊,所述第二新 半邊的接續(xù)半邊為掛接于所述第一頂點的第六半邊,掛接于所述第二頂點的第七半邊的半 邊結(jié)構(gòu)中的接續(xù)半邊修改為所述第二新半邊,相對于所述第一頂點,所述第四半邊、第一新 半邊和第六半邊呈順時鐘方向,且所述第四半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第六半 邊;相對于所述第二頂點,所述第七半邊、第一新半邊和第五半邊呈順時鐘方向,且所述第 七半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第五半邊;步驟C3,判斷所述第四半邊和第七半邊原來是否在同一個連通邊界,如果是,進入步驟 C5,否則進入步驟C4;步驟C4,刪除第四半邊和第七半邊中作為孔邊界的一個半邊,并將第一新半邊和第二 新半邊所在的面設(shè)置為所述第四半邊的半邊結(jié)構(gòu)中的面,結(jié)束處理;步驟C5,判斷第四半邊和第七半邊原來所在的連通邊界是否為面的連通邊界,如果是 進入步驟C6,否則進入步驟C7 ;步驟C6,創(chuàng)建一個第一新面,將第四半邊原來所屬的面的面結(jié)構(gòu)中的面連通邊界設(shè)置 為所述第一新半邊,而將第一新面的面結(jié)構(gòu)中的面連通邊界設(shè)置為所述第二新半邊,并將 與所述第二新半邊處于同一連通邊界所有其它半邊的半邊結(jié)構(gòu)中的面設(shè)置為第一新面,并 刪除所述第四半邊原來所屬的面的面結(jié)構(gòu)中處于所述第一新面中的孔連通分量,將刪除的 孔連通分量作為第一新面的孔連通分量添加到第一新面的面結(jié)構(gòu)中,且第一新半邊的半邊 結(jié)構(gòu)中的面為所述第四半邊原來所屬的面,第二新半邊的半邊結(jié)構(gòu)中的面為所述第一新 面;步驟C7,創(chuàng)建一個第二新面,將所述第一新半邊和第二新半邊中,所在的連通分量構(gòu)成 的面的有向面積大于O的半邊作為所述第二新面的面結(jié)構(gòu)中的面連通分量,并將所述第四 半邊原來所屬的面的面結(jié)構(gòu)中第四半邊和第七半邊所在的孔連通邊界修改為所述第一新 半邊和第二新半邊中的另一個,將與第二新半邊處于同一連通邊界所有其它半邊的半邊結(jié) 構(gòu)中的面設(shè)置為第二新面,刪除第四半邊原來所屬的面的面結(jié)構(gòu)中處于第二新面中的孔連 通分量,將刪除的孔連通分量作為第二新面的孔連通分量添加到面結(jié)構(gòu)中,且第一新半邊 和第二新半邊的半邊結(jié)構(gòu)中的面分別為第四半邊原來所屬的面和第二新面。
6.一種電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔⑸裳b置,其特征在于,包括關(guān)聯(lián)線段集合建立模塊,用于根據(jù)線段和端點之間的關(guān)系,建立每一個事件點的關(guān)聯(lián) 線段集合,每一個事件點的關(guān)聯(lián)線段集合包括第一線段集合中所有以該事件點作為終點的 線段,所述第一線段集合為源電子地圖中所有線段的集合;判斷模塊,用于判斷當(dāng)前事件點的當(dāng)前線段的兩個端點對應(yīng)的頂點的創(chuàng)建情況,得到一判斷結(jié)果;所述當(dāng)前事件點為所述源電子地圖中所有線段的端點組成的第一事件點集合 中的任意一個事件點,所述當(dāng)前線段為所述當(dāng)前事件點的關(guān)聯(lián)線段集合中的任意一條關(guān)聯(lián) 線段;第一創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都沒有 創(chuàng)建時,在所述當(dāng)前線段所在的面中,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和兩個頂點,并將一個半 邊作為面的孔加入描述面的面結(jié)構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建 的頂點的頂點結(jié)構(gòu);第二創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點都已經(jīng) 創(chuàng)建時,根據(jù)所述當(dāng)前線段創(chuàng)建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu);第三創(chuàng)建模塊,用于在所述判斷結(jié)果指示所述當(dāng)前線段的兩個端點對應(yīng)的頂點已經(jīng)創(chuàng) 建一個時,根據(jù)所述當(dāng)前線段創(chuàng)建半邊和一個頂點,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu) 和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu)。
7.根據(jù)權(quán)利要求6所述的拓?fù)湫畔⑸裳b置,其特征在于,所述第一事件點集合中的 所有事件點按序排列。
8.根據(jù)權(quán)利要求6所述的拓?fù)湫畔⑸裳b置,其特征在于,所述第一創(chuàng)建模塊具體包括第一單元,用于為所述當(dāng)前線段的起點和終點對應(yīng)創(chuàng)建兩個新的頂點; 第二單元,用于為所述當(dāng)前線段創(chuàng)建互為對稱兄弟半邊和接續(xù)半邊的兩個新的半邊; 第三單元,用于獲取所述當(dāng)前線段所屬的面;第四單元,用于將所述第二單元創(chuàng)建的兩個新的半邊中的一個作為孔邊界加入到描述 所述第三單元獲取的面的面結(jié)構(gòu)中;第五單元,用于建立所述第二單元創(chuàng)建的兩個新的半邊以及所述第一單元創(chuàng)建的兩個 新的頂點的結(jié)構(gòu)。
9.根據(jù)權(quán)利要求6所述的拓?fù)湫畔⑸裳b置,其特征在于,所述第二創(chuàng)建模塊具體包括第六單元,用于為所述當(dāng)前線段創(chuàng)建互為對稱兄弟半邊的第一半邊和第二半邊,并將 所述第二半邊作為所述第一半邊的接續(xù)半邊;第七單元,用于為所述當(dāng)前線段創(chuàng)建新頂點,所述第一半邊指向所述新頂點,且所述第 二半邊指向所述當(dāng)前線段的已創(chuàng)建頂點;第八單元,用于將掛接于所述當(dāng)前線段的已創(chuàng)建頂點的第三半邊的半邊結(jié)構(gòu)中的接續(xù) 半邊修改為所述第一半邊,且所述第二半邊的接續(xù)半邊為掛接于所述當(dāng)前線段的已創(chuàng)建的 頂點的第四半邊,相對于所述當(dāng)前線段的已創(chuàng)建頂點,所述第三半邊、第一半邊和第四半邊 呈順時鐘方向,且所述第三半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第四半邊; 第九單元,用于建立所述第一半邊、第二半邊、新頂點的結(jié)構(gòu)。
10.根據(jù)權(quán)利要求6所述的拓?fù)湫畔⑸裳b置,其特征在于,所述第三創(chuàng)建模塊具體包括第十單元,用于對所述當(dāng)前線段的已創(chuàng)建的第一頂點和第二頂點,創(chuàng)建一個指向所述 第二頂點的第一新半邊,并創(chuàng)建指向所述第二頂點,且與第一新半邊為對稱兄弟半邊的第 二新半邊;第十一單元,用于將掛接于所述第一頂點的第四半邊的半邊結(jié)構(gòu)中的接續(xù)半邊修改為所述第一新半邊,且所述第一新半邊的接續(xù)半邊為掛接于所述第二頂點的第五半邊,所述 第二新半邊的接續(xù)半邊為掛接于所述第一頂點的第六半邊,掛接于所述第二頂點的第七半 邊的半邊結(jié)構(gòu)中的接續(xù)半邊修改為所述第二新半邊,相對于所述第一頂點,所述第四半邊、 第一新半邊和第六半邊呈順時鐘方向,且所述第四半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述 第六半邊;相對于所述第二頂點,所述第七半邊、第一新半邊和第五半邊呈順時鐘方向,且 所述第七半邊的原半邊結(jié)構(gòu)中的接續(xù)半邊為所述第五半邊;第十二單元,用于判斷所述第四半邊和第七半邊原來是否在同一個連通邊界; 第十三單元,用于在第十二單元判斷出所述第四半邊和第七半邊原來不在同一個連通 邊界時,刪除第四半邊和第七半邊中作為孔邊界的一個半邊,并將第一新半邊和第二新半 邊所在的面設(shè)置為所述第四半邊的半邊結(jié)構(gòu)中的面,結(jié)束處理;第十四單元,用于在第十二單元判斷出所述第四半邊和第七半邊原來不在同一個連通 邊界時,判斷第四半邊和第七半邊原來所在的連通邊界是否為面的連通邊界;第十五單元,用于在第十四單元判斷出第四半邊和第七半邊原來所在的連通邊界為面 的連通邊界時,創(chuàng)建一個第一新面,將第四半邊原來所屬的面的面結(jié)構(gòu)中的面連通邊界設(shè) 置為所述第一新半邊,而將第一新面的面結(jié)構(gòu)中的面連通邊界設(shè)置為所述第二新半邊,并 將與所述第二新半邊處于同一連通邊界所有其它半邊的半邊結(jié)構(gòu)中的面設(shè)置為第一新面, 并刪除所述第四半邊原來所屬的面的面結(jié)構(gòu)中處于所述第一新面中的孔連通分量,將刪除 的孔連通分量作為第一新面的孔連通分量添加到第一新面的面結(jié)構(gòu)中,且第一新半邊的半 邊結(jié)構(gòu)中的面為所述第四半邊原來所屬的面,第二新半邊的半邊結(jié)構(gòu)中的面為所述第一新 面;第十六單元,用于在第十四單元判斷出第四半邊和第七半邊原來所在的連通邊界不是 面的連通邊界時,創(chuàng)建一個第二新面,將所述第一新半邊和第二新半邊中,所在的連通分量 構(gòu)成的面的有向面積大于O的半邊作為所述第二新面的面結(jié)構(gòu)中的面連通分量,并將所述 第四半邊原來所屬的面的面結(jié)構(gòu)中第四半邊和第七半邊所在的孔連通邊界修改為所述第 一新半邊和第二新半邊中的另一個,將與第二新半邊處于同一連通邊界所有其它半邊的半 邊結(jié)構(gòu)中的面設(shè)置為第二新面,刪除第四半邊原來所屬的面的面結(jié)構(gòu)中處于第二新面中的 孔連通分量,將刪除的孔連通分量作為第二新面的孔連通分量添加到面結(jié)構(gòu)中,且第一新 半邊和第二新半邊的半邊結(jié)構(gòu)中的面分別為第四半邊原來所屬的面和第二新面。
全文摘要
本發(fā)明提供了一種電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔⑸煞椒把b置,該方法包括當(dāng)前線段的兩個端點對應(yīng)的頂點都沒有創(chuàng)建時,在當(dāng)前線段所在的面中,創(chuàng)建半邊和兩個頂點,并將一個半邊作為面的孔加入描述面的面結(jié)構(gòu)中,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu);當(dāng)前線段的兩個端點對應(yīng)的頂點都已經(jīng)創(chuàng)建時,創(chuàng)建半邊,同時建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu);當(dāng)前線段的兩個端點對應(yīng)的頂點已經(jīng)創(chuàng)建一個時,創(chuàng)建半邊和一個頂點,并建立描述新創(chuàng)建的半邊的半邊結(jié)構(gòu)和描述新創(chuàng)建的頂點的頂點結(jié)構(gòu)。本發(fā)明實施例的電子地圖中的道路網(wǎng)絡(luò)的拓?fù)湫畔c、線和面的信息,為擴展應(yīng)用提供了支持。
文檔編號G01C21/26GK101847339SQ20091008078
公開日2010年9月29日 申請日期2009年3月27日 優(yōu)先權(quán)日2009年3月27日
發(fā)明者張韻, 曹曉航 申請人:北京四維圖新科技股份有限公司