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