1、1图幅理论面积与图斑椭球面积计算公式及要求一、 图幅理论面积计算公式 m12m12m122 cos5(5Csinco3(3Bsinco(Asin6034P BBBLb 。1212 99Ei77Di 。(1)式中:a椭球长半轴(单位:米), 椭球扁率,b椭球短半轴(单位:米)。(ab)/a。A1(3/6)(30/80) 4(35/112) 6(630/2304) 8。B (1/6)(15/80) 4(21/112) 6(420/2304) 8。C (3/80) 4 (7/112) 6(180/2304) 8。D (1/112) 6 (45/2304) 8。E (5/2304) 8。L图幅东西图廓
2、的经差(单位:弧度) 。(B2B 1)图幅南北图廓的纬差(单位:弧度) ,Bm(B 1B 2)/2。二、椭球面上任意梯形面积计算公式 m12m12m122 cos5(5Csinco3(3Bsinco(AsinS BBBLb 。(2)1212 s9(9Eis7(7Di 。其中:A,B,C,D,E 为常数,按下式计算:(a b)/aA1(3/6)(30/80 ) 4(35/112 ) 6(630/2304) 8B (1/6)(15/80) 4(21/112) 6(420/2304) 8C (3/80) 4 (7/112) 6(180/2304) 8D (1/112) 6(45/2304) 82E
3、(5/2304) 8式中:a椭球长半轴(单位:米),b椭球短半轴(单位:米);L图块经差(单位:弧度); (B 2B 1)图块纬差(单位:弧度)Bm(B 1B 2)/2。三、高斯投影反解变换( )模型,xyBL(若坐标不带带号,则不需减去带号1000000;)5010y带 号EKx )sinsisinsi(co 745321 EKEKBf 6242222 59061954 NytVtNytVtNytVf 52232 cos1885120cos116cos1 BttBtBL fff +中央子午线经度值(孤度) (3)式中: ftgfe22sVCN/ba/221V。4310,K公式说明:若坐标为没
4、有带号前缀格式,则不需减去带号1000000;若坐标为有带号前缀格式,则需减去带号1000000。四、计算用到的常数、椭球参数在计算图幅理论面积与任意图斑椭球面积时,有关常数及保留的位数按给定数值计算。常数:3.14159265358979206264.806247180 椭球常数:= 6378140 = 1/ 298.257a半。 。3= 6356755.29b。= 6.69438499958795E-032e= 6.73950181947292E-03。= 6399596.65198801c相关常数: k0 = 1.57048687472752E-07k1 = 5.052505592913
5、93E-03k2 = 2.98473350966158E-05k3 = 2.41627215981336E-07k4 = 2.22241909461273E-09五、计算中的取位及要求 高斯投影反解变换后的 B,L 以秒为单位,保留到小数点后 6 位,四舍五入。 采用计算机计算时,所有变量数据类型均要定义为双精度。 面积计算结果以平方米为单位,保留一位小数,四舍五入。 各种比例尺标准分幅图经差、纬差见表 1。 在用大地坐标生成标准分幅图框时,要求在每条边框线的整秒处插入加密点。表 1 各种比例尺标准分幅图经差、纬差表比例尺 1:100万1:50 万 1:25 万 1:10 万 1:5 万 1:
6、2.5 万 1:1 万 1:5 千经差 6 3 130 30 15 730 345 152.5纬差 4 2 1 20 10 5 230 115六、任意图斑椭球面积计算方法任意封闭图斑椭球面积计算的原理:将任意封闭图斑高斯平面坐标利用高斯投影反解变换模型,将高斯平面坐标换算为相应椭球的大地坐标,再利用椭球面上任意梯形图块面积计算模型计算其椭球面积,从而得到任意封闭图斑的椭球面积。1、计算方法:任意封闭区域总是可以分割成有限个任意小的梯形图块,因此,任意封闭区域的面积4,式中 Si 为分割的任意小的梯形图块面积(i=1,2,n)用公式(2) 计算。nisP1求封闭区域(多边形如图 1)ABCD 的
7、面积 ,其具体方法为:(1)对封闭区域(多边形)的界址点连续编号(顺时针或逆时针)ABCD,提取各界址点的高斯平面坐标 A(X1,Y1),B(X2,Y2),C(X3,Y3),D(X4,Y4);(2)利用高斯投影反解变换模型公式(3) ,将高斯平面坐标换算为相应椭球的大地坐标 A(B1,L1), B(B2,L2),C(B3,L3),D(B4,L4);(3)任意给定一经线 L0(如 L060 ) ,这样多边形 ABCD 的各边AB、BC 、CD、DA 与 L0 就围成了 4 个梯形图块(ABB1A1、BCC1B1 、CDD1C1、DAA1D1) ; (4)由于在椭球面上同一经差随着纬度升高,梯形图
8、块的面积逐渐减小,而同一纬差上经差梯形图块的面积相等,所以,将梯形图块 ABB1A1 按纬差分割成许多个小梯形图块AEiFiA1,用公式(2)计算出各小梯形图块 AEiFiA1 的面积 Si,然后累加 Si 就得到梯形图块 ABB1A1 的面积,同理,依次计算出梯形图块 BCC1B1、CDD1C1、DAA1D1 的面积(注:用公式(2)计算面积时,B1、B2 分别取沿界址点编号方向的前一个、后一个界址点的大地纬度,L 为沿界址点编号方向的前一个、后一个界址点的大地经度的平均值与L0 的差) ;(5)多边形 ABCD 的面积就等于 4 个梯形图块(ABB1A1、BCC1B1 、CDD1C1、DA
9、A1D1)面积的代数和。图 1 椭球面上任意多边形计算面积C(B3,L3)D(B4,L4)B (B2,L2)A(B1,L1)LL0C1B1 D1A1FiBEi(Bi,Li)5则任意多边形 ABCD 的面积 P 为:P=ABCD= BCC1B1+ CDD1C1+ DAA1D1- ABB1A12、计算要求 利用图形坐标点将高斯坐标系下的几何图形反算投影到大地坐标系,进行投影变换。 任意指定一条经线 L0,从选定多边形几何形状的起始点开始,沿顺时针方向依次计算相邻两点构成的线段,以及两点到指定经线的平行线构成的梯形面积。将该梯形沿纬度变化方向(Y 轴)进行切割,至少需切割为 2 个部分。 计算过程中
10、应顺同一方向依坐标点逐个计算相邻两点连线与任意经线构成的梯形面积,坐标点不得有遗漏。若多边形包含内多边形(洞) ,则该多边形面积为外多边形面积减去所有内多边形面积之和。 计算所有梯形面积的代数和即为该多边形的面积。七、算法伪代码描述为了确保编程使用的参数、算法一致,保证不同软件计算的椭球面积一致,我们用算法伪代码描述的方法对编程进行统一,在利用计算机编制椭球面积计算软件时,计算参数与计算顺序应严格按照以下代码执行。1、参数说明双精度类型:圆周率值:PI = 3.14159265358979中央经线:CenterL RHO = 206264.8062471A:ParamAB:ParamBC:Pa
11、ramCD:ParamDE:ParamEConst ZERO As Double = 0.00000000000180 椭球常数椭球长半轴:aRadius = 6378140 椭球短半轴:bRadius = 6356755.29椭球扁率:ParaAF = 1/ 298.2576椭球第一偏心率:ParaE1 = 6.69438499958795E-03椭球第二偏心率:ParaE2 = 6.73950181947292E-03极点子午圈曲率半径:ParaC = 6399596.65198801k0:Parak0 = 1.57048687472752E-07k1:Parak1 = 5.0525055
12、9291393E-03k2:Parak2 = 2.98473350966158E-05k3:Parak3 = 2.41627215981336E-07k4:Parak4 = 2.22241909461273E-092、算法描述初始化参数Double e; Double a;e = ParaE2;ParaC = aRadius / (1 - ParaAF);ParamA = 1 + (3 / 6) * e + (30 / 80) * Power(e, 2) + (35 / 112) * Power(e, 3) + (630 / 2304) * Power(e, 4);ParamB = (1 /
13、6) * e + (15 / 80) * Power(e, 2) + (21 / 112) * Power(e, 3) + (420 / 2304) * Power(e, 4);ParamC = (3 / 80) * Power(e, 2) + (7 / 112) * Power(e, 3) + (180 / 2304) * Power(e, 4);ParamD = (1 / 112) * Power(e, 3) + (45 / 2304) * Power(e, 4);ParamE = (5 / 2304) * Power(e, 4);参数初始化结束中央经线转换为弧度CenterL = Tra
14、nsDegreeToArc(CenterL)选定本初子午线为参考经线StandardLat = 0 For 起始点 To 倒数第二点由高斯坐标反解计算经纬度值ComputeXYGeo (PntColl.Point(i).y, PntColl.Point(i).x, B, L, CenterL)7ComputeXYGeo (PntColl.Point(i + 1).y, PntColl.Point(i + 1).x, B1, L1, CenterL)将经纬度转换为弧度值 B = B / RHOL = L / RHOB1 = B1 / RHOL1 = L1 / RHO计算梯形面积 Double A
15、reaVal;/梯形面积值Double lDiference ;/经差Double bDiference; /纬差Double bSum;/纬度和Double ItemValue(5);/计算变量 bDiference = (B1 - B0);bSum = (B1 + B0) / 2;lDiference = (L1 + L) / 2;ItemValue(0) = ParamA * Sin(bDiference / 2) * Cos(bSum);ItemValue(1) = ParamB * Sin(3 * bDiference / 2) * Cos(3 * bSum);ItemValue(2
16、) = ParamC * Sin(5 * bDiference / 2) * Cos(5 * bSum);ItemValue(3) = ParamD * Sin(7 * bDiference / 2) * Cos(7 * bSum);ItemValue(4) = ParamE * Sin(9 * bDiference / 2) * Cos(9 * bSum);AreaVal = 2 * bRadius * lDiference * bRadius * (ItemValue(0) - ItemValue(1) + ItemValue(2) - ItemValue(3) + ItemValue(4
17、);areaSum = areaSum + AreaVal; NextEnd Sub3、高斯坐标反解算法Public Sub ComputeXYGeo(x As Double, y As Double, B As Double, L As Double, center As Double)Dim y1 As DoubleDim bf As Doubley1 = y - 500000Dim e As Double8e = Parak0 * x Dim se As Doublese = Sin(e)bf = e + Cos(e) * (Parak1 * se - Parak2 * Power(se
18、, 3) + Parak3 * Power(se, 5) - Parak4 * Power(se, 7)Dim v As DoubleDim t As DoubleDim N As DoubleDim nl As DoubleDim vt As DoubleDim yn As DoubleDim t2 As DoubleDim g As Doubleg = 1t = Tan(bf)nl = ParaE1 * Power(Cos(bf), 2)v = Sqr(1 + nl)N = ParaC / vyn = y1 / Nvt = Power(v, 2) * tt2 = Power(t, 2)B
19、= bf - vt * Power(yn, 2) / 2 + (5 + 3 * t2 + nl - 9 * nl * t2) * vt * Power(yn, 4) / 24 - (61 + 90 * t2 + 45 * Power(t2, 2) * vt * Power(yn, 6) / 720B = TransArcToDegree(B)Dim cbf As Doublecbf = 1 / Cos(bf)L = cbf * yn - (1 + 2 * t2 + nl) * cbf * Power(yn, 3) / 6 + (5 + 28 * t2 + 24 * Power(t2, 2) +
20、 6 * nl + 8 * nl * t2) * cbf * Power(yn, 5) / 120 + centerL = TransArcToDegree(L) End Sub 弧度转换为度Public Function TransArcToDegree(arc As Double) As DoubleDim degree As DoubleDim min As Double9Dim sec As DoubleDim ret As DoubleDim tmp As Doubleret = arc * 180 / PIdegree = FormatValue(ret, 100, 100)tmp
21、 = (ret - degree) * 60min = FormatValue(tmp, 100, 100)sec = (tmp - min) * 60/秒保留到小数点后 6 位,四舍五入sec = Format(sec, “#.000000“) FormatValue(sec, 10000000, 100)TransArcToDegree = degree * 3600 + min * 60 + secEnd FunctionPrivate Function FormatValue(inputVal As Double, precsion As Long, scaleNum As Long) As DoubleFormatValue = (Int(inputVal * precsion) - Int(inputVal * precsion) Mod scaleNum) / precsionEnd Function