时间:2022-09-15 01:13:52
摘要:由于重庆市土地勘测定界报批的需要,本文从实例出发,以四参数法解算转换坐标为基础,探讨通过缩小两种坐标系的投影变形差,是否可以提高转换精度为目的,通过实例进行验证;本文涉及到四参数的解算公式和基本VB代码的编写。
关键词:坐标转换独立坐标四参数
中图分类号:P123文献标识码: A
重庆市土地勘测定界征地报批过程中,国家要求提供征地范围的西安80直角坐标的备案文件。由于重庆建立的是城市地方平面坐标系统,即重庆独立坐标系,原点为国家一等控制点,分东、中、西三带,以300米高程面为其投影面,所以就需要进行坐标转换。
通常一般采用四参数进行平面坐标转换,四参数的公式编程简便,涉及到两个平移参数、一个旋转角参数和一个尺度比参数,公式如下:
式中,、为坐标变换的平移参数,为尺度比参数,为旋转角参数。在已知相应坐标系两组坐标就可得到唯一解,但为了提高转换参数的可靠性和准确性一般取三组或三组以上的已知坐标点,利用间接平差方法求取四参数,法方程如下:
-=0
式中=、=、、。
下面利用以上公式,以重庆主城某区为例,选取7组已知点,其中选用位置分布较好的5组进行参数计算,进行重庆独立坐标到西安80直角坐标的解算。通过编写VB代码程序,求取四参数进行坐标解算,将解算后的坐标与已知点进行对比,如表1所示,只有在测区中央的点残差达到厘米级,其他测区周边的残差都在分米级。检核已知点、引用的解算公式和程序代码都正确一致。为了能够提高坐标转换的精度,来分析一下两种坐标系统,重庆主城区位于西安80坐标
表1
系3度投影带的边缘,而重庆独立坐标系采用任意带投影,主城区处在中带附近,根据越远离中央经线投影变形越大,越靠近中央经线投影变形越小的原则,是否是投影变形不一致引起这种情况呢?
选择相同的5对已知点,首先将已知点80直角坐标转换成80大地坐标,然后以独立坐标投影中带进行投影解算,得到西安80椭球下的任意带直角坐标,再利用解算的任意带直角坐标和重庆独立坐标组成已知点对,求取四参数。利用VB编写程序代码,涉及到高斯投影正算和反算、参数计算和坐标转换四个过程,主要程序代码如下:
--------------------------------------------参数计算--------------------------------------------------
Option Explicit
Dim dt3#, dtx3# , dty3#, u3#
Public Sub cs3()
Dim nzb(4, 1) As Double, i As Integer, b#, l#, X#, Y#
For i = 0 To 4
Call zbfs(6378140, (297.257 / 298.257) * 6378140, 1.83259568332, nzb(i, 0), nzb(i, 1) - 500000, b, l)
Call zh(6378140, (297.257 / 298.257) * 6378140, 1.8573665107, b, l, X, Y)
nzb(i, 0) = X: nzb(i, 1) = Y + 500000
Next i
Dim ozb(4, 1) As Double, sumx#, sumy#, sumxc#, sumyc#, sumpf#, sumcpf1#, sumcpf2#, j!, num!
num = 0
For j = 0 To 4
sumy = sumy + ozb(j, 1)
sumx = sumx + ozb(j, 0)
sumxc = sumxc + nzb(j, 0) - ozb(j, 0)
sumyc = sumyc + nzb(j, 1) - ozb(j, 1)
sumpf = ozb(j, 0) * ozb(j, 0) + ozb(j, 1) * ozb(j, 1) + sumpf
sumcpf1 = ozb(j, 0) * (nzb(j, 1) - ozb(j, 1)) - ozb(j, 1) * (nzb(j, 0) - ozb(j, 0)) + sumcpf1
sumcpf2 = ozb(j, 0) * (nzb(j, 0) - ozb(j, 0)) + ozb(j, 1) * (nzb(j, 1) - ozb(j, 1)) + sumcpf2
num = num + 1
Next j
dt3 = (sumx * sumyc - sumy * sumxc - num * sumcpf1) / (sumx * sumx + sumy * sumy - sumpf * num)
dtx3 = (sumx * sumcpf2 - sumpf * sumxc - sumy * sumcpf1) / (sumx * sumx - num * sumpf + sumy * sumy)
dty3 = (sumcpf1 - sumpf * dt3 + sumy * dtx3) / sumx
u3 = (sumxc + sumy * dt3 - num * dtx3) / sumx
End Sub
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------坐标转换------------------------------------------------------
Private Sub Command1_Click()
Dim b#, l#, xz#, yz#
Text9.Enabled = False
Text10.Enabled = False
Text7.Enabled = True
Text8.Enabled = True
If Text7.Text = "" Or Text8.Text = "" Then
MsgBox "坐标不能为空", vbInformation, "提示信息"
Text7.SetFocus
Else
cs3
xz = Val(Text7.Text) + dtx3 - Val(Text8.Text) * dt3 + Val(Text7.Text) * u3
yz = Val(Text8.Text) + dty3 + Val(Text7.Text) * dt3 + Val(Text8.Text) * u3
Call zbfs(6378140, (297.257 / 298.257) * 6378140, 1.8573665107, xz, yz - 500000, b, l)
Call zh(6378140, (297.257 / 298.257) * 6378140, 35 * 3 * 3.1415926 / 180, b, l, xz, yz)
Text9.Text = Format(xz, "########.000")
Text10.Text = Format((yz + 500000 + Val(Combo2.Text) * 1000000), "#########.000")
End If
End Sub
---------------------------------------------------------------------------------------------------------------------
解算出80直角坐标与已知点的对比残差如表3, 残差都在毫米级,解
算精度明显提高。
表2
通过上述分析得出,重庆独立坐标与西安80坐标的转换,通过缩小两种坐标系的投影变形差,可以提高坐标转换的精度。