專利名稱:一種路網(wǎng)中平行線的生成方法及裝置的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及地理信息系統(tǒng)技術(shù)領(lǐng)域,特別是涉及一種路網(wǎng)中平行線的生成方法,以及一種路網(wǎng)中平行線的生成裝置。
背景技術(shù):
平行線的繪制廣泛應(yīng)用于地理信息系統(tǒng)開發(fā)、計(jì)算機(jī)繪圖、GIS地圖生產(chǎn)、城市規(guī)劃、地下采礦管道和礦井描述中,比如描述一條道路的上行和下行情況時(shí),最直觀的就是用平行線的方法。現(xiàn)有的平行線繪制算法只是對(duì)折線的節(jié)點(diǎn)在其法向的延伸,如圖1所示,對(duì)于已知線段AB,現(xiàn)有平行線繪制方法是,選定一點(diǎn)C確定方向,輸入預(yù)設(shè)平行線間的距離d,通過以下步驟在所選方向上按照輸入距離復(fù)制與所選線段長(zhǎng)度的線段EF:第一步:求點(diǎn)C到直線AB的垂點(diǎn)P ;第二步:計(jì)算 dx = Xc-Xp, dy = yc-yp ;第三步:按照如下公式求取E、F點(diǎn):xE = xA+dx, yE = yA+dyxF = xB+dx, yF = yB+dy第四步:連接E、F點(diǎn),則線段EF為所求平行線?,F(xiàn)有的平行線繪制算法存在諸多問題:一 )多條線段的交匯處繪制的平行線相互交錯(cuò),如圖2所示,0A、0B、0C和OD為原線段,虛線為相應(yīng)的平行線。二)對(duì)于同一條拆線,現(xiàn)有算法在不同比例尺下的繪制效果存在很大差別,如圖3和圖4所示,AB⑶組成了原線段,A' B' C' D'組成了相應(yīng)的平行線,其中圖3a為大比例尺下的繪制結(jié)果,圖3b為小比例尺下的繪制結(jié)果,存在自交點(diǎn)。三)當(dāng)兩條線的夾角很小時(shí)容易出現(xiàn)平行線節(jié)點(diǎn)在線段的反方向上,或在線段很遠(yuǎn)處,如圖4所示,ABC組成了原線段,A' B'、B' C'、A" B"、B" C"組成了平行線,線段AB和線段BC夾角較小,其外側(cè)的平行線A' B'和B' C'在原線段的很遠(yuǎn)處,而內(nèi)側(cè)平行線B" C"則在BC的反方向上。四)針對(duì)復(fù)雜路網(wǎng),可能會(huì)有一條線有若干線段組成,繪制的平行線可能會(huì)出現(xiàn)交錯(cuò)或斷開的情況。如圖5所示,AB⑶EFGH組成了原線段,A' Bi C1 Di Ei Fi Gi Hi組成了平行線,其中線段AB和CD表示一條折線上的兩條線段,EF和GH表示另一條折線上的兩條線段,這兩條折線共同組成一條道路,而A' B'、B' C'和E' F'之間斷開,C' D'和G' H'之間交錯(cuò)。因此,目前需要本領(lǐng)域技術(shù)人員解決的一個(gè)技術(shù)問題就是,提供一種平行線的生成機(jī)制,避免生成的平行線出現(xiàn)交錯(cuò)、斷開或自交的情況,使得繪制的平行線更加合理、準(zhǔn)確和美觀。
發(fā)明內(nèi)容
本申請(qǐng)?zhí)峁┮环N路網(wǎng)中平行線的生成方法,使得繪制的平行線更加合理、準(zhǔn)確和美觀。本申請(qǐng)還提供了一種路網(wǎng)中平行線的生成裝置,用以保證上述方法在實(shí)際中的應(yīng)用及實(shí)現(xiàn)。為了解決上述問題,本申請(qǐng)公開了一種路網(wǎng)中平行線的生成方法,包括:在二維地圖網(wǎng)格中,針對(duì)每條道路,利用廣度優(yōu)先搜索該道路的每一條線段,并將搜索到的線段組成道路對(duì)應(yīng)的連續(xù)折線;判斷所述道路對(duì)應(yīng)的連續(xù)折線的節(jié)點(diǎn)是否需要抽稀,若是則按照所述抽稀參數(shù)進(jìn)行抽稀操作,并建立折線之間的連接關(guān)系,若否,則建立折線之間的連接關(guān)系;在相鄰線段之間利用角平分線法,生成相鄰線段的鄰接點(diǎn)在相應(yīng)的平行線上的內(nèi)點(diǎn);生成該道路的起點(diǎn)和終點(diǎn)在相應(yīng)平行線上的端點(diǎn);判斷所述內(nèi)點(diǎn)中是否存在產(chǎn)生自交的內(nèi)點(diǎn),若存在,則去除產(chǎn)生自交的內(nèi)點(diǎn);依次連接所述平行線去除自交內(nèi)點(diǎn)后剩余的內(nèi)點(diǎn)和端點(diǎn),得到該道路在路網(wǎng)中的平行線。優(yōu)選的,所述在二維地圖網(wǎng)格中,利用廣度優(yōu)先搜索目標(biāo)道路的每一條線段,并將搜索到的線段組成一條連續(xù)折線的步驟包括:在二維地圖網(wǎng)格的各個(gè)網(wǎng)格中搜索是否存在離散折線,若某一網(wǎng)格存在離散折線,搜索與該網(wǎng)格相鄰的網(wǎng)格,找到與該離散折線存在連接關(guān)系的折線,并與該離散折線組成新的折線,直至所述新的折線為連續(xù)折線。優(yōu)選的,所述判斷道路對(duì)應(yīng)的連續(xù)折線的節(jié)點(diǎn)是否需要抽稀的步驟包括:判斷預(yù)設(shè)平行線間距離是否大于所述連續(xù)折線中所有線段的平均長(zhǎng)度。優(yōu)選的,所述按照抽稀參數(shù)進(jìn)行抽稀操作的步驟包括:步驟1、計(jì)算所述連續(xù)折線的起點(diǎn)與當(dāng)前節(jié)點(diǎn)間的距離,并把該距離作為累計(jì)長(zhǎng)度,所述當(dāng)前節(jié)點(diǎn)為所述起點(diǎn)的后繼節(jié)點(diǎn);步驟2、若所述累計(jì)長(zhǎng)度小于抽稀參數(shù),則把當(dāng)前節(jié)點(diǎn)的作為預(yù)刪除節(jié)點(diǎn),并把當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)作為新的當(dāng)前節(jié)點(diǎn),并執(zhí)行步驟3,若所述累計(jì)長(zhǎng)度大于等于抽稀參數(shù),把當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)作為新的當(dāng)前節(jié)點(diǎn),并執(zhí)行步驟4;步驟3、判斷當(dāng)前節(jié)點(diǎn)是否為所述連續(xù)折線的終點(diǎn),若否,則計(jì)算新的當(dāng)前節(jié)點(diǎn)與其前一節(jié)點(diǎn)之間的距離,加入到累積長(zhǎng)度中,并執(zhí)行步驟2 ;步驟4、把累積長(zhǎng)度置為0,并刪除所有預(yù)刪除節(jié)點(diǎn),判斷當(dāng)前節(jié)點(diǎn)是否為所述連續(xù)折線的終點(diǎn),若否,則計(jì)算當(dāng)前節(jié)點(diǎn)與其前一節(jié)點(diǎn)的距離作為累積長(zhǎng)度,返回步驟2,若是,則結(jié)束抽稀操作。優(yōu)選的,所述建立折線之間的連接關(guān)系的步驟包括:預(yù)置節(jié)點(diǎn)數(shù)據(jù)庫,所述節(jié)點(diǎn)數(shù)據(jù)庫包括節(jié)點(diǎn)和與該節(jié)點(diǎn)相連接的折線編號(hào)子數(shù)據(jù)庫,所述節(jié)點(diǎn)包括節(jié)點(diǎn)編號(hào),節(jié)點(diǎn)坐標(biāo);針對(duì)所述的每個(gè)折線,在節(jié)點(diǎn)數(shù)據(jù)庫中查找是否存在該折線的起點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則把該折線的起點(diǎn)的節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫;
將該折線的折線編號(hào)插入到起點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫;在節(jié)點(diǎn)數(shù)據(jù)庫中查找是否存在該折線的終點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則把該折線的終點(diǎn)的節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫;將該折線的折線編號(hào)插入到終點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫。優(yōu)選的,所述在相鄰線段之間利用角平分線法,生成相鄰線段的鄰接點(diǎn)在相應(yīng)的平行線上的內(nèi)點(diǎn)的步驟包括:尋找各線段的相鄰線段,在相鄰線段之間做角平分線;取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為相應(yīng)的平行線的內(nèi)點(diǎn)。優(yōu)選的,所述生成該道路的起點(diǎn)和終點(diǎn)在相應(yīng)平行線上的端點(diǎn)的步驟包括:判斷所述起點(diǎn)和終點(diǎn)是否與其它線段無連接關(guān)系;若是,則取起點(diǎn)或終點(diǎn)所在線段的法向上到該點(diǎn)距離為所設(shè)定平行線距離的點(diǎn),為相應(yīng)的平行線上的端點(diǎn);若否,則將存在連接關(guān)系的線段按照向量角從小到大進(jìn)行排序,在相鄰線段間做角平分線,取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為所述起點(diǎn)或終點(diǎn)在平行線上的端點(diǎn)。優(yōu)選的,所述去除產(chǎn)生自交的內(nèi)點(diǎn)的步驟包括:依次連接平行線的內(nèi)點(diǎn)和端點(diǎn)得到各道路的平行線;依次判斷所述各道路的平行線的各線段,與原線段的夾角是否大于預(yù)設(shè)角度,若是,則刪除該線段的終點(diǎn)。本申請(qǐng)還提供了一種路網(wǎng)中平行線的生成裝置,包括:連續(xù)折線生成模塊,用于在二維地圖網(wǎng)格中,針對(duì)每條道路,利用廣度優(yōu)先搜索該道路的每一條線段,并將搜索到的線段組成道路對(duì)應(yīng)的連續(xù)折線;抽稀判斷模塊,用于判斷所述道路對(duì)應(yīng)的連續(xù)折線的節(jié)點(diǎn)是否需要抽稀,若是,則執(zhí)行抽稀模塊和連接關(guān)系建立模塊,若否,則執(zhí)行連接關(guān)系建立模塊;抽稀模塊,用于按照所述抽稀參數(shù)進(jìn)行抽稀操作;連接關(guān)系建立模塊,用于建立折線之間的連接關(guān)系;內(nèi)點(diǎn)生成模塊,用于在相鄰線段之間利用角平分線法,生成相鄰線段的鄰接點(diǎn)在相應(yīng)的平行線上的內(nèi)點(diǎn);端點(diǎn)生成模塊,用于生成該道路的起點(diǎn)和終點(diǎn)在相應(yīng)平行線上的端點(diǎn);自交點(diǎn)去除模塊,用于判斷所述內(nèi)點(diǎn)中是否存在產(chǎn)生自交的內(nèi)點(diǎn),若存在,則去除產(chǎn)生自交的內(nèi)點(diǎn);平行線生成模塊,用于依次連接所述平行線去除自交內(nèi)點(diǎn)后剩余的內(nèi)點(diǎn)和端點(diǎn),得到該道路在路網(wǎng)中的平行線。優(yōu)選的,所述內(nèi)點(diǎn)生成模塊包括:角平分線生成子模塊,用于尋找各線段的相鄰線段,在相鄰線段之間做角平分線.
內(nèi)點(diǎn)獲取子模塊,用于取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為相應(yīng)的平行線的內(nèi)點(diǎn);
所述端點(diǎn)生成模塊包括:連接關(guān)系判斷子模塊,用于判斷所述起點(diǎn)和終點(diǎn)是否與其它線段無連接關(guān)系;第一端點(diǎn)獲取子模塊,用于若是,則取起點(diǎn)或終點(diǎn)所在線段的法向上到該點(diǎn)距離為所設(shè)定平行線距離的點(diǎn),為相應(yīng)的平行線上的端點(diǎn);第二端點(diǎn)獲取子模塊,用于若否,則將存在連接關(guān)系的線段按照向量角從小到大進(jìn)行排序,在相鄰線段間做角平分線,取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為所述起點(diǎn)或終點(diǎn)在平行線上的端點(diǎn)。與現(xiàn)有技術(shù)相比,本申請(qǐng)具有以下優(yōu)點(diǎn):依據(jù)本申請(qǐng),針對(duì)復(fù)雜路網(wǎng),生成每條道路的連續(xù)折線,避免了繪制的平行線可能會(huì)出現(xiàn)交錯(cuò)或斷開的情況;對(duì)折線的節(jié)點(diǎn)進(jìn)行抽稀刪除折線中比較短的一些線段,優(yōu)化原始折線的質(zhì)量,使得生成的平行線簡(jiǎn)潔、美觀,同時(shí)也避免了一部分自交點(diǎn)的產(chǎn)生;依據(jù)角平分線法生平行線的內(nèi)點(diǎn)解決了線段的交匯點(diǎn)互相交錯(cuò)的問題,使線段能夠整齊地連接起來;去除產(chǎn)生自交的內(nèi)點(diǎn),避免生成的平行線出現(xiàn)交錯(cuò)、斷開或自交的情況。綜上所述,依據(jù)本申請(qǐng)生成各條道路的平行線,可以使得繪制的平行線更加合理、準(zhǔn)確和美觀。
圖1是現(xiàn)有技術(shù)中的平行線繪制示意圖;圖2是現(xiàn)有技術(shù)中平行線繪制方法存在的問題一的示意圖;圖3a和圖3b是現(xiàn)有技術(shù)中平行線繪制方法存在的問題二的示意圖;圖4是現(xiàn)有技術(shù)中平行線繪制方法存在的問題三的示意圖;圖5是現(xiàn)有技術(shù)中平行線繪制方法存在的問題四的示意圖;圖6是本申請(qǐng)的一種路網(wǎng)中平行線的生成方法實(shí)施例的流程圖;圖7是本申請(qǐng)中廣度優(yōu)先搜索的示意圖;圖8a和圖8b是本申請(qǐng)的中對(duì)折線進(jìn)行抽稀前后對(duì)比示意圖;圖9是本申請(qǐng)中平行線的內(nèi)點(diǎn)生成示意圖;圖10是本申請(qǐng)中平行線的端點(diǎn)生成示意圖;圖1la和圖1lb是本申請(qǐng)中去除自交點(diǎn)前后對(duì)比示意 圖12是本申請(qǐng)的一種路網(wǎng)中平行線的生成裝置實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施例方式為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說明。描述一條道路的上行和下行情況時(shí),最直觀的就是用平行線的方法,現(xiàn)有的平行線生成方法存在如下問題:一)多條線段的交匯處繪制的平行線相互交錯(cuò);二)不同比例尺下繪制的平行線效果有很大差別;三)當(dāng)兩條線的夾角很小時(shí)容易出現(xiàn)平行線節(jié)點(diǎn)在線段的反方向上,或在線段很遠(yuǎn)處的情形;四)針對(duì)復(fù)雜路網(wǎng),可能會(huì)有一條線有若干線段組成,繪制的平行線可能會(huì)出現(xiàn)交錯(cuò)或斷開的情況。
本申請(qǐng)的核心構(gòu)思之一在于,針對(duì)復(fù)雜路網(wǎng),生成每條道路的連續(xù)折線,對(duì)折線的節(jié)點(diǎn)進(jìn)行抽稀優(yōu)化原始折線的質(zhì)量,依據(jù)角平分線法生平行線的內(nèi)點(diǎn),并去除產(chǎn)生自交的內(nèi)點(diǎn),然后連接內(nèi)點(diǎn)和端點(diǎn)各條道路的平行線,避免生成的平行線出現(xiàn)交錯(cuò)、斷開或自交的情況,使得繪制的平行線更加合理、準(zhǔn)確和美觀。參考圖6,其示出了本申請(qǐng)的一種路網(wǎng)中平行線的生成方法實(shí)施例的流程圖,具體可以包括以下步驟:步驟101、在二維地圖網(wǎng)格中,針對(duì)每條道路,利用廣度優(yōu)先搜索該道路的每一條線段,并將搜索到的線段組成道路對(duì)應(yīng)的連續(xù)折線。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述步驟101可以包括:子步驟S11、在二維地圖網(wǎng)格的各個(gè)網(wǎng)格中搜索是否存在離散折線;子步驟S12、若某一網(wǎng)格存在離散折線,搜索與該網(wǎng)格相鄰的網(wǎng)格,找到與該離散折線存在連接關(guān)系的折線,并與該離散折線組成新的折線,直至所述新的折線為連續(xù)折線。復(fù)雜路網(wǎng)被二維地圖網(wǎng)格所分割,一條道路可能會(huì)二維地圖網(wǎng)格打斷,如果一個(gè)網(wǎng)格中存在離散折線(所有線段的起點(diǎn)不少于兩個(gè)或終點(diǎn)不少于兩個(gè)),可以在與該網(wǎng)格相鄰的網(wǎng)格中搜索是否存在與該離散折線有連接關(guān)系的折線,這種搜索相鄰網(wǎng)格的方法,即廣度優(yōu)先搜索。針對(duì)每條道路,利用廣度優(yōu)先搜索道路的每一條線段,以組成一條完整的連續(xù)折線(所有線段只存在一個(gè)起點(diǎn)和一個(gè)終點(diǎn))用以描述道路。參考圖7,給出了本申請(qǐng)的一種廣度優(yōu)先搜索的示意圖,折線EFG是一條連續(xù)折線,折線ABCD是一條離散折線。在進(jìn)行廣度優(yōu)先搜索時(shí)對(duì)于網(wǎng)格(1,1)中折線ABCD,搜索與它相鄰的網(wǎng)格(0,0), (0,1), (0,2), (1,0), (1,2), (2,0), (2,1), (2,2),在網(wǎng)格(0,1)中,找到一條和折線AB⑶存在連接關(guān)系的折線EFG,把這兩條折線連接起來,組成一條新的折線ABFD,即得到一條連續(xù)折線,若進(jìn)行廣度搜索后,得到的還是一條離散折線,則可對(duì)該離散折線再次進(jìn)行廣度優(yōu)先搜索,直至得到一條連續(xù)折線。步驟102、判斷所述道路對(duì)應(yīng)的連續(xù)折線的節(jié)點(diǎn)是否需要抽稀,若是則執(zhí)行步驟103和步驟104,若否,則執(zhí)行步驟104。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述步驟102可以包括:子步驟S21、判斷預(yù)設(shè)平行線間距離是否大于所述連續(xù)折線中所有線段的平均長(zhǎng)度。在處理矢量化數(shù)據(jù)時(shí),記錄中往往會(huì)有很多重復(fù)數(shù)據(jù),對(duì)進(jìn)一步數(shù)據(jù)處理帶來諸多不便。多余的數(shù)據(jù)一方面浪費(fèi)了較多的存儲(chǔ)空間,另一方面造成所要表達(dá)的圖形不光滑或不符合標(biāo)準(zhǔn)。因此要通過某種規(guī)則,在保證矢量曲線形狀不變的情況下,最大限度地減少數(shù)據(jù)點(diǎn)個(gè)數(shù),這個(gè)過程稱為抽稀。在本申請(qǐng)中,當(dāng)平行線間的距離較大時(shí),而折線中的某些線段長(zhǎng)度相對(duì)于該距離較小,刪除這些線段的節(jié)點(diǎn)不會(huì)影響到折線的大致方向,而且減少的產(chǎn)生自交的可能性,優(yōu)化折線。在本申請(qǐng)中,首先需要判斷所述連續(xù)折線的節(jié)點(diǎn)是否需要進(jìn)行抽稀。計(jì)算折線中所有線段的平均長(zhǎng)度,若平均長(zhǎng)度小于預(yù)設(shè)的平行線間的距離時(shí),進(jìn)行抽稀操作。步驟103、按照所述抽稀參數(shù)進(jìn)行抽稀操作。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述步驟103可以包括:
子步驟S31、計(jì)算所述連續(xù)折線的起點(diǎn)與當(dāng)前節(jié)點(diǎn)間的距離,并把該距離作為累計(jì)長(zhǎng)度,所述當(dāng)前節(jié)點(diǎn)為所述起點(diǎn)的后繼節(jié)點(diǎn);子步驟S32、若所述累計(jì)長(zhǎng)度小于抽稀參數(shù),則把當(dāng)前節(jié)點(diǎn)的作為預(yù)刪除節(jié)點(diǎn),并把當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)作為新的當(dāng)前節(jié)點(diǎn),并執(zhí)行子步驟S33,若所述累計(jì)長(zhǎng)度大于等于抽稀參數(shù),把當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)作為新的當(dāng)前節(jié)點(diǎn),并執(zhí)行子步驟S34 ;子步驟S33、判斷當(dāng)前節(jié)點(diǎn)是否為所述連續(xù)折線的終點(diǎn),若否,則計(jì)算新的當(dāng)前節(jié)點(diǎn)與其前一節(jié)點(diǎn)之間的距離,加入到累積長(zhǎng)度中,并執(zhí)行子步驟S32,若是,則刪除所有預(yù)刪除節(jié)點(diǎn),并結(jié)束抽稀操作;子步驟S34、把累積長(zhǎng)度置為0,并刪除所有預(yù)刪除節(jié)點(diǎn),判斷當(dāng)前節(jié)點(diǎn)是否為所述連續(xù)折線的終點(diǎn),若否,則計(jì)算當(dāng)前節(jié)點(diǎn)與其前一節(jié)點(diǎn)的距離作為累積長(zhǎng)度,返回子步驟S32,若是,則結(jié)束抽稀操作。抽稀操作依據(jù)抽稀參數(shù)進(jìn)行,可以依據(jù)具體的情況設(shè)定抽稀參數(shù),也可以將預(yù)設(shè)的平行線間的距離作為抽稀參數(shù)。進(jìn)行抽稀參數(shù)的時(shí)候,首先針對(duì)起點(diǎn),判斷起點(diǎn)和起點(diǎn)后面的點(diǎn)之間的累積長(zhǎng)度,是否小于抽稀參數(shù),若小于,則判斷下一個(gè)點(diǎn)與起點(diǎn)之間的累計(jì)長(zhǎng)度,若還不滿足則繼續(xù)計(jì)算下一個(gè)點(diǎn)和起點(diǎn)間的累計(jì)長(zhǎng)度,直到大于等于抽稀參數(shù)為止,并刪除其中累計(jì)長(zhǎng)度小于抽稀參數(shù)的點(diǎn)。對(duì)于起點(diǎn)之后未刪除的點(diǎn),將累計(jì)長(zhǎng)度置于0,依次進(jìn)行同樣的判斷。例如,如圖8a 所示,抽稀參數(shù)為 5, AB = 6, BC = I,⑶=1.5, DE = 2, EF = 2, FG=3,GH = 3,HI = 8。A為連續(xù)折線的起點(diǎn),B為后繼節(jié)點(diǎn),AB的距離6記為累計(jì)長(zhǎng)度,由于累計(jì)長(zhǎng)度6大于抽稀參數(shù)5,說明B點(diǎn)滿足條件,不用刪除。然后將C作為當(dāng)前節(jié)點(diǎn),則執(zhí)行步驟S34,將累計(jì)長(zhǎng)度置為O。由于C點(diǎn)不是終點(diǎn),可計(jì)算C點(diǎn)與B點(diǎn)之間的距離I作為累積長(zhǎng)度,并執(zhí)行步驟S32 ;由于BC累計(jì)長(zhǎng)度I小于抽稀參數(shù)5,則將C作為預(yù)刪除節(jié)點(diǎn),并將D作為新的當(dāng)前節(jié)點(diǎn)。由于D不是終點(diǎn),則將D與C之間的距離1.5加到累計(jì)長(zhǎng)度中,累計(jì)長(zhǎng)度為2.5,相當(dāng)于BC+CD = 2.5,仍小于抽稀參數(shù)5,將D點(diǎn)作為預(yù)刪除節(jié)點(diǎn),將E作為當(dāng)前節(jié)點(diǎn)重復(fù)執(zhí)行判斷步驟,直至F點(diǎn)作為當(dāng)前節(jié)點(diǎn)時(shí),累計(jì)長(zhǎng)度為6.5,大于抽稀參數(shù)5。刪除C、D和E點(diǎn),并將累積長(zhǎng)度置為0,對(duì)后續(xù)的點(diǎn)進(jìn)行抽稀操作,最后得到抽稀后剩余的節(jié)點(diǎn)為A、B、F、H和I,可見圖8b。步驟104、建立折線之間的連接關(guān)系。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述步驟104可以包括:子步驟S41、預(yù)置節(jié)點(diǎn)數(shù)據(jù)庫,所述節(jié)點(diǎn)數(shù)據(jù)庫包括節(jié)點(diǎn)和與該節(jié)點(diǎn)相連接的折線編號(hào)子數(shù)據(jù)庫,所述節(jié)點(diǎn)包括節(jié)點(diǎn)編號(hào),節(jié)點(diǎn)坐標(biāo);子步驟S42、針對(duì)所述的每個(gè)折線,在節(jié)點(diǎn)數(shù)據(jù)庫中查找是否存在該折線的起點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則把該折線的起點(diǎn)的節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫;子步驟S43、將該折線的折線編號(hào)插入到起點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫;子步驟S44、在節(jié)點(diǎn)數(shù)據(jù)庫中查找是否存在該折線的終點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則把該折線的終點(diǎn)的節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫;子步驟S45、將該折線的折線編號(hào)插入到終點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫。針對(duì)整個(gè)路網(wǎng),為建立所有折線的連接關(guān)系,需要一個(gè)存放該連接關(guān)系的節(jié)點(diǎn)數(shù)據(jù)庫,可以在其中存入節(jié)點(diǎn)和與該節(jié)點(diǎn)相連接的折線編號(hào)子數(shù)據(jù)庫,節(jié)點(diǎn)中存入節(jié)點(diǎn)編號(hào),節(jié)點(diǎn)坐標(biāo)。預(yù)置節(jié)點(diǎn)數(shù)據(jù)庫之后,將各折線的起點(diǎn)和終點(diǎn)插入數(shù)據(jù)庫中,即建立了折線連接關(guān)系。針對(duì)某個(gè)連續(xù)折線,首先在預(yù)置節(jié)點(diǎn)數(shù)據(jù)庫中搜索該節(jié)點(diǎn)是否已將起點(diǎn)存入節(jié)點(diǎn)數(shù)據(jù)庫,即查找該節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則將起點(diǎn)插入預(yù)置節(jié)點(diǎn)數(shù)據(jù)庫中,包括將起點(diǎn)的節(jié)點(diǎn)編號(hào),節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫,然后將該起點(diǎn)所在折線的折線編號(hào)插入到該起點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫,然后對(duì)該線段的終點(diǎn)進(jìn)行同樣的操作。步驟105、在相鄰線段之間利用角平分線法,生成相鄰線段的鄰接點(diǎn)在相應(yīng)的平行線上的內(nèi)點(diǎn)。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述步驟105可以包括:子步驟S51、尋找各線段的相鄰線段,在相鄰線段之間做角平分線;子步驟S52、取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為相應(yīng)的平行線的內(nèi)點(diǎn)。生成連續(xù)折線的平行線,只需找到折線上各個(gè)點(diǎn)在平行線上的對(duì)應(yīng)的點(diǎn)即可,折線上存在兩種點(diǎn),一種是連續(xù)折線的起點(diǎn)和終點(diǎn),在平行線上對(duì)應(yīng)的點(diǎn)稱為端點(diǎn);其余的是連續(xù)折線的節(jié)點(diǎn),也即是相鄰線段的鄰接點(diǎn),在平行線上對(duì)應(yīng)的點(diǎn)稱為內(nèi)點(diǎn)。在本申請(qǐng)中,內(nèi)點(diǎn)依據(jù)相鄰線段之間的角平分線法生成,內(nèi)點(diǎn)即是相鄰線段較平分線上到相鄰線段的距離為預(yù)設(shè)平行線間距離的點(diǎn)。參考圖9,AB和BC為相鄰線段,BD為角平分線,角ABC的一半為Θ,Β'點(diǎn)到AB和BC的距離等于預(yù)設(shè)平行線間距離,記為d。在具體的實(shí)現(xiàn)中,可以由Θ和d確定出BB'的長(zhǎng)度r,在角平分線上取該長(zhǎng)度即可得到B'點(diǎn)。由于AB和BC形成的角可以是內(nèi)角也可以是外角,因此,可以在對(duì)各個(gè)線段添加屬性,設(shè)置其平行線的位置是在線段的內(nèi)側(cè)還是外側(cè),還是兩側(cè)都有。步驟106、生成該道路的起點(diǎn)和終點(diǎn)在相應(yīng)平行線上的端點(diǎn)。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述步驟106可以包括:子步驟S61、判斷所述起點(diǎn)和終點(diǎn)是否與其它線段無連接關(guān)系,若是,則執(zhí)行子步驟S62,若否,則執(zhí)行子步驟S63 ;子步驟S62、取起點(diǎn)或終點(diǎn)所在線段的法向上到該點(diǎn)距離為所設(shè)定平行線距離的點(diǎn),為相應(yīng)的平行線上的端點(diǎn);子步驟S63、將存在連接關(guān)系的線段按照向量角從小到大進(jìn)行排序,在相鄰線段間做角平分線,取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為所述起點(diǎn)或終點(diǎn)在平行線上的端點(diǎn)。由于復(fù)雜路網(wǎng)上有多條道路,各道路對(duì)應(yīng)的連續(xù)折線的起點(diǎn)和終點(diǎn)可能會(huì)是其他道路的節(jié)點(diǎn),因此,在建立某條道路的起點(diǎn)和終點(diǎn)對(duì)應(yīng)在平行線上的端點(diǎn)的時(shí)候,需要判斷所述起點(diǎn)和終點(diǎn)是否與其它線段無連接關(guān)系,若是,則可以按照現(xiàn)有技術(shù)中的方法,取起點(diǎn)或終點(diǎn)所在線段的法向上到該點(diǎn)距離為所設(shè)定平行線距離的點(diǎn),為相應(yīng)的平行線上的端點(diǎn)。若否,則說明該起點(diǎn)或終點(diǎn)是多個(gè)線段的交點(diǎn),若按照現(xiàn)有技術(shù)的方式做出端點(diǎn),會(huì)使得此處的多個(gè)線段的平行線出現(xiàn)交錯(cuò)或斷開的情況。此時(shí),可以將在連接關(guān)系的線段按照向量角從小到大進(jìn)行排序,以得知哪些線段是相鄰線段,在相鄰的線段中利用兩矢量夾角的平分線方法生成其交匯點(diǎn)坐標(biāo),以確保平行線的端點(diǎn)處不會(huì)相互交錯(cuò)。如圖10所示,線段OA、OB、OC和OD相交與O點(diǎn),向量(OA)'(OB) —、(OC) —、(OD)—按其向量角排序后為(OA) —、(OB) —、(OC) —、(OD)—,由于(OD)—和(OA)—也具有鄰接關(guān)系,所以我們把(OA)—再添加到向量序列的結(jié)尾,排序后的結(jié)果為(OA) ' (OB) ' (OC) ' (OD) ' (OA) '在相鄰向量間用角平分線法,取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為所述起點(diǎn)或終點(diǎn)在平行線上的端點(diǎn),O1, O2, O3, O4,分別為(OA)—和(OB) —、(OB)—和(OC) —、(OC)—和(OD) —、(OD)—和(OA) 旬生成的平行線上的坐標(biāo)點(diǎn)。步驟107、判斷所述內(nèi)點(diǎn)中是否存在產(chǎn)生自交的內(nèi)點(diǎn),若存在,則去除產(chǎn)生自交的內(nèi)點(diǎn)。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述步驟107可以包括:子步驟S71、依次連接平行線的內(nèi)點(diǎn)和端點(diǎn)得到各道路的平行線;子步驟S72、依次判斷所述各道路的平行線的各線段,與原線段的夾角是否大于預(yù)設(shè)角度,若是,則刪除該線段的終點(diǎn)。折線中不相鄰的線段存在交點(diǎn)的現(xiàn)象稱為自交。理論上一條道路不應(yīng)該有自交的情況,由該道路生成的平行線中也不應(yīng)該存在自交的情況,但實(shí)際操作中由于生成的平行線中的線段必須與線段有一定距離,特別是當(dāng)該距離較大時(shí),會(huì)造成生成的平行線中存在自交的情形,如圖1la所示,平行線A' B' C1 D' E' F' G1 H' Γ中B' C1和D' E'不相鄰,它們卻有交點(diǎn)。依次連接平行線的內(nèi)點(diǎn)和端點(diǎn)得到各道路的平行線,遍歷生成的平行線中每一條線段,和該線段對(duì)應(yīng)于原始折線中的線段做比較,若兩者夾角大于90度,說明已產(chǎn)生自交,舍棄該線段的終點(diǎn)。如圖1la所示,⑶與Ci Di的夾角大于90度,即⑶與Ci Di的方向相反,舍去D',F(xiàn)G與F' G'的夾角大于90度,即FG與F' G'的方向相反,舍去G’,去除自交后的平行線如圖1lb所示,去除這些自交點(diǎn)后,平行線和原折線的大致走向不會(huì)改變,且更加美觀。預(yù)設(shè)角度由用戶自行設(shè)定,一般情況下,建議取90度,經(jīng)過本步驟去除自交后,還可能存在自交的情況,可以在進(jìn)行依次去除自交的操作,二次去自交的方法同第一次去自交相同。步驟108、依次連接所述平行線去除自交內(nèi)點(diǎn)后剩余的內(nèi)點(diǎn)和端點(diǎn),得到該道路在路網(wǎng)中的平行線。 內(nèi)點(diǎn)和端點(diǎn)在原折線中是有序的,生成的平行線中的對(duì)應(yīng)坐標(biāo)點(diǎn)也是有序的,把這些有序的點(diǎn)連接起來,便得到一條折線,即該道路在路網(wǎng)中的平行線。綜上所述,本申請(qǐng)?zhí)峁┝艘环N路網(wǎng)中平行線的生成方法,依據(jù)本申請(qǐng),針對(duì)復(fù)雜路網(wǎng),生成每條道路的連續(xù)折線,避免了繪制的平行線可能會(huì)出現(xiàn)交錯(cuò)或斷開的情況;對(duì)折線的節(jié)點(diǎn)進(jìn)行抽稀刪除折線中比較短的一些線段,優(yōu)化原始折線的質(zhì)量,使得生成的平行線簡(jiǎn)潔、美觀,同時(shí)也避免了一部分自交點(diǎn)的產(chǎn)生;依據(jù)角平分線法生平行線的內(nèi)點(diǎn)解決了線段的交匯點(diǎn)互相交錯(cuò)的問題,使線段能夠整齊地連接起來;去除產(chǎn)生自交的內(nèi)點(diǎn),避免生成的平行線出現(xiàn)交錯(cuò)、斷 開或自交的情況。綜上所述,依據(jù)本申請(qǐng)生成各條道路的平行線,可以使得繪制的平行線更加合理、準(zhǔn)確和美觀。
對(duì)于方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請(qǐng)并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請(qǐng),某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請(qǐng)所必須的。參考圖12,其示出了本申請(qǐng)的一種路網(wǎng)中平行線的生成裝置實(shí)施例的結(jié)構(gòu)框圖,具體可以包括以下模塊:連續(xù)折線生成模塊201,用于在二維地圖網(wǎng)格中,針對(duì)每條道路,利用廣度優(yōu)先搜索該道路的每一條線段,并將搜索到的線段組成道路對(duì)應(yīng)的連續(xù)折線;抽稀判斷模塊202,用于判斷所述道路對(duì)應(yīng)的連續(xù)折線的節(jié)點(diǎn)是否需要抽稀,若是,則執(zhí)行抽稀模塊和連接關(guān)系建立模塊,若否,則執(zhí)行連接關(guān)系建立模塊;抽稀模塊203,用于按照所述抽稀參數(shù)進(jìn)行抽稀操作;連接關(guān)系建立模塊204,用于建立折線之間的連接關(guān)系;內(nèi)點(diǎn)生成模塊205,用于在相鄰線段之間利用角平分線法,生成相鄰線段的鄰接點(diǎn)在相應(yīng)的平行線上的內(nèi)點(diǎn);端點(diǎn)生成模塊206,用于生成該道路的起點(diǎn)和終點(diǎn)在相應(yīng)平行線上的端點(diǎn);自交點(diǎn)去除模塊207,用于判斷所述內(nèi)點(diǎn)中是否存在產(chǎn)生自交的內(nèi)點(diǎn),若存在,則去除產(chǎn)生自交的內(nèi)點(diǎn);平行線生成模塊208,用于依次連接所述平行線去除自交內(nèi)點(diǎn)后剩余的內(nèi)點(diǎn)和端點(diǎn),得到該道路在路網(wǎng)中的平行線。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述連續(xù)折線生成模塊可以包括:離散折線搜索子模塊,用于在二維地圖網(wǎng)格的各個(gè)網(wǎng)格中是否存在離散折線;廣度優(yōu)先搜索子模塊,用于若某一網(wǎng)格存在離散折線,搜索與該網(wǎng)格相鄰的網(wǎng)格,找到與該離散折線存在連接關(guān)系的折線,并與該離散折線組成新的折線,直至所述新的折線為連續(xù)折線。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述抽稀判斷模塊可以包括:距離判斷模塊,用于判斷預(yù)設(shè)平行線間距離是否大于所述連續(xù)折線中所有線段的平均長(zhǎng)度。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述抽稀模塊可以包括:子模塊1,用于計(jì)算所述連續(xù)折線的起點(diǎn)與當(dāng)前節(jié)點(diǎn)間的距離,并把該距離作為累計(jì)長(zhǎng)度,所述當(dāng)前節(jié)點(diǎn)為所述起點(diǎn)的后繼節(jié)點(diǎn);子模塊2,用于若所述累計(jì)長(zhǎng)度小于抽稀參數(shù),則把當(dāng)前節(jié)點(diǎn)的作為預(yù)刪除節(jié)點(diǎn),并把當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)作為新的當(dāng)前節(jié)點(diǎn),并執(zhí)行子模塊3,若所述累計(jì)長(zhǎng)度大于等于抽稀參數(shù),并執(zhí)行子模塊4;子模塊3,用于若否計(jì)算新的當(dāng)前節(jié)點(diǎn)與其節(jié)點(diǎn)之間的距離,加入到累積長(zhǎng)度中,并執(zhí)行子模塊2 ;子模塊4,用于把累積長(zhǎng)度置為0,并刪除所有預(yù)刪除節(jié)點(diǎn),判斷當(dāng)前節(jié)點(diǎn)是否為所述連續(xù)折線的終點(diǎn),若否,則計(jì)算當(dāng)前節(jié)點(diǎn)與節(jié)點(diǎn)的距離作為累積長(zhǎng)度,返回子模塊2,若是,則結(jié)束抽稀操作。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述連接關(guān)系建立模塊可以包括:
節(jié)點(diǎn)數(shù)據(jù)庫預(yù)置子模塊,用于預(yù)置節(jié)點(diǎn)數(shù)據(jù)庫,所述節(jié)點(diǎn)數(shù)據(jù)庫包括節(jié)點(diǎn)和與該節(jié)點(diǎn)相連接的折線編號(hào)子數(shù)據(jù)庫,所述節(jié)點(diǎn)包括節(jié)點(diǎn)編號(hào),節(jié)點(diǎn)坐標(biāo);起點(diǎn)查找子模塊,用于針對(duì)所述的每個(gè)折線,在節(jié)點(diǎn)數(shù)據(jù)庫中查找是否存在該折線的起點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則把該折線的起點(diǎn)的節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫;第一線段編號(hào)插入子模塊,用于將該折線的折線編號(hào)插入到起點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫;終點(diǎn)查找子模塊,用于在節(jié)點(diǎn)數(shù)據(jù)庫中查找是否存在該折線的終點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則把該折線的終點(diǎn)的節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫;第二線段編號(hào)插入子模塊,用于將該線段的線段編號(hào)插入到終點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述內(nèi)點(diǎn)生成模塊可以包括:角平分線生成子模塊,用于尋找各線段的相鄰線段,在相鄰線段之間做角平分線.
內(nèi)點(diǎn)獲取子模塊,用于取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為相應(yīng)的平行線的內(nèi)點(diǎn)。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述端點(diǎn)生成模塊可以包括:連接關(guān)系判斷子模塊,用于判斷所述起點(diǎn)和終點(diǎn)是否與其它線段無連接關(guān)系;第一端點(diǎn)獲取子模塊,用于若是,則取起點(diǎn)或終點(diǎn)所在線段的法向上到該點(diǎn)距離為所設(shè)定平行線距離的點(diǎn),為相應(yīng)的平行線上的端點(diǎn);第二端點(diǎn)獲取子模塊,用于若否,則將存在連接關(guān)系的線段按照向量角從小到大進(jìn)行排序,在相鄰線段間做角平分線,取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為所述起點(diǎn)或終點(diǎn)在平行線上的端點(diǎn)。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述自交點(diǎn)去除模塊可以包括:平行線獲取子模塊,用于依次連接平行線的內(nèi)點(diǎn)和端點(diǎn)得到各道路的平行線;內(nèi)交點(diǎn)判斷子模塊,用于依次判斷所述各道路的平行線的各線段,與原線段的夾角是否大于預(yù)設(shè)角度,若是,則刪除該線段的終點(diǎn)。由于所述裝置實(shí)施例基本相應(yīng)于前述圖6所示的方法實(shí)施例,故本實(shí)施例的描述中未詳盡之處,可以參見前述實(shí)施例中的相關(guān)說明,在此就不贅述了。本申請(qǐng)可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如:個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。本申請(qǐng)可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請(qǐng),在這些分布式計(jì)算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。最后,還需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)
備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)......”限定的要素,并不
排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。以上對(duì)本申請(qǐng)所提供的一種路網(wǎng)中平行線的生成方法,以及,一種路網(wǎng)中平行線的生成裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。
權(quán)利要求
1.一種路網(wǎng)中平行線的生成方法,其特征在于,包括: 在二維地圖網(wǎng)格中,針對(duì)每條道路,利用廣度優(yōu)先搜索該道路的每一條線段,并將搜索到的線段組成道路對(duì)應(yīng)的連續(xù)折線; 判斷所述道路對(duì)應(yīng)的連續(xù)折線的節(jié)點(diǎn)是否需要抽稀,若是則按照所述抽稀參數(shù)進(jìn)行抽稀操作,并建立折線之間的連接關(guān)系,若否,則建立折線之間的連接關(guān)系; 在相鄰線段之間利用角平分線法,生成相鄰線段的鄰接點(diǎn)在相應(yīng)的平行線上的內(nèi)點(diǎn); 生成該道路的起點(diǎn)和終點(diǎn)在相應(yīng)平行線上的端點(diǎn); 判斷所述內(nèi)點(diǎn)中是否存在產(chǎn)生自交的內(nèi)點(diǎn),若存在,則去除產(chǎn)生自交的內(nèi)點(diǎn); 依次連接所述平行線去除自交內(nèi)點(diǎn)后剩余的內(nèi)點(diǎn)和端點(diǎn),得到該道路在路網(wǎng)中的平行線。
2.如權(quán)利要求1所述的方法,其特征在于,所述在二維地圖網(wǎng)格中,利用廣度優(yōu)先搜索目標(biāo)道路的每一條線段,并將搜索到的線段組成一條連續(xù)折線的步驟包括: 在二維地圖網(wǎng)格的各個(gè)網(wǎng)格中搜索是否存在離散折線,若某一網(wǎng)格存在離散折線,搜索與該網(wǎng)格相鄰的網(wǎng)格,找到與該離散折線存在連接關(guān)系的折線,并與該離散折線組成新的折線,直至所述新的折線為連續(xù)折線。
3.如權(quán)利要求1所述的方法,其特征在于,所述判斷道路對(duì)應(yīng)的連續(xù)折線的節(jié)點(diǎn)是否需要抽稀的步驟包括: 判斷預(yù)設(shè)平行線間距離是否大于所述連續(xù)折線中所有線段的平均長(zhǎng)度。
4.如權(quán)利要求1所述的方法,其特征在于,所述按照抽稀參數(shù)進(jìn)行抽稀操作的步驟包括: 步驟1、計(jì)算所述連續(xù)折線的起點(diǎn)與當(dāng)前節(jié)點(diǎn)間的距離,并把該距離作為累計(jì)長(zhǎng)度,所述當(dāng)前節(jié)點(diǎn)為所述起點(diǎn)的后繼節(jié)點(diǎn); 步驟2、若所述累計(jì)長(zhǎng)度小于抽稀參數(shù),則把當(dāng)前節(jié)點(diǎn)的作為預(yù)刪除節(jié)點(diǎn),并把當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)作為新的當(dāng)前節(jié)點(diǎn),并執(zhí)行步驟3,若所述累計(jì)長(zhǎng)度大于等于抽稀參數(shù),把當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)作為新的當(dāng)前節(jié)點(diǎn),并執(zhí)行步驟4 ; 步驟3、判斷當(dāng)前節(jié)點(diǎn)是否為所述連續(xù)折線的終點(diǎn),若否,則計(jì)算新的當(dāng)前節(jié)點(diǎn)與其前一節(jié)點(diǎn)之間的距離,加入到累積長(zhǎng)度中,并執(zhí)行步驟2 ; 步驟4、把累積長(zhǎng)度置為O,并刪除所有預(yù)刪除節(jié)點(diǎn),判斷當(dāng)前節(jié)點(diǎn)是否為所述連續(xù)折線的終點(diǎn),若否,則計(jì)算當(dāng)前節(jié)點(diǎn)與其前一節(jié)點(diǎn)的距離作為累積長(zhǎng)度,返回步驟2,若是,則結(jié)束抽稀操作。
5.如權(quán)利要求1所述的方法,其特征在于,所述建立折線之間的連接關(guān)系的步驟包括: 預(yù)置節(jié)點(diǎn)數(shù)據(jù)庫,所述節(jié)點(diǎn)數(shù)據(jù)庫包括節(jié)點(diǎn)和與該節(jié)點(diǎn)相連接的折線編號(hào)子數(shù)據(jù)庫,所述節(jié)點(diǎn)包括節(jié)點(diǎn)編號(hào),節(jié)點(diǎn)坐標(biāo); 針對(duì)所述的每個(gè)折線,在節(jié)點(diǎn)數(shù)據(jù)庫中查找是否存在該折線的起點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則把該折線的起點(diǎn)的節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫; 將該折線的折線編號(hào)插入到起點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫; 在節(jié)點(diǎn)數(shù)據(jù)庫中查找是否存在該折線的終點(diǎn)的節(jié)點(diǎn)編號(hào),若不存在,則把該折線的終點(diǎn)的節(jié)點(diǎn)編號(hào)和節(jié)點(diǎn)坐標(biāo)插入到節(jié)點(diǎn)數(shù)據(jù)庫; 將該折線的折線編號(hào)插入到終點(diǎn)的相連接的折線編號(hào)子數(shù)據(jù)庫。
6.如權(quán)利要求1所述的方法,其特征在于,所述在相鄰線段之間利用角平分線法,生成相鄰線段的鄰接點(diǎn)在相應(yīng)的平行線上的內(nèi)點(diǎn)的步驟包括: 尋找各線段的相鄰線段,在相鄰線段之間做角平分線; 取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為相應(yīng)的平行線的內(nèi)點(diǎn)。
7.如權(quán)利要求1所述的方法,其特征在于,所述生成該道路的起點(diǎn)和終點(diǎn)在相應(yīng)平行線上的端點(diǎn)的步驟包括: 判斷所述起點(diǎn)和終點(diǎn)是否與其它線段無連接關(guān)系; 若是,則取起點(diǎn)或終點(diǎn)所在線段的法向上到該點(diǎn)距離為所設(shè)定平行線距離的點(diǎn),為相應(yīng)的平行線上的端點(diǎn); 若否,則將存在連接關(guān)系的線段按照向量角從小到大進(jìn)行排序,在相鄰線段間做角平分線,取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為所述起點(diǎn)或終點(diǎn)在平行線上的端點(diǎn)。
8.如權(quán)利要求1所述的方法,其特征在于,所述去除產(chǎn)生自交的內(nèi)點(diǎn)的步驟包括: 依次連接平行線的內(nèi)點(diǎn)和端點(diǎn)得到各道路的平行線; 依次判斷所述各道路的平行線的各線段,與原線段的夾角是否大于預(yù)設(shè)角度,若是,則刪除該線段的終點(diǎn)。
9.一種路網(wǎng)中平行線的生成裝置,其特征在于,包括: 連續(xù)折線生成模塊,用于在二維地圖網(wǎng)格中,針對(duì)每條道路,利用廣度優(yōu)先搜索該道路的每一條線段,并將搜索到的線段組成道路對(duì)應(yīng)的連續(xù)折線; 抽稀判斷模塊,用于判斷所述道路對(duì)應(yīng)的連續(xù)折線的節(jié)點(diǎn)是否需要抽稀,若是,則執(zhí)行抽稀模塊和連接關(guān)系建立模塊,若否,則執(zhí)行連接關(guān)系建立模塊; 抽稀模塊,用于按照所述抽稀參數(shù)進(jìn)行抽稀操作; 連接關(guān)系建立模塊,用于建立折線之間的連接關(guān)系; 內(nèi)點(diǎn)生成模塊,用于在相鄰線段之間利用角平分線法,生成相鄰線段的鄰接點(diǎn)在相應(yīng)的平行線上的內(nèi)點(diǎn); 端點(diǎn)生成模塊,用于生成該道路的起點(diǎn)和終點(diǎn)在相應(yīng)平行線上的端點(diǎn); 自交點(diǎn)去除模塊,用于判斷所述內(nèi)點(diǎn)中是否存在產(chǎn)生自交的內(nèi)點(diǎn),若存在,則去除產(chǎn)生自交的內(nèi)點(diǎn); 平行線生成模塊,用于依次連接所述平行線去除自交內(nèi)點(diǎn)后剩余的內(nèi)點(diǎn)和端點(diǎn),得到該道路在路網(wǎng)中的平行線。
10.如權(quán)利要求9所述的裝置,其特征在于,所述內(nèi)點(diǎn)生成模塊包括: 角平分線生成子模塊,用于尋找各線段的相鄰線段,在相鄰線段之間做角平分線; 內(nèi)點(diǎn)獲取子模塊,用于取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為相應(yīng)的平行線的內(nèi)點(diǎn); 所述端點(diǎn)生成模塊包括: 連接關(guān)系判斷子模塊,用于判斷所述起點(diǎn)和終點(diǎn)是否與其它線段無連接關(guān)系; 第一端點(diǎn)獲取子模塊,用于若是,則取起點(diǎn)或終點(diǎn)所在線段的法向上到該點(diǎn)距離為所設(shè)定平行線距離的點(diǎn),為相應(yīng)的平行線上的端點(diǎn); 第二端點(diǎn)獲取子模塊,用于若否,則將存在連接關(guān)系的線段按照向量角從小到大進(jìn)行排序,在相鄰線段間做角平分線,取角平分線上與相鄰線段距離為預(yù)設(shè)平行線間距離的點(diǎn),作為所述起點(diǎn)或終點(diǎn)在平 行線上的端點(diǎn)。
全文摘要
本申請(qǐng)?zhí)峁┝艘环N路網(wǎng)中平行線的生成方法及裝置。依據(jù)本申請(qǐng),針對(duì)復(fù)雜路網(wǎng),生成每條道路的連續(xù)折線,避免了繪制的平行線可能會(huì)出現(xiàn)交錯(cuò)或斷開的情況;對(duì)折線的節(jié)點(diǎn)進(jìn)行抽稀刪除折線中比較短的一些線段,優(yōu)化原始折線的質(zhì)量,使得生成的平行線簡(jiǎn)潔、美觀,同時(shí)也避免了一部分自交點(diǎn)的產(chǎn)生;依據(jù)角平分線法生平行線的內(nèi)點(diǎn)解決了線段的交匯點(diǎn)互相交錯(cuò)的問題,使線段能夠整齊地連接起來;去除產(chǎn)生自交的內(nèi)點(diǎn),避免生成的平行線出現(xiàn)交錯(cuò)、斷開或自交的情況。綜上所述,依據(jù)本申請(qǐng)生成各條道路的平行線,可以使得繪制的平行線更加合理、準(zhǔn)確和美觀。
文檔編號(hào)G06F17/30GK103177034SQ20111044040
公開日2013年6月26日 申請(qǐng)日期2011年12月23日 優(yōu)先權(quán)日2011年12月23日
發(fā)明者武繼銀, 張志平, 周雙全, 夏曙東 申請(qǐng)人:上海優(yōu)途信息科技有限公司