鄭紅艷 郭海泉 夏鵬



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