鄭紅艷 郭海泉 夏鵬
摘要:本文通過對高斯投影中,高斯投影正算、高斯投影反算,高斯投影換帶這三種轉(zhuǎn)換方式的分析,結(jié)合地形圖在AutoCAD中的常用表達方式,以VB.NET為編程語言,編寫了基于AutoCAD的坐標(biāo)轉(zhuǎn)換程序。最后通過實例驗證了轉(zhuǎn)換方法的正確性。
關(guān)鍵詞:高斯投影;正算;反算;換帶;AutoCAD
1.引言
高斯投影,全稱高斯-克呂格投影,是一種等角橫切橢圓柱投影,由高斯于19世紀(jì)20年代擬定,后經(jīng)克呂格進行修改補充得到的一種投影。除1:100萬國際地圖外,我國的基本比例尺地形圖和各種大比例尺工程地形圖均采用高斯投影坐標(biāo)系統(tǒng)測制成圖。
高斯投影沒有角度變形,長度和面積變形也較小,中央經(jīng)線無變形,自中央經(jīng)線向投影帶邊緣變形逐漸變擴大。高斯投影的圖形保持了相似性和某點在各方向上長度比的同一性,同時采用分帶法則,使得各帶之間能夠使用相同的方式進行坐標(biāo)計算,因此高斯投影在世界各國得到了廣泛應(yīng)用。
由于高斯投影存在變形,且離中央子午越遠(yuǎn)變形越大,所以各點的變形是不一致的。當(dāng)中央子午線不一致,需要進行坐標(biāo)轉(zhuǎn)換時,為保存精度的可靠,不能使用AutoCAD自帶的ALIGN(兩點糾正)命令進行轉(zhuǎn)換,只能采用高斯投影換帶進行地形圖坐標(biāo)轉(zhuǎn)換。
2.高斯投影分析
高斯投影計算主要有三種方式:高斯投影正算(以下簡稱正算)、高斯投影反算(以下簡稱反算)、高斯投影換帶計算(以下簡稱換帶)。
2.1高斯投影正算
正算就是將經(jīng)緯度坐標(biāo)轉(zhuǎn)換為高斯平面XY坐標(biāo)的過程,以方便工程應(yīng)用。計算公式如下:
2.3高斯投影換帶計算
換帶計算是正算、反算的引申,其計算過程是將高斯平面XY坐標(biāo)使用原投影參數(shù)先反算為經(jīng)緯度坐標(biāo),然后使用新的投影參數(shù)將經(jīng)緯度坐標(biāo)正算為高斯平面XY坐標(biāo)。
3.高斯投影在AutoCAD實現(xiàn)的關(guān)鍵步驟
地形圖在AutoCAD中進行繪制時,使用的是經(jīng)高斯投影正算后的坐標(biāo)。當(dāng)兩幅地形圖的投影參數(shù)不一致(同一參考橢球)時,就需要進行高斯投影換帶,以保證高斯平面坐標(biāo)的一致性。
3.1建立計算模型
計算包括兩種,即正算模型和反算模型。建立統(tǒng)一的計算模型后,可以保證各個坐標(biāo)點進行計算時,參數(shù)一致。
式(1)為正算模型,式(2)為反算模型。
3.2點對象轉(zhuǎn)換
在AutoCAD中,一般使用塊、形等對象來表示地形圖中的點狀符號。此類對象轉(zhuǎn)換時,只需要將插入點進行換帶計算即可。注記在地形圖中也是一種特殊類型的點狀符號,轉(zhuǎn)換方式與塊、形等點狀對象的方式相同。
3.3線對象轉(zhuǎn)換
在AutoCAD中,一般使用多段線表示河流邊界、道路等線狀符號。線狀符號進行換帶計算時,需要依次獲取每個節(jié)點的原始坐標(biāo),然后對節(jié)點進行換帶計算,最后再更新各個節(jié)點從而完成換帶計算。
3.4面對象轉(zhuǎn)換
在AutoCAD中,一般使用閉合的多邊形表示房屋、植被等面狀符號。此類符號的轉(zhuǎn)換方式與線對象轉(zhuǎn)換相同。如果面中含有島洞,此時無法使用閉合多邊形表示,需要使用填充面(Hatch)。填充面由多個環(huán)(HatchLoop)組成,轉(zhuǎn)換時首先依次遍歷每個環(huán),然后再遍歷環(huán)中的每個節(jié)點從而完成換帶計算。
4.程序?qū)崿F(xiàn)
本文中使用VisualStudi02013作為編程環(huán)境,使用VB.NET作為開發(fā)語言,利用AutoCAD提供的ARX.NET開發(fā)接口進行程序開發(fā)。
4.1創(chuàng)建編程環(huán)境
在VisualStudi02013中創(chuàng)建一個項目,語言選擇Visual-Basic,類型選擇類庫。項目創(chuàng)建完畢后,引入AutoCAD安裝目錄中的acdbmgd.dll與acmgd.dll,并將“復(fù)制到本地”屬性設(shè)為False。
4.2高斯投影類的實現(xiàn)
為提高高斯投影計算使用的效率,將高斯投影相關(guān)計算封裝在類中,主要代碼結(jié)構(gòu)如下:
Public Class GaussProjection
Public Sub LB2XY(By Val L As Double,ByVal B As Double,ByRef X As Double,ByRef Y As Double)
Public Sub XY2LB(ByVal X As Double,ByVal Y As Double,ByRef L As Double,ByRef B As Double)
End Class
4.3定制轉(zhuǎn)換命令
在ARX.NET開發(fā)環(huán)境中,定義新命令的方法是在某個無參數(shù)的Sub方法中添加一個CommandMethodAttribute標(biāo)識,程序加載后,在命令行中輸入相應(yīng)的命令就可以直接調(diào)用CommandMethod標(biāo)識的方法,主要實現(xiàn)代碼如下:
Public Sub ZBZH()
Using Trans As Transaction=DB.TransactionManager.StartTransaction
For Each ID As ObjectId In BlkTab
Dim Ent As Entity=Trans.GetObject(ID,OpenMode.For Write)
Select Case True
Case TypeOf Ent Is Block Reference'轉(zhuǎn)換點狀符號
Case TypeOf Ent Is Polyline'轉(zhuǎn)換線狀或面狀符號
Case TypeOf Ent Is Hatch'轉(zhuǎn)換面狀符號
CaseElse'
End Select
Next
End Using
EndSub
4.4加載轉(zhuǎn)換程序
高斯投影轉(zhuǎn)換程序編寫完畢后,會編譯生成一個DLL文件。在AutoCAD命令行中輸入NETLOAD后選擇相應(yīng)的DLL文件即可完成程序的加載。程序加載后,輸入自定義命令ZBZH后就可以運行高斯投影轉(zhuǎn)換程序了。
5.應(yīng)用示例
在某地形圖測繪項目中,從甲方收集了一些參考資料。查閱相關(guān)文檔后得知原始資料的成果是基于1980西安坐標(biāo)系使用119度作為中央子午線投影得到的。
當(dāng)前項目使用的坐標(biāo)系還是1980西安坐標(biāo)系,但中央子午線是118度30分。如果要想利用原有的測量成果,必須對原成果進行高斯投影換帶計算,才能與當(dāng)前項目的坐標(biāo)吻合。使用ZBZH命令后,就可以對原始資料進行高斯投影轉(zhuǎn)換,效果如圖1。
在轉(zhuǎn)換前選擇了10個檢查點參與轉(zhuǎn)換,然后將10個檢查點的坐標(biāo)通過南方Coord軟件進行轉(zhuǎn)換,對比結(jié)果如表1。
從對比差值來看,轉(zhuǎn)換結(jié)果精度可靠。表中出現(xiàn)個別點有約1mm的誤差,是因為精度取位的問題引起的。
此高斯投影轉(zhuǎn)換程序支持單幅地形圖轉(zhuǎn)換,同時也支持多幅地形圖批量轉(zhuǎn)換,極大地提高了轉(zhuǎn)換的效率。
6.結(jié)束語
高斯投影轉(zhuǎn)換是一種使用頻率極高的坐標(biāo)轉(zhuǎn)換方式。由于AutoCAD自身沒有此項轉(zhuǎn)換功能,必須通過開發(fā)才能實現(xiàn)。基于高斯投影轉(zhuǎn)換公式開發(fā)的坐標(biāo)工具在使用過程中能夠極大地提高數(shù)據(jù)轉(zhuǎn)換的效率及精度。