若点在椭球面上,则大地高H0,上式可简化为:
32空间直角坐标转换为空间大地坐标
将同一坐标系下的空间直角坐标(X、Y、Z)转换为空间大地坐标(B、L、
H)的公式为:
在使用上式进行空间直角坐标到大地坐标的转换过程中,由于计算大地纬度
口时用到大地高Ⅳ,而计算大地高时又需要用到大地纬度口.因此不能直接由空
间直角坐标计算出大地坐标,而需要采用迭代计算的方法。具体计算时,可先根
据下式求出大地纬度口的初值:
然后利用该初值来求出H、N的初值,再利用所求出的H和N初值再次求出B
值.如此反复,直至求出的及日、Ⅳ收敛为止。
4算例
本文根据以上公式在MicrosoftVC60环境下编写了一段程序(见附录)。
算例中的坐标采用的是武汉大学信息学部友谊广场上的某点的大地坐标作为已
知值,然后经过转换函数
CRDGEODETICtoCRDCARTESEANpcgpccdSemiMajorAxisdFlat
i
g把大地
坐标转换为空间直角坐标得到坐标X、Y、Z。由得到的空间直角坐标X、Y、Z,
经
过
转
换
函
数
CRDCARTESIANtoCRDGEODETICpccpcgdSemiMajorAxisdFlat
i
g把空
间直角坐标还原成空间大地坐标,计算结果如下图所示:
f计算结果从上图可以看出结果比较满意,高程和精度基本能完全还原,而纬度还原后有较大的误差,在测量中这种误差不允许的,需要修改算法,完善结果。可能引起的原因有可能是由于纬度计算公式并不完善,还有可能是由于计算机的截断误差引起的,还要找时间继续修改、完善。
5心得体会
这次编程自认为很简单,但真动手自己亲自编写,还是或多或少遇到了一些问题,并分析问题,最终解决问题。虽然这次作业很简单,但经过自己这样一步一步的编写出来,还是有很多收获,加强了运用VC编写程序的能力,也充分认识到了学习VC的重要性,更找到了自己的一些缺点与不足。
6附录(程序源代码)
i
cludeiostreami
cludecmathusi
g
amespacestddefi
eM_PI31415926typedefstructtagCRDCARTESIAN
doublexdoubleydoublezCRDCARTESIANtypedefCRDCARTESIANPCRDCARTESIANtypedefstructtagCRDGEODETICdoublelo
gitudedoublelatitudedoubleheightCRDGEODETICtypedefCRDGEODETICPCRDGEODETICvoidDMS_RADdoubleDMSdoubleRad
fi
tDegMi
doubleSecDegi
tDMSMi
i
tDMSDeg100SecDMSDeg100Mi
100RadDegMi
600Sec360001800M_PIretur
voidRAD_DMSdoubleRaddoubleDMS
i
tDegMi
doubleSecdoubleARAMARRadifRad0
ARRadARAR10e10ARAR1800M_PIDegi
tARAMARDeg600Mi
i
tAMSecAMMi
60DMSDegMi
1000Sec100000ifRad0
DMSDMSretur
boolCRDCARTESIANtoCRDGEODETICPCRDCARTESIANpccPCRDGEODETICpcgdoubledSemiMajorAxisr