李奕潔 侯金波 朱俊鵬
【摘 要】地面沉降是我市普遍且大面積存在的,小范圍內(nèi)可以認(rèn)為沉降速度是相同的。據(jù)此,小范圍內(nèi)可以批量修改地形圖的高程點(diǎn)屬性和注記。此外,還針對舊的地形圖曾人工修改數(shù)次,往往存在注記與高程點(diǎn)屬性不一致現(xiàn)象。我們通過該程序省略大量人工重復(fù)性工作,批量矯正注記與高程點(diǎn)屬性不一致。
【關(guān)鍵詞】高程點(diǎn)屬性;注記;矯正一致性;批量修改
1 引言
研究意義
因此,隨著高程年代的啟用,舊的地形圖上的的高程點(diǎn)的屬性值以及高程注記值需要隨著不同高程年代的啟用也需要批量的隨之改變。并且保證高程注記與高程點(diǎn)的擴(kuò)展屬性值一致。
由于需要改的高程點(diǎn)和高程注記比較多,一般采用的方法就是手工一個一個的改,這樣修改工作量比較大。并且容易漏改或者容易造成高程注記和高程點(diǎn)的擴(kuò)展屬性值的部分漏改造成注記及高程點(diǎn)屬性值不一致的錯誤
生產(chǎn)中通常是手工修改,工作量比較大。由于在生產(chǎn)工作中為了工作方便,有些生產(chǎn)工只是需要高程注記的修改,而有些工作只是需要一部分地形圖,所以造成了:部分地形圖只是改變了高程注記值而沒有改變高程點(diǎn)的屬性值,高程注記與高程值不一致。
2開發(fā)平臺和開發(fā)語言的選擇
ObjectArx是一種嶄新的開發(fā)AutoCAD應(yīng)用程序的工具,以C++為編程語言,采用先進(jìn)的面向?qū)ο蟮木幊淘?,提供可與AutoCAD直接交互的開發(fā)環(huán)境,能使用戶方便快捷地開發(fā)出高效簡潔的Auto CAD應(yīng)用程序。
3目標(biāo)分析
3.1生產(chǎn)中遇到的問題
在實(shí)際生產(chǎn)中,由于以往的人工操作造成現(xiàn)有的圖,出現(xiàn)兩大問題:
(1)工作量大:一副地形圖上往往有上百個無規(guī)則分布的高程點(diǎn)的屬性值和相應(yīng)的高程注記需要修改。
(2)準(zhǔn)確性差:由于數(shù)據(jù)量大,而且分布無規(guī)律,只靠人眼觀察修改會造成很多漏改,和重復(fù)修改,使得高程值偏高或偏低,而且不易被發(fā)現(xiàn);而且一次數(shù)據(jù)修改錯誤,以后每次修改都是在錯誤基礎(chǔ)上修改,錯誤會像多米諾骨牌無限傳遞下去, 造成不易被發(fā)現(xiàn)的連鎖錯誤。
(3)屬性、注記不一致:以前的作業(yè)人員大部分往往只是修改注記值,遺漏了很多屬性值的修改,造成了很多點(diǎn)注記值與屬性值的不一致。 但是隨著數(shù)據(jù)入庫管理的需要,高程點(diǎn)屬性值越來越重要。這一遺留問題也需要及時解決。
4 建立模型(如圖4.1)
圖4.1
5程序設(shè)計
5.1程序設(shè)計
5.11對于高程注記:通過圖層和屬性識別高程注記,根據(jù)用戶輸入高程增加值,批量修改。
5.12對于高程點(diǎn):以高程點(diǎn)為圓心一定范圍內(nèi)查找高程注記,如果高程注記唯一,將高程點(diǎn)屬性按照高程注記值修改高程點(diǎn)屬性。如果不唯一,做一個標(biāo)記,以便人工修改。
5.121遇上的問題:由于每一副地形圖的點(diǎn)和注記的疏密不同,而且點(diǎn)和注記相對距離因每幅圖不同而不同。針對這兩種情況查找范圍應(yīng)該因每幅圖不同而不同,因此我選擇由用戶輸入的辦法。
5.122關(guān)于選區(qū)的選用:由于注記的基點(diǎn)在它的右下角,選用常用的以基點(diǎn)為起點(diǎn)拉一個選框,即使兩實(shí)體距離再進(jìn)也無法被選中,會造成許多實(shí)體的漏選,會需要很多人工補(bǔ)改的工作,造成很多不便。這個程序選用以確定四角點(diǎn)的選區(qū)方法,就會增加選中實(shí)體的概率。
5.13對于高程年代:改過的高程點(diǎn)和注記批量賦予一個新的高程年代并歸在新的圖層里。
5.2界面設(shè)計及代碼
5.21修改注記部分
char adsheight[100];
if (acedGetString(Adesk::kFalse,"\n輸入注記的高程增加值", adsheight)!=RTNORM)
{
for (int i=0;i { ads_name sent; acedSSName(ssname, i, sent); AcDbObjectId idObj; AcDbEntity *pEnt; CString Cstext; Cstext=pText->textString(); double gaochengzhi; double zz; zz=moreheight; gaochengzhi=gaochengzhi+zz; Cstext.Format("%f",gaochengzhi); pText->setTextString(Cstext); pEnt->close(); } 5.22修改高程點(diǎn)部分 以高程點(diǎn)為目標(biāo)篩選高程注記的設(shè)計上還有一定的不足,開始我所如果選用的篩選方法是以高程點(diǎn)為基點(diǎn)為中心拉一個方框。 顯然,注記的基點(diǎn)在它的右下角,即使兩實(shí)體距離再進(jìn)也無法被選中,經(jīng)過同事的即及時指出,我選用了在高程點(diǎn)四規(guī)定一個范圍來進(jìn)行選中,可以部分減少被漏選的高程點(diǎn)。 for (ii=0;ii { CString Cstext; ads_name Lsent; // 遍歷選區(qū)內(nèi)所有實(shí)體 AcDbEntity *pLLEnt; Acad::ErrorStatus { AcDbText*pText; pText=NULL; CString abc=""; abc=pText->textString(); if (pText != NULL) { if (EntString==zhujituceng) { m=m+1; Cstext=pText->textString(); double gaochengzhi; gaochengzhi =atof(Cstext); point3d.z=gaochengzhi; } } } } 致謝 感謝部門領(lǐng)導(dǎo)交給我此項(xiàng)任務(wù)的信任和鼓勵,感謝組里同事給我的時間上支持,感謝測量公司、星際公司的師兄師姐給我的指導(dǎo),感謝空港組同事們在應(yīng)用中給我提出的不足和意見。在此無法一一列舉出所有給過我?guī)椭娜耍4蠹夜ぷ黜樌?/p> 參考文獻(xiàn): [1] ArcGIS VC++語言的開發(fā)幫助. [2]李冠億.深居簡出CAD二次開發(fā)基礎(chǔ).2010 【www.BimCad.org】