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