淺談測繪內(nèi)業(yè)中的等高線批量自動(dòng)連接處理_第1頁
淺談測繪內(nèi)業(yè)中的等高線批量自動(dòng)連接處理_第2頁
淺談測繪內(nèi)業(yè)中的等高線批量自動(dòng)連接處理_第3頁
淺談測繪內(nèi)業(yè)中的等高線批量自動(dòng)連接處理_第4頁
淺談測繪內(nèi)業(yè)中的等高線批量自動(dòng)連接處理_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

淺談測繪內(nèi)業(yè)中的等高線批量自動(dòng)連接處理摘要:針對AutoCAD環(huán)境下,測繪內(nèi)業(yè)工作中等高線在遇到高程注記、沖溝、陡坎等地貌符號時(shí)產(chǎn)生的斷裂問題,利用VBA編制宏命令,以一種人機(jī)交互的方式實(shí)現(xiàn)斷裂等高線的批量自動(dòng)連接處理,極大地提高了工作效率。關(guān)鍵詞:等高線;連接;VBA在測繪內(nèi)業(yè)的工作中,需要對地圖中的地理要素如:高程注記、獨(dú)立房屋、等高線等進(jìn)行處理和提取,而等高線在地圖中占有非常重要的位置,是對地形進(jìn)行分析的關(guān)鍵,故對等高線的處理是測繪內(nèi)業(yè)工作的首要任務(wù)。理想的等高線應(yīng)該是完整的閉合曲線,但是為了出圖的需要,等高線在遇到高程注記、沖溝、陡坎等地貌符號時(shí)會(huì)產(chǎn)生斷裂(如圖1所示)。為了得到完整的等高線,必須將這些被打斷的各個(gè)部分連接起來,以便之后生成圖形的數(shù)字高程模型(DEM)并進(jìn)行各種分析操作。目前斷點(diǎn)的處理方法主要有基于形態(tài)變換的斷線連接、顧及拓?fù)潢P(guān)系的連接方法,基于先驗(yàn)知識的解決方法等,對于不同的斷裂原因采用不同的方法進(jìn)行處理,更具有針對性。根據(jù)本次作業(yè)處理的實(shí)際情況,提出了選取兩組等高線自動(dòng)進(jìn)行批量連接的方法,不僅針對性強(qiáng)而且方便可行,高效地處理了工作中所遇到的問題。1、程序設(shè)計(jì)思路正常情況下等高線是有高程的,這種情況處理起來比較簡單,以高程為依據(jù)把高程相等的等高線進(jìn)行連接就可以了,程序的實(shí)現(xiàn)也簡單易行。但在實(shí)際工作中有時(shí)由于只注意等高線的平面位置,忽視高程的存在,造成了一些圖中等高線沒有高程或者高程都為零的現(xiàn)象,這樣處理起來就比較復(fù)雜。本次設(shè)計(jì)針對這種情況進(jìn)行處理。(1)畫兩條輔助線用欄選方式找到與這兩條輔助線相交的兩組需要連接的等高線,對每組等高線根據(jù)其交點(diǎn)與輔助線起點(diǎn)的距離確定兩組等高線中應(yīng)互相連接的兩條線;(2)對這兩條線根據(jù)它們端點(diǎn)的遠(yuǎn)近距離進(jìn)行判斷,把距離最近的兩點(diǎn)進(jìn)行連接(如圖2所示)。采用這種判斷依據(jù)的原因是:處理的斷裂等高線中,并不都是頭尾相連的,有些是頭頭相連或尾尾相連的,只能根據(jù)端點(diǎn)距離的遠(yuǎn)近確定要連接的兩點(diǎn)。在本次程序設(shè)計(jì)中需要處理的等高線有兩種線型,分別是2維多段線LWPOLYLINE和3維多段線POLY-LINE,處理方法大致相同,下面分別進(jìn)行介紹。2、等高線的連接處理AutoCAD圖形中每個(gè)圖元實(shí)體都有一個(gè)屬性集,用于記錄該圖元實(shí)體的各種屬性。修改圖形中的文字屬性,如圖層、樣式、顏色等,實(shí)際上是改變文字圖元實(shí)體的屬性集。要改變圖元實(shí)體,首先要選擇圖元實(shí)體,形成圖元實(shí)體選擇集。提示用戶在圖形窗口中選擇實(shí)體,用Utility對象的GetPoint方法獲取鼠標(biāo)按下的兩點(diǎn),并通過這兩點(diǎn)畫一條輔助線line1:p11=ThisDrawing.Utility.GetPoint(,"輸入第一條線的第一點(diǎn):")p12=ThisDrawing.Utility.GetPoint(p1,"輸入第一條線的第二點(diǎn):")Setline1=ThisDrawing.ModelSpace.AddLine(p11,p12)用同樣的方法畫第二條輔助線line2確定其兩個(gè)端點(diǎn)p21、p22,分別創(chuàng)建兩個(gè)選擇集:SetssetObj1=ThisDrawing.SelectionSets.Add("ss1")SetssetObj2=ThisDrawing.SelectionSets.Add("ss2")由于地圖中不僅僅只包括等高線還有很多其他的地理要素,如鐵路、房屋等,在畫輔助線的過程中可能會(huì)包含別的地理要素和要處理的等高線無關(guān),所以要對選擇集進(jìn)行過濾處理,將符合條件的等高線放置到創(chuàng)建的結(jié)果集中,代碼如下:gpCode(0)=0dataValue(0)="LWPOLYLINE"'確定等高線的線型gpCode(1)=8dataValue(1)="E"'確定等高線所在的圖層gpCode(2)=62dataValue(2)=7'確定繪制的等高線顏色groupCode=gpCodedataCode=dataValuemode=acSelectionSetFence'確定選擇方式為欄選把符合條件的線加入到選擇集中,其中points為數(shù)組,分別存放了p11、p12點(diǎn)的坐標(biāo)及p21、p22點(diǎn)的坐標(biāo):ssetObj1.SelectByPolygonmode,points,groupCode,dataCodessetObj2.SelectByPolygonmode,points,groupCode,dataCode將已選中的等高線高亮顯示并刷新:ssetObj1.HighlightTruessetObj1.Update在人為選擇的過程中可能出現(xiàn)兩個(gè)選擇集中的等高線數(shù)量不一致,遇到這種情況以數(shù)量少的為準(zhǔn)進(jìn)行連接:IfssetObj1.Count>ssetObj2.CountTheniCount=ssetObj2.CountElseiCount=ssetObj1.CountEndIf兩個(gè)選擇集中分別存放有很多條等高線,按照等高線在選擇集中的存放次序分別找到互相匹配的兩條線。每條等高線都有兩個(gè)端點(diǎn),不僅要確定哪兩條線是需要連接的,還要確定這兩條線的哪兩個(gè)點(diǎn)需要連接,具體辦法是用兩點(diǎn)間的距離公式求出與距離最近的點(diǎn),這兩個(gè)點(diǎn)就是要連接的點(diǎn)?;谏鲜鏊枷?首先找到兩條等高線的4個(gè)端點(diǎn):ps1=plineLW1.Coordinate(0)pe1=plineLW1.Coordinate(n1-1)ps2=plineLW2.Coordinate(0)pe2=plineLW2.Coordinate(n2-1)計(jì)算距離:dist1=Sqr((ps1(0)-pe2(0))^2+(ps1(1)-pe2(1))^2)dist2=Sqr((ps1(0)-ps2(0))^2+(ps1(1)-ps2(1))^2)dist3=Sqr((pe1(0)-ps2(0))^2+(pe1(1)-ps2(1))^2)dist4=Sqr((pe1(0)-pe2(0))^2+(pe1(1)-pe2(1))^2)找到四個(gè)距離的最小值,每一段最小距離代表了圖中4種不同的情況:當(dāng)dist1為最小時(shí),說明第一條等高線應(yīng)接于第二條等高線之后,用AddVertex方法插入節(jié)點(diǎn),在plineLW2的末端點(diǎn)后增加一個(gè)節(jié)點(diǎn)將plineLW1上的節(jié)點(diǎn)逐一插入進(jìn)來,這樣就實(shí)現(xiàn)了plineLW2與plineLW1的連接,實(shí)際是從增加的節(jié)點(diǎn)開始按照plineLW1各節(jié)點(diǎn)所在的位置將plineLW1重新畫了一遍。畫好后改變一下顏色,并將原來被重畫的線刪除。具體代碼如下:Fork=0Ton1-1index=(UBound(plineLW2.Coordinates)+1)/2plineLW2.AddVertexindex,plineLW1.Coordinate(k)Next其中,n1是plineLW1上節(jié)點(diǎn)的個(gè)數(shù),index是plineLW2上節(jié)點(diǎn)的個(gè)數(shù)。UBound確定數(shù)組的最大下標(biāo),由于是2維多段線,數(shù)組的坐標(biāo)又是從零開始計(jì)算的,故要得到等高線上節(jié)點(diǎn)的個(gè)數(shù)n,需要將UBound取得的數(shù)值加1并除以2。當(dāng)dist2為最小時(shí),說明兩條等高線的起點(diǎn)相距最近,由于AddVertex方法不能在起點(diǎn)插入節(jié)點(diǎn),故需要將其中一條線按照反方向重畫一遍,然后將另一條線的各節(jié)點(diǎn)插入到這條新畫的線中,改變新畫線的顏色,并將原來被重畫的兩條線都刪除掉。j=0Fork=n1-1To0Step-1p=plineLW1.Coordinate(k)point(j*2)=p(0):point(j*2+1)=p(1)j=j+1NextSetplLW1=ThisDrawing.ModelSpace.AddLight-WeightPolyline(point)plLW1.layer="E"……當(dāng)dist3為最小時(shí),說明第二條等高線應(yīng)接于第一條等高線之后,這種情況可以從plineLW1末端點(diǎn)開始逐一將plineLW2上各節(jié)點(diǎn)插入進(jìn)來。最后將plineLW2刪除。當(dāng)dist4為最小時(shí),兩條等高線的末端點(diǎn)相距最近,這時(shí)可將第二條等高線接于第一條等高線之后,也可將第一條等高線接于第二條等高線之后。AddVertex方法在加節(jié)點(diǎn)的過程中對節(jié)點(diǎn)的添加順序沒有要求,也就是說先加被連接等高線的起點(diǎn)與先加被連接等高線的末端點(diǎn)可以達(dá)到相同的效果。最后將被連接的那條等高線刪除。在做完前面4種情況的處理后,便完成了2維等高線的連接,連接后的效果如圖3所示。圖3連接處理后的等高線圖需要說明的是:在計(jì)算機(jī)屏幕上看到的只是一個(gè)圖幅的某一部分,所以在地圖中屏幕可見的區(qū)域里選擇等高線的時(shí)候,在地圖中屏幕不可見的區(qū)域里可能會(huì)有距離更近的兩點(diǎn)存在,如圖4-1所示。假設(shè)圖中框內(nèi)為不可見區(qū)域,那么在可見區(qū)域選擇兩條需要連接的等高線時(shí),會(huì)發(fā)現(xiàn)連接后的效果如圖4-2所示。本程序自動(dòng)找到兩條等高線距離最近的兩個(gè)端點(diǎn),使它們即使在不可見的區(qū)域也同樣被連接起來,這樣省去了調(diào)整地圖屏幕可見區(qū)域范圍的麻煩。再一次運(yùn)行程序就會(huì)將可見區(qū)域未連接的等高線連起來。以上處理的是圖幅內(nèi)不閉合等高線的情況,如果是處理圖幅內(nèi)閉合的等高線,那么兩個(gè)選擇集所選擇的就是同一條或同一組等高線。由于同一條等高線具有相同的句柄,可以以句柄屬性作為判斷條件,再把它們的起點(diǎn)用AddVertex方法插入到末端點(diǎn)處,用plineLW1.AddVer-texindex,plineLW2.Coordinate(0)來完成等高線的閉合。圖4-1處理前效果圖圖4-2處理后效果圖3、多段線的連接處理以上詳細(xì)介紹了2維多段線的處理方法,3維多段線和2維多段線在處理方式上有很多相同點(diǎn),但也有部分區(qū)別。首先,在做過濾的時(shí)候需要確定為3維多段線的線型。其次,Polyline上的每個(gè)節(jié)點(diǎn)都有x、y、z三個(gè)方向的坐標(biāo),而LWPolyline上的每個(gè)節(jié)點(diǎn)只有x、y兩個(gè)方向坐標(biāo)。故在處理Polyline線型的等高線時(shí)要將Ubound取得的數(shù)值加1上并除以3。n=(UBound(pline3d.Coordi-nates)+1)/3。最后需要說明的是3維多段線沒有ad-dVertex方法,取而代之的是AppendVertex,同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論