余章蓉,王友昆,董國橋
(1.昆明理工大學津橋?qū)W院,云南 昆明 650106; 2.武漢大學測繪學院,湖北 武漢 430079;3.昆明市測繪研究院,云南 昆明 650051)
AutoCAD的dwg格式的圖件在工程規(guī)劃、設計、建設中應用廣泛。坐標標注是工程設計圖、審批圖、竣工圖等工程圖件繪制中常用的功能,其目的是將重要位置的坐標醒目地顯示在圖紙上,便于識圖者使用[1]。AutoCAD自帶命令可以實現(xiàn)圖件平面坐標的快速標注,一些學者基于AutoCAD平臺也研究開發(fā)一些快速標注的插件[2~4]。對于測繪成果圖件的坐標標注,除了標注平面坐標外,有時還需要標注地理坐標,甚至需要標注該點的其他坐標系的坐標成果?;诘乩碜鴺说臉俗?,部分學者也做了相應的研究工作[5],但對于標注其他坐標系成果的研究較少。傳統(tǒng)的方式是先利用坐標轉(zhuǎn)換工具將需要標注的位置坐標進行轉(zhuǎn)換,然后利用坐標標注工具將轉(zhuǎn)換的文本內(nèi)容標注在圖件中[6]。這種方法不但工序煩瑣,而且容易出錯。本文將坐標轉(zhuǎn)換的功能集成在坐標標注模塊之中,將坐標轉(zhuǎn)換和坐標標注有機結(jié)合,同時將轉(zhuǎn)換參數(shù)加密存儲于加密狗中達到保密的效果,系統(tǒng)在多個規(guī)劃建設項目中得到了應用,大大提高了坐標標注的效率。
圖件標注一般是將圖件關鍵位置的平面坐標標注在圖上,也有標注地理坐標的需求。針對一些特殊要求,需要在同一圖件中標注該位置的其他坐標系成果坐標。一般的CAD圖件均為平面坐標系,標注平面坐標時可直接獲取圖件位置的坐標值進行標注。當要標注地理坐標時,需要將獲取的圖件平面坐標通過高斯反算為經(jīng)緯度值后再標注。當需要標注其他坐標系成果坐標時,需要先將獲取的圖件坐標值進行坐標轉(zhuǎn)換,然后標注轉(zhuǎn)換后的坐標值。
為了實現(xiàn)AutoCAD平臺下同一坐標系成果圖件的不同坐標系成果的坐標標注功能,標注系統(tǒng)采用Visual Studio 2012開發(fā)平臺和C#語言開發(fā),利用AutoCAD ObjectARX .NET技術實現(xiàn)AutoCAD標注點獲取和視窗操作的交互,基于加密狗實現(xiàn)坐標轉(zhuǎn)換參數(shù)的存儲、調(diào)用及坐標轉(zhuǎn)換等功能,搭建開發(fā)多坐標系成果坐標動態(tài)標注系統(tǒng)。系統(tǒng)主要包括系統(tǒng)設置、坐標點選擇、坐標轉(zhuǎn)換、高斯反算、坐標標注等步驟,如圖1所示。
(1)系統(tǒng)設置,對成果的坐標標注類型和是否需要坐標轉(zhuǎn)換進行設置。
(2)坐標點選擇,通過AutoCAD的互操作選擇需要標注的源坐標點位置,其平面坐標記為(x,y)j。
(3)坐標轉(zhuǎn)換,如果標注的坐標需要坐標轉(zhuǎn)換則根據(jù)系統(tǒng)設置,自動判斷后調(diào)用對應的函數(shù)進行坐標轉(zhuǎn)換,轉(zhuǎn)換后的目標平面坐標記為(x,y)k。
(4)高斯反算,如果坐標標注類型為地理坐標,設置橢球參數(shù),將(x,y)k高斯反算為(B,L)k。
(5)坐標標注,按照設置的標注樣式,將坐標值(x,y)k或(B,L)k標注圖元添加到圖形中。
(1)系統(tǒng)設置
參數(shù)設置主要實現(xiàn)對成果圖件的標注類型和坐標轉(zhuǎn)換參數(shù)進行設置。標注類型是設置標注平面坐標或標注地理坐標。如果需要進行坐標轉(zhuǎn)換,需要對轉(zhuǎn)換區(qū)域、源坐標名稱和目標坐標名稱進行設置,以便后續(xù)調(diào)用相應的轉(zhuǎn)換參數(shù)進行坐標轉(zhuǎn)換。設置示意圖如圖2所示。
圖2 系統(tǒng)設置
(2)坐標轉(zhuǎn)換
坐標轉(zhuǎn)換主要以平面四參數(shù)模型實現(xiàn)源坐標轉(zhuǎn)換為目標坐標。平面四參數(shù)模型為相似變換模型[7],模型包括2個坐標平移參數(shù)△x/△y,1個尺度參數(shù)m,1個角度旋轉(zhuǎn)參數(shù)α,轉(zhuǎn)換關系如式(1)。
(1)
式中(xj,yj)為轉(zhuǎn)換前源坐標,(xk,yk)為轉(zhuǎn)換后目標坐標,a=mcosα,b=msinα
坐標轉(zhuǎn)換計算方法簡單,將4個參數(shù)及源坐標帶入式(1)即可計算出目標坐標。為提高用戶體驗,用戶只需選擇轉(zhuǎn)換區(qū)域、源坐標名稱、目標坐標名稱,程序自動根據(jù)用戶選擇通過索引的方式調(diào)用轉(zhuǎn)換參數(shù),實現(xiàn)坐標的自動轉(zhuǎn)換,坐標轉(zhuǎn)換流程如圖3所示。
為保證轉(zhuǎn)換參數(shù)不被泄密,轉(zhuǎn)換參數(shù)用戶是不可見的,轉(zhuǎn)換參數(shù)加密后存儲于加密狗[8~10]。通過加密狗唯一的硬件ID進行識別,確保標注程序同加密狗對應。同時,采用加密狗自帶的RSA非對稱算法[11~13],利用公鑰和私鑰分別實現(xiàn)轉(zhuǎn)換參數(shù)的加密和解密。為降低坐標轉(zhuǎn)換的精度,可將坐標混淆及坐標轉(zhuǎn)換的代碼‘移植’到加密狗內(nèi),極大地提高保密性。
圖3 坐標轉(zhuǎn)換流程
當標注坐標為地理坐標時,需要先采用高斯反算將高斯投影平面直角坐標(x,y)轉(zhuǎn)換為大地坐標(B,L)后標注,一般采用迭代法計算[14]。
(3)標注樣式
通過圖元的標注樣式設置,用戶可以標注出符合不同出圖要求的標注圖元。平面坐標標注和地理坐標標注的標注樣式設置,均包括標注圖層、箭頭樣式、文字樣式、字體大小、小數(shù)位、坐標前綴等內(nèi)容。標注圖層、箭頭樣式、文字樣式列表框,由程序讀取圖形全部圖層名稱、箭頭樣式、文字樣式至列表框,供用戶選擇設置。坐標前綴可以增加坐標的前綴符,如平面坐標可加入“X=”、“Y=”前綴符。
平面坐標標注的樣式設置如圖4所示,可以設置坐標的比例,如可以將米為單位的坐標放大1 000倍以毫米為單位標注。此外,還可以標注圖元的高程,并可互換X/Y的坐標位置。
圖4 平面坐標標注樣式設置
地理坐標標注的樣式設置,比平面坐標標注多了橢球參數(shù)設置和角度格式樣式的設置,橢球參數(shù)的中央經(jīng)線及橢球定義用于高斯反算,角度格式用于設置標注的經(jīng)度和緯度的,如圖5所示。
圖5 地理坐標標注樣式設置
(4)動態(tài)標注
AutoCAD ObjectARX .NET提供的JIG(Just in Time Graphic 即時繪圖)技術可以實現(xiàn)動態(tài)標注[15],通過標注過程的交互操作,用戶在標注過程中可以預覽標注結(jié)果,大大提高了用戶的體驗效果。基于本文的需求,如圖6所示,其實現(xiàn)的交互過程如下:
①用戶點擊需要標注的P1點。
②程序獲取點坐標,根據(jù)系統(tǒng)設置將該坐標轉(zhuǎn)換后將標注的內(nèi)容傳入JIG類。
③鼠標移動,程序獲取鼠標的臨時點P2坐標,JIG類根據(jù)P1和P2點的位置將箭頭、橫線、標注文字等圖元臨時繪制出來,繪制的結(jié)果隨用戶的鼠標位置動態(tài)移動。
④用戶鼠標在P3位置處點擊確認后,程序?qū)俗D元添加至圖形,結(jié)束命令。
圖6 動態(tài)標注示意圖
動態(tài)標注的核心是對ObjectARX .NET提供的EntityJig類和DrawJig類進行繼承重寫[16],不同之處在于EntityJig只能操作單個圖元,DrawJig可以操作多個圖元。由于標注的圖元至少有4個,加上高程則有5個圖元,因此采用繼承DrawJig類來實現(xiàn)動態(tài)標注。繼承DrawJig類,重寫類的Sampler和WorldDraw函數(shù)即可。Sampler用于獲取用戶命令(鼠標)狀態(tài),判斷鼠標是否點擊第二個點,如果沒有則調(diào)用WorldDraw用于繪制動態(tài)的圖元,如果點擊了第二個點則將圖元繪制添加到圖形中。
以昆明市長水機場遮蔽角及障礙物測量項目為例,1∶500地形圖采用城市獨立坐標系測制,圖件需要標注城市獨立坐標系平面坐標、長水機場AB坐標系平面坐標、1954北京坐標系地理坐標。首先,第一次坐標標注前需要進行系統(tǒng)設置,也可在標注過程中重新設置。
長水機場AB坐標系平面坐標需要經(jīng)過坐標轉(zhuǎn)換后標注,因此標注類型勾選“標注XY”、坐標轉(zhuǎn)換勾選“是否轉(zhuǎn)換”,并設置源坐標和目標坐標,如圖7所示。城市獨立坐標系平面坐標可根據(jù)獲取的圖件坐標直接標注,因此不用勾選“是否轉(zhuǎn)換”。1954北京坐標系地理坐標需要坐標轉(zhuǎn)換和高斯反算后標注,標注類型勾選“標注BL”,目標坐標選擇1954北京坐標系。
圖7 機場AB平面坐標系標注設置
點擊確定后,如果需要坐標轉(zhuǎn)換,程序根據(jù)源坐標和目標坐標名稱自動索引存放于加密狗內(nèi)對應的轉(zhuǎn)換參數(shù),將獲取的坐標進行轉(zhuǎn)換。為查看不同標注樣式的標注效果,城市獨立坐標系采用空心箭頭、兩位小數(shù)進行標注,機場AB坐標系采用無箭頭、三位小數(shù)、前綴A/B標識、高程進行標注,1954北京坐標系采用實心箭頭、一位小數(shù)、前綴B/L、‘°′″’角度格式進行標注,結(jié)果如圖8所示。
圖8 坐標標注實例示意圖
本文將坐標轉(zhuǎn)換和動態(tài)標注有機結(jié)合,實現(xiàn)了不同坐標系成果坐標在同一圖件中標注的應用需求?;诩用芄返陌踩院途庉嬓?,實現(xiàn)了軟件的保護、轉(zhuǎn)換參數(shù)存儲和坐標轉(zhuǎn)換過程的保密。同時,基于即時繪圖(JIG)技術,實現(xiàn)了動態(tài)標注。系統(tǒng)操作簡便、功能齊全,減少了獨立坐標轉(zhuǎn)換的環(huán)節(jié),極大地提高了坐標標注效率。