当前位置:文档之家› 高斯投影正算

高斯投影正算

高斯投影正算
高斯投影正算

高斯投影正、反算代码

//高斯投影正、反算

//////6度带宽 54年北京坐标系

//高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres)

void GaussProjCal(double longitude, double latitude, double *X, double *Y)

{

int ProjNo=0; int ZoneWide; ////带宽

double longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval;

double a,f, e2,ee, NN, T,C,A, M, iPI;

iPI = 0.0174532925199433; ////3.1415926535898/180.0;

ZoneWide = 6; ////6度带宽

a=6378245.0; f=1.0/298.3; //54年北京坐标系参数

////a=6378140.0; f=1/298.257; //80年西安坐标系参数

ProjNo = (int)(longitude / ZoneWide) ;

longitude0 = ProjNo * ZoneWide + ZoneWide / 2;

longitude0 = longitude0 * iPI ;

latitude0=0;

longitude1 = longitude * iPI ; //经度转换为弧度

latitude1 = latitude * iPI ; //纬度转换为弧度

e2=2*f-f*f;

ee=e2*(1.0-e2);

NN=a/sqrt(1.0-e2*sin(latitude1)*sin(latitude1));

T=tan(latitude1)*tan(latitude1);

C=ee*cos(latitude1)*cos(latitude1);

A=(longitude1-longitude0)*cos(latitude1);

M=a*((1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)*latitude1-(3*e2/8+3*e2*e2 /32+45*e2*e2

*e2/1024)*sin(2*latitude1)

+(15*e2*e2/256+45*e2*e2*e2/1024)*sin(4*latitude1)-(35*e2*e2*e2/30 72)*sin(6*l

atitude1));

xval = NN*(A+(1-T+C)*A*A*A/6+(5-18*T+T*T+72*C-58*ee)*A*A*A*A*A/120);

yval = M+NN*tan(latitude1)*(A*A/2+(5-T+9*C+4*C*C)*A*A*A*A/24

+(61-58*T+T*T+600*C-330*ee)*A*A*A*A*A*A/720);

X0 = 1000000L*(ProjNo+1)+500000L;

Y0 = 0;

xval = xval+X0; yval = yval+Y0;

*X = xval;

*Y = yval;

}

//高斯投影由大地坐标(Unit:Metres)反算经纬度(Unit:DD)

void GaussProjInvCal(double X, double Y, double *longitude, double *latitude)

{

int ProjNo; int ZoneWide; ////带宽

double longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval;

double e1,e2,f,a, ee, NN, T,C, M, D,R,u,fai, iPI;

iPI = 0.0174532925199433; ////3.1415926535898/180.0;

a = 6378245.0; f = 1.0/298.3; //54年北京坐标系参数

////a=6378140.0; f=1/298.257; //80年西安坐标系参数

ZoneWide = 6; ////6度带宽

ProjNo = (int)(X/1000000L) ; //查找带号

longitude0 = (ProjNo-1) * ZoneWide + ZoneWide / 2;

longitude0 = longitude0 * iPI ; //中央经线

X0 = ProjNo*1000000L+500000L;

Y0 = 0;

xval = X-X0; yval = Y-Y0; //带内大地坐标

e2 = 2*f-f*f;

e1 = (1.0-sqrt(1-e2))/(1.0+sqrt(1-e2));

ee = e2/(1-e2);

M = yval;

u = M/(a*(1-e2/4-3*e2*e2/64-5*e2*e2*e2/256));

fai = u+(3*e1/2-27*e1*e1*e1/32)*sin(2*u)+(21*e1*e1/16-55*e1*e1*e1*e1/32)*si n(

4*u)

+(151*e1*e1*e1/96)*sin(6*u)+(1097*e1*e1*e1*e1/512)*sin(8*u);

C = ee*cos(fai)*cos(fai);

T = tan(fai)*tan(fai);

NN = a/sqrt(1.0-e2*sin(fai)*sin(fai));

R = a*(1-e2)/sqrt((1-e2*sin(fai)*sin(fai))*(1-e2*sin(fai)*sin(fai))*(1-e2 *sin

(fai)*sin(fai)));

D = xval/NN;

//计算经度(Longitude) 纬度(Latitude)

longitude1 = longitude0+(D-(1+2*T+C)*D*D*D/6+(5-2*C+28*T-3*C*C+8*ee+24*T*T)*D

*D*D*D*D/120)/cos(fai);

latitude1 = fai -(NN*tan(fai)/R)*(D*D/2-(5+3*T+10*C-4*C*C-9*ee)*D*D*D*D/24

+(61+90*T+298*C+45*T*T-256*ee-3*C*C)*D*D*D*D*D*D/720);

//转换为度 DD

*longitude = longitude1 / iPI;

*latitude = latitude1 / iPI;

}

高斯投影坐标正反算VB程序

高斯投影坐标正反算 V B程序 文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)

高斯投影坐标正反算 学院: 班级: 学号: 姓名: 课程名称: 指导老师:

实验目的: 1.了解高斯投影坐标正反算的基本思想; 2.学会编写高斯正反算程序,加深了解。 实验原理: 高斯投影正算公式中应满足的三个条件: 1. 中央子午线投影后为直线; 2. 中央子午线投影后长度不变; 3. 投影具有正形性质,即正形投影条件。 高斯投影反算公式中应满足的三个条件: 1. x坐标轴投影成中央子午线,是投影的对称轴; 2. x轴上的长度投影保持不变; 3. 正形投影条件,即高斯面上的角度投影到椭球面上后角度没有 变形,仍然相等。 操作工具: 计算机中的 代码: Dim a As Double, b As Double, x As Double, y As Double, y_#

Dim l_ As Double, b_ As Double, a0#, a2#, a4#, a6#, a8#, m2#, m4#, m6#, m8#, m0#, l0#, e#, e1# Dim deg1 As Double, min1 As Double, sec1 As Double, deg2 As Double, min2 As Double, sec2 As Double Private Sub Command1_Click() Dim x_ As Double, t#, eta#, N#, W#, k1#, k2#, ik1%, ik2%, dh% deg1 = Val min1 = Val sec1 = Val deg2 = Val min2 = Val sec2 = Val l_ = (deg1 * 3600 + min1 * 60 + sec1) / 206265 b_ = (deg2 * 3600 + min2 * 60 + sec2) / 206265 dh = Val k1 = ((l_ * 180 / + 3) / 6) k2 = (l_ * 180 / / 3) ik1 = Round(k1, 0) ik2 = Round(k2, 0) If dh = 6 Then l0 = 6 * ik1 - 3 Else

高斯投影正反算公式 新

高斯投影坐标正反算 一、相关概念 大地坐标系由大地基准面和地图投影确定,由地图投影到特定椭圆柱面后在南北两极剪开展开而成,是对地球表面的逼近,各国或地区有各自的大地基准面,我国目前主要采用的基准面为:基准面,为GPS基准面,17届国际大地测量协会上推荐,椭圆柱长半轴a=6378137m,短半轴b=; 2.西安80坐标系,1975年国际大地测量协会上推荐,椭圆柱长半轴a=6378140m,短半轴b=; 3.北京54坐标系,参照前苏联克拉索夫斯基椭球体建立,椭圆柱长半轴a=6378245m, 短半轴b=; 通常所说的高斯投影有三种,即投影后: a)角度不变(正角投影),投影后经线和纬线仍然垂直; b)长度不变; c)面积不变; 大地坐标一般采用高斯正角投影,即在地球球心放一点光源,地图投影到过与中央经线相切的椭圆柱面上而成;可分带投影,按中央经线经度值分带,有每6度一带或每3度一带两种(起始带中央经线经度为均为3度,即:6度带1带位置0-6度,3度带1带位置度),即所谓的高斯-克吕格投影。

图表11高斯投影和分带 地球某点经度(L)为过该点和地球自转轴的半圆与子午线所在半圆夹角,东半球为东经,西半球为西经;地球某点纬度(B)为所在水平面法线与赤道圆面的线面角。 正算是已知大地坐标(L,B),求解高斯平面坐标(X,Y),为确保Y值为正,Y增加500公里;反算则是由高斯平面坐标(X,Y)求解大地坐标(L,B)。 二、计算模型: 地球椭球面由椭圆绕地球自转轴旋转180度而成。 图表 1 椭圆 椭圆长半轴a,椭圆短半轴b, 椭圆方程:

(1) 图表2椭球面 椭球面方程: y2 a2+ x2 b2 + z2 a2 =1 /*************************************** 与网上充斥的将函数关系先展开为泰勒级数,再依据投影规则确定各参数不同,本文直接依据空间立体三角函数关系得出结果。 *****/ (一)正算 由图表1,

高斯投影坐标正反算编程报告

高斯投影坐标正反算编程报告 1. 编程思想 进行高斯投影坐标正反算的编程需要牵涉到大量的公式,为了使程序条理更清楚,各块的数据复用性更强,这里采取了结构化的编程思想。 程序由四大块组成。 GeodesyHomework 、cpp 文件用于存放main()函数,就是整个程序的入口。通过结构化的编程尽力使main()函数变得简单。 MyFunction 、h 与MyFunction 、cpp 用于存放计算过程中进行角度弧度换算时所要用到的一些自定的转换函数。 Zhengsuan 、h 与Zhengsuan 、cpp 用于存放Zhengsuan 类,在Zhengsuan 类中声明了高斯投影坐标正算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及正算计算。通过get 函数获得相应的正算结果。 Fansuan 、h 与Fansuan 、cpp 用于存放Fansuan 类,类似于Zhengsuan 类,Fansuan 类中声明了高斯投影坐标反算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及反算计算。通过get 函数获得相应的反算结果。 2. 计算模型 高斯投影正算公式 6 4256 4 42234 22)5861(cos sin 720)495(cos 24cos sin 2l t t B B N l t B simB N l B B N X x ''+-''+ ''++-''+''?''+=ρηηρρ 5 2224255 3 2233 )5814185(cos 120)1(cos 6cos l t t t B N l t B N l B N y ''-++-''+ ''+-''+''?''=ηηρηρρ 高斯投影反算公式 () () ()( ) 2 22425 52 23 36 4254 222232 8624285cos 12021cos 6cos 459061720935242f f f f f f f f f f f f f f f f f f f f f f f f f f f f f t t t B N y t B N y B N y l y t t y N M t y t t N M t y N M t B B ηηηηη+++++++-=++- -+++ -= 3. 程序框图

高斯投影坐标正反算VB程序

高斯投影坐标正反算 学院: 班级: 学号: 姓名: 课程名称: 指导老师:

实验目的: 1.了解高斯投影坐标正反算的基本思想; 2.学会编写高斯正反算程序,加深了解。 实验原理: 高斯投影正算公式中应满足的三个条件: 1. 中央子午线投影后为直线; 2. 中央子午线投影后长度不变; 3. 投影具有正形性质,即正形投影条件。 高斯投影反算公式中应满足的三个条件: 1. x坐标轴投影成中央子午线,是投影的对称轴; 2. x轴上的长度投影保持不变; 3. 正形投影条件,即高斯面上的角度投影到椭球面上后角度没 有变形,仍然相等。 操作工具: 计算机中的VB6.0 代码: Dim a As Double, b As Double, x As Double, y As Double, y_# Dim l_ As Double, b_ As Double, a0#, a2#, a4#, a6#, a8#, m2#, m4#,

m6#, m8#, m0#, l0#, e#, e1# Dim deg1 As Double, min1 As Double, sec1 As Double, deg2 As Double, min2 As Double, sec2 As Double Private Sub Command1_Click() Dim x_ As Double, t#, eta#, N#, W#, k1#, k2#, ik1%, ik2%, dh% deg1 = Val(Text1.Text) min1 = Val(Text2.Text) sec1 = Val(Text3.Text) deg2 = Val(Text4.Text) min2 = Val(Text5.Text) sec2 = Val(Text6.Text) l_ = (deg1 * 3600 + min1 * 60 + sec1) / 206265 b_ = (deg2 * 3600 + min2 * 60 + sec2) / 206265 dh = Val(Text9.Text) k1 = ((l_ * 180 / 3.14159 + 3) / 6) k2 = (l_ * 180 / 3.14159 / 3) ik1 = Round(k1, 0) ik2 = Round(k2, 0) If dh = 6 Then l0 = 6 * ik1 - 3 Else If dh = 3 Then

高斯投影正反算

class Gauss { #region 高斯投影正反算 ///

/// 从大地坐标到平面坐标的高斯正算 /// /// 默认的是使用假定坐标的六度带投影 /// /// 大地纬度 /// 大地经度 /// 平面纵轴 /// 平面横轴 /// 参考椭球长半轴 /// 参考椭球扁率倒数 public static void BL_xy(double B, double L, out double x, out double y, double a, double f) { BL_xy(B, L, out x, out y, a, f, 6, true); } /// /// 从大地坐标到平面坐标的高斯正算 /// /// 默认的是使用假定坐标 /// /// 大地纬度 /// 大地经度 /// 平面纵轴 /// 平面横轴 /// 参考椭球长半轴 /// 参考椭球扁率倒数 /// 投影分带的带宽 public static void BL_xy(double B, double L, out double x, out double y, double a, double f, int beltWidth) { BL_xy(B, L, out x, out y, a, f, beltWidth, true); } /// /// 从大地坐标到平面坐标的高斯正算 /// /// 默认的是六度带投影 /// /// 大地纬度 /// 大地经度 /// 平面纵轴

高斯投影正反算编程(可编辑修改word版)

高斯投影正反算编程一.高斯投影正反算基本公式(1)高斯正算基本公式 (2)高斯反算基本公式

以上主要通过大地测量学基础课程得到,这不进行详细的推导,只是列出基本公式指导编程的进行。 二.编程的基本方法和流程图 (1)编程的基本方法 高斯投影正反算基本上运用了所有的编程基本语句,本文中是利用C++语言进行基本的设计。高斯正算中对椭球参数和带宽的选择主要运用了选择语句。而高斯反算中除了选择语句的应用,在利用迭代算法求底点纬度还应用了循环语句。编程中还应特别注意相关的度分秒和弧度之间的相互转换,这是极其重要的。 (2)相关流程图 1)正算

选择带宽 3/6 度带 计算带号 输入大地坐标 B ,L 和经差 L0 6 度带 3 度带 选择椭球参数 计算带号 计算弧长 计算平面坐标 x,y 打印 x,y 开始 计算平面坐标 x,y 计算弧长 打印 x,y

开始 输入自然值坐标x,y 和经差L0 选择椭球参数 利用迭代算法 求解底点纬度 利用公式计算B 和L 打印B 和L 2)反算

三.编程的相关代码(1)正算 # include "stdio.h" # include "stdlib.h" # include "math.h" # include "assert.h" #define pi (4*atan(1.0)) int i; struct jin { double B; double L; double L0; }; struct jin g[100]; main(int argc, double *argv[]) { FILE *r=fopen("a.txt","r"); assert(r!=NULL); FILE *w=fopen("b.txt","w"); assert(r!=NULL); int i=0;

(完整word版)高斯投影坐标正反算编程报告

高斯投影坐标正反算编程报告 10021班 张鑫 学号:2010302590040 1. 编程思想 进行高斯投影坐标正反算的编程需要牵涉到大量的公式,为了使程序条理更清楚,各块的数据复用性更强,这里采取了结构化的编程思想。 程序由四大块组成。 GeodesyHomework.cpp 文件用于存放main()函数,是整个程序的入口。通过结构化的编程尽力使main()函数变得简单。 MyFunction.h 和MyFunction.cpp 用于存放计算过程中进行角度弧度换算时所要用到的一些自定的转换函数。 Zhengsuan.h 和Zhengsuan.cpp 用于存放Zhengsuan 类,在Zhengsuan 类中声明了高斯投影坐标正算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及正算计算。通过get 函数获得相应的正算结果。 Fansuan.h 和Fansuan.cpp 用于存放Fansuan 类,类似于Zhengsuan 类,Fansuan 类中声明了高斯投影坐标反算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及反算计算。通过get 函数获得相应的反算结果。 2. 计算模型 高斯投影正算公式 6 4256 4 42234 22)5861(cos sin 720)495(cos 24cos sin 2l t t B B N l t B simB N l B B N X x ''+-''+ ''++-''+''?''+=ρηηρρ 5 2224255 3 2233)5814185(cos 120)1(cos 6cos l t t t B N l t B N l B N y ''-++-''+''+-''+''?''=ηηρηρρ 高斯投影反算公式 () () ()( ) 222425 52 2336 4254 2222 32 8624285cos 12021cos 6cos 459061720935242f f f f f f f f f f f f f f f f f f f f f f f f f f f f f t t t B N y t B N y B N y l y t t y N M t y t t N M t y N M t B B ηηηηη+++++++-=++- -+++ -=

高斯投影计算的实用公式

§8.4高斯投影计算的实用公式 1子午线弧长计算公式 改写并扩充(7-65)(7-64)两式 )8sin()6sin()4sin()2sin(86420B a B a B a B a B a X ++++= )16384 17640512525646043)(1(21864222e e e e e a a +++--= )16384 88205122106415)(1(4186424e e e e a a ++-= )16384 252051235)(1(618626e e e a a +--= )16384 315)(1(81828e e a a -= 2正算公式(8-67)(8-81) 00/cos ρBl p = 2/)12/)30/))58(61())49(5((1(22222222p p p t t t Nt X x -++++-++=ηηp p p t t t N y )6/)20/)14)5818(5()1((1(22222222ηηη+--+++-+= )3/)5/)2())23(1((1(sin 22222 00p p t Bl r -++++=ηη 式中: B t tan = 22)cos (B e '=η 221η+=V V c N /= 0000L L l -= 21a/e c -= 3 底点纬度公式 00Xq B = (单位:弧度) ))) sin (sin (sin )(2sin(028*********B q q B q B q B B B f ++++=(单位:弧度) 式中: )16384110255123506445431)(1(864220e e e e e a a ++++-=

高斯投影坐标正算公式

高斯投影坐标正算公式 高斯投影坐标正反算公式 2.2.2. 1高斯投影坐标正算公式: B, x,y 高斯投影必须满足以下三个条件: ⑴中央子午线投影后为直线;⑵中央子午线投影后长度不变;⑶投影具有正形性质,即正形投影条件。 由第一条件知中央子午线东西两侧的投影必然对称于中央子午线,即 式中,x为的偶函数,y为的奇函数;,即, 如展开为的级数,收敛。 (2-10) 式中是待定系数,它们都是纬度B的函数。 由第三个条件知: 分别对和q求偏导数并代入上式 (2-11) 上两式两边相等,其必要充分条件是同次幂前的系数应相等,即

(2-12) (2-12)是一种递推公式,只要确定了就可依次确定其余各系数。 由第二条件知:位于中央子午线上的点,投影后的纵坐标x应等于投影前从赤道量至该点的子午线弧长X,即(2-10)式第一式中,当时有: (2-13) 顾及(对于中央子午线) 得: (2-14,15) (2-16) 依次求得并代入(2-10)式,得到高斯投影正算公式

(2-17) 2.2.2. 2高斯投影坐标反算公式 x,y B, 投影方程: (2-18) 高斯投影坐标反算公式推导要复杂些。 ⑴由x求底点纬度(垂足纬度),对应的有底点处的等量纬度,求x,y与 的关系式,仿照式有, 由于y和椭球半径相比较小(1/16.37),可将展开为y的幂级数;又由于是对称投影,q必是y的偶函数,必是y的奇函数。 (2-19) 是待定系数,它们都是x的函数. 由第三条件知: ,

, (2-20) (2-19)式分别对x和y求偏导数并代入上式 上式相等必要充分条件,是同次幂y前的系数相等, 第二条件,当y=0时,点在中央子午线上,即x=X,对应的点称为底点,其纬度为底点纬度,也就是x=X时的子午线弧长所对应的纬度,设所对应的等量纬度为。也就是在底点展开为y的幂级数。 由(2-19)1式 依次求得其它各系数 (2-21) (2-21)1 ………… 将代入(2-19)1式得

高斯投影及其中央子午线的判断

一、高斯-克吕格投影 1、高斯-克吕格简介 高斯-克吕格(Gauss-Kruger)投影简称“高斯投影”,又名"等角横切椭圆柱投影”,地球椭球面和平面间正形投影的一种。德国数学家、物理学家、天文学家高斯(Carl FriedrichGauss,1777一1855)于十九世纪二十年代拟定,后经德国大地测量学家克吕格(Johannes Kruger,1857~1928)于1912年对投影公式加以补充,故名。该投影按照投影带中央子午线投影为直线且长度不变和赤道投影为直线的条件,确定函数的形式,从而得到高斯一克吕格投影公式。投影后,除中央子午线和赤道为直线外,其他子午线均为对称于中央子午线的曲线。设想用一个椭圆柱横切于椭球面上投影带的中央子午线,按上述投影条件,将中央子午线两侧一定经差范围内的椭球面正形投影于椭圆柱面。将椭圆柱面沿过南北极的母线剪开展平,即为高斯投影平面。取中央子午线与赤道交点的投影为原点,中央子午线的投影为纵坐标x 轴,赤道的投影为横坐标y轴,构成高斯克吕格平面直角坐标系。 2、高斯-克吕格特性 (1)等角投影——投影前后的角度相等,但长度和面积有变形; (2)等距投影——投影前后的长度相等,但角度和面积有变形; (3)等积投影——投影前后的面积相等,但角度和长度有变形。 3、投影的基本概念 它是一种横轴等角切圆柱投影。它把地球视为球体,假想一个平面卷成一个横圆柱面并把它套在球体外面,使横轴圆柱的轴心通过球的中心,球面上一根子午线与横轴圆柱面相切。这样,该子午线在圆柱面上的投影为一直线,赤道面与圆柱面的交线是一条与该子午线投影垂直的直线。将横圆柱面展开成平面,由这两条正交直线就构成高斯-克吕格平面直角坐标系。为减少投影变形,高斯-克吕格投影分为3o带和6o带投影。

高斯投影正算

高斯投影正、反算代码 //高斯投影正、反算 //////6度带宽 54年北京坐标系 //高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres) void GaussProjCal(double longitude, double latitude, double *X, double *Y) { int ProjNo=0; int ZoneWide; ////带宽 double longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval; double a,f, e2,ee, NN, T,C,A, M, iPI; iPI = 0.0174532925199433; ////3.1415926535898/180.0; ZoneWide = 6; ////6度带宽 a=6378245.0; f=1.0/298.3; //54年北京坐标系参数 ////a=6378140.0; f=1/298.257; //80年西安坐标系参数 ProjNo = (int)(longitude / ZoneWide) ; longitude0 = ProjNo * ZoneWide + ZoneWide / 2; longitude0 = longitude0 * iPI ; latitude0=0; longitude1 = longitude * iPI ; //经度转换为弧度 latitude1 = latitude * iPI ; //纬度转换为弧度 e2=2*f-f*f; ee=e2*(1.0-e2); NN=a/sqrt(1.0-e2*sin(latitude1)*sin(latitude1)); T=tan(latitude1)*tan(latitude1); C=ee*cos(latitude1)*cos(latitude1); A=(longitude1-longitude0)*cos(latitude1); M=a*((1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)*latitude1-(3*e2/8+3*e2*e2 /32+45*e2*e2 *e2/1024)*sin(2*latitude1)

高斯投影正反算c代码

高斯投影正反算c代码 Coca-cola standardization office【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-ZZT18】

高斯投影正反算程序设计 一.程序设计流程 本程序的设计思路如下: (1),程序采用VS08版本作为开发平台,并采用C#语言作为开发语言,设计为WindowsForm窗体程序形式。 (2),程序主要的算法来自于教材。但是本程序为了更加实用,添加了更多的解算基准,包括:WGS-84,国际椭球1975,克氏椭球,和2000国家大地坐标系。 (3),程序为了更方便的读取数据和输出数据,故需要自己定义了固定的数据输入格式和数据输出格式或形式,请老师注意查看。 二.代码 using System; using ; using ; using ; using ; using Gauss { public partial class Form1 : Form { double b = (a * a * (1 - ee * ee)); double c = a * a / b; double epp = ((a * a - b * b) / b / b); CRDGEODETIC pcrdGeo; CRDCARTESIAN pcrdCar; double midlong = 0;

//求X,Y和带号 = ; ytext = ; string temp = (0, 2); num = (temp); ytext = (0, 2); = (ytext) - 500000; try { tt = } catch { ("Choose 3/6 error!"); return; } if ("3度带") == 0) { midlong = num * 3 * pai / 180; } if ("6度带") == 0) { midlong = (6 * num - 3) * pai / 180; } b = (a * a * (1 - ee * ee)); c = a * a / b; epp = (a * a - b * b) / b; double m0, m2, m4, m6, m8; double a0, a2, a4, a6, a8; m0 = a * (1 - ee * ee);

高斯投影坐标正反算VB程序

高斯投影坐标正反算V B 程序 Jenny was compiled in January 2021

高斯投影坐标正反算 学院: 班级: 学号: 姓名: 课程名称: 指导老师:

实验目的: 1.了解高斯投影坐标正反算的基本思想; 2.学会编写高斯正反算程序,加深了解。 实验原理: 高斯投影正算公式中应满足的三个条件: 1. 中央子午线投影后为直线; 2. 中央子午线投影后长度不变; 3. 投影具有正形性质,即正形投影条件。 高斯投影反算公式中应满足的三个条件: 1. x坐标轴投影成中央子午线,是投影的对称轴; 2. x轴上的长度投影保持不变; 3. 正形投影条件,即高斯面上的角度投影到椭球面上后角度没有 变形,仍然相等。 操作工具: 计算机中的 代码: Dim a As Double, b As Double, x As Double, y As Double, y_#

Dim l_ As Double, b_ As Double, a0#, a2#, a4#, a6#, a8#, m2#, m4#, m6#, m8#, m0#, l0#, e#, e1# Dim deg1 As Double, min1 As Double, sec1 As Double, deg2 As Double, min2 As Double, sec2 As Double Private Sub Command1_Click() Dim x_ As Double, t#, eta#, N#, W#, k1#, k2#, ik1%, ik2%, dh% deg1 = Val min1 = Val sec1 = Val deg2 = Val min2 = Val sec2 = Val l_ = (deg1 * 3600 + min1 * 60 + sec1) / 206265 b_ = (deg2 * 3600 + min2 * 60 + sec2) / 206265 dh = Val k1 = ((l_ * 180 / + 3) / 6) k2 = (l_ * 180 / / 3) ik1 = Round(k1, 0) ik2 = Round(k2, 0) If dh = 6 Then l0 = 6 * ik1 - 3 Else

高斯投影正反算——包括3度和6度带的选择

// guass coordinateDlg.cpp : implementation file // #include "stdafx.h" #include "guass coordinate.h" #include "guass coordinateDlg.h" #include "math.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT }

高斯投影坐标正反算公式及适合电算的高斯投影公式

§8.3高斯投影坐标正反算公式 任何一种投影①坐标对应关系是最主要的;②如果是正形投影,除了满足正形投影的条件外(C-R 偏微分方程),还有它本身的特殊条件。 8.3.1高斯投影坐标正算公式: B,l ? x,y 高斯投影必须满足以下三个条件: ①中央子午线投影后为直线;②中央子午线投影后长度不变;③投影具有正形性质,即正形投影条件。 由第一条件知中央子午线东西两侧的投影必然对称于中央子午线,即 (8-10)式中,x 为l 的偶函数,y 为l 的奇函数;0330 '≤l ,即20/1/≈''''ρl , 如展开为l 的级数,收敛。 +++=++++=553316644220l m l m l m y l m l m l m m x (8-33) 式中 ,,10m m 是待定系数,它们都是纬度B 的函数。 由第三个条件知: q y l x l y q x ??-=????=??, (8-33)式分别对l 和q 求偏导数并代入上式 ----=++++++=+++553315 63424 42204 52 3164253l dq dm l dq dm l dq dm l m l m l m l dq dm l dq dm dq dm l m l m m (8-34) 上两式两边相等,其必要充分条件是同次幂l 前的系数应相等,即

dq dm m dq dm m dq dm m 231 20 13121? =? -== (8-35) (8-35)是一种递推公式,只要确定了 0m 就可依次确定其余各系数。 由第二条件知:位于中央子午线上的点,投影后的纵坐标x 应等于投影前从赤道量至该点的子午线弧长X ,即(8-33)式第一式中,当0=l 时有: 0m X x == (8-36) 顾及(对于中央子午线) B V M r M B N dq dB M dB dX cos cos 2 ==== 得: B V c B N r dq dB dB dX dq dX dq dm m cos cos 01===?===(8-37,38) B B N dq dB dB dm dq dm m cos sin 2 2121112=?-=?-= (8-39) 依次求得6543,,,m m m m 并代入(8-33)式,得到高斯投影正 算公式

高斯投影坐标正反算公式

高斯投影坐标正反算公式 未知2010-04-03 10:47:15 本站 §高斯投影坐标正反算公式 任何一种投影①坐标对应关系是最主要的;②如果是正形投影,除了满足正形投影的条件外( C-R 偏微分方程),还有它本身的特殊条件。 1.1 高斯投影坐标正算公式: B, x,y 高斯投影必须满足以下三个条件: ①中央子午线投影后为直线;②中央子午线投影后长度不变;③投影具有正形性质,即正形投影条件。 由第一条件知中央子午线东西两侧的投影必然对称于中央子午线,即 (8-10) 式中, x 为 的偶函数, y 为的奇函数;,即,如展开为的级数,收敛。 ( 8-33 ) 式中是待定系数,它们都是纬度 B 的函数。 由第三个条件知: (8-33) 式分别对和 q 求偏导数并代入上式

(8-34) 上两式两边相等,其必要充分条件是同次幂前的系数应相等,即 (8-35) (8-35) 是一种递推公式,只要确定了就可依次确定其余各系数。 由第二条件知 : 位于中央子午线上的点,投影后的纵坐标 x 应等于投影前从赤道量至该点的子午线弧长 X ,即 (8-33) 式第一式中,当时有: (8-36) 顾及 ( 对于中央子午线 )

得: (8-37,38) (8-39) 依次求得并代入 (8-33) 式,得到高斯投影正算公式 (8-42) 1.2 高斯投影坐标反算公式 x,y B, 投影方程: (8-43)

满足以下三个条件:

①x 坐标轴投影后为中央子午线是投影的对称轴;② x 坐标轴投影后长度不变;③投影具有正形性质,即正形投影条件。 高斯投影坐标反算公式推导要复杂些。 ①由 x 求底点纬度 ( 垂足纬度 ), 对应的有底点处的等量纬度,求 x,y 与 的关系式,仿照 (8-10) 式有, 由于 y 和椭球半径相比较小 (1/16.37) ,可将展开为 y 的幂级数;又由于是对称投影, q 必是 y 的偶函数,必是 y 的奇函数。 (8-45) 是待定系数,它们都是 x 的函数 . 由第三条件知: , , (8-21)

基于python的高斯投影计算

袁钱梅 (贵州省第二测绘院,贵州贵阳550000) 摘要: 本文基于python脚本语言编制了测量厂用的高斯投影正、反计算工具。有效的解决了在python及ARCGIS环境中高斯投影计算工作;并具有一定的灵活性。工具以在全国第一次地理国情普查数据生产中进行了批量性验证。 关键词:Python;高斯投影 1、Python语言概述 Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。Python吸收了Perl,TCL等脚本语言的优点,使得Python具备Tcl的扩展性,同时又具备Perl的文本解析和匹配能力。 2、高斯投影 高斯-克吕格投影是一种等角横轴切椭圆柱投影。它是假设一个椭圆柱面与地球椭球体面横切于某一条经线上,按照等角条件将中央经线东、西各3°或1.5°经线范围内的经纬线投影到椭圆柱面上,然后将椭圆柱面展开成平面而成的。 这种投影,将中央经线投影为直线,其长度没有变形,与球面实际长度相等,其余经线为向极点收敛的弧线,距中央经线愈远,变形愈大。赤道线投影后是直线,但有长度变形。除赤道外的其余纬线,投影后为凸向赤道的曲线,并以赤道为对称轴。经线和纬线投影后仍然保持正交。所有长度变形的线段,其长度变形比均大于1,随远离中央经线,面积变形也愈大。若采用分带投影的方法,可使

投影边缘的变形不致过大。我国各种大、中比例尺地形图采用了不同的高斯-克吕格投影带。其中大于1:1万的地形图采用3°带;1:2.5万至1:50万的地形图采用6°带。 3、Python模块 P博闻新闻ython是中许多功能是由一系列的模块组成的,每个模块可以是一个py为后缀的文件。模块也可以理解为lib库,如果需要使用某个模块中的函数或对象,则要导入这个模块才可以使用;除了系统默认的模块(内置函数)不需要导入。在实际使用中高斯投影计https://www.doczj.com/doc/34461177.html,算是使用在实际工作中的各个部分的,为方便调用,采用Python的模块方式对高斯计算进行封装,可高效利用模块在不同的应用中进行计算。 4、高斯投影计算 高斯投影计算分正算和反算,正算为经纬度坐标计算到投影坐标;反算为投影坐标计算到经纬度坐标。高斯投影正算需要确定投影后的中央经度,及投影椭球参数信息;如采用CGCS2000坐标系及1980西安坐标系其采用椭球参数不同,经过正算的投影坐标即不同。 由于Python为脚本语言,其在进行科学计算时小数位取位是无法保证计算精度的,在Python中实现高斯投影计算单纯的使用其提供的基本计算函数是无法满足计算精度需求的,因此需要借助Python提供的模块进行提高精度计算。Python提供了decimal模块用于十进制数学计算,它具有以下特点: 1.提供十进制数据类型,并且存储为十进制数序列; 2.有界精度:用于存储数字的位数是固定的,可以通过decimal.getcontext ().prec=x 来设定,不同的数字可以有不同的精度;

高斯投影坐标反算c语言代码

高斯投影坐标反算c语言代码 #include #include #include main() { printf("#####################################################\n"); printf("# 角度输入说明:如26°12′45.2″输入为26,12,45.2 #\n"); printf("#####################################################\n"); double x,y; int j,L0; printf("请输入高斯投影坐标(自然坐标),中间用逗号隔开:\n"); scanf("%lf,%lf",&x,&y); //自然坐标输入 printf("请输入中央子午线L0:\n"); scanf("%d,%d,%lf",&L0); //中央子午线输入 printf("请选择参考椭球:1.北京1954参考椭球。\n 2.西安1980参考椭球。\n"); printf("选择的参考椭球为:"); scanf("%d",&j); //选择椭球参数 if(j==1) { long double Bf0=0.157046064172*pow(10,-6)*x; long double Bf=Bf0+cos(Bf0)*(0.005051773759*sin(Bf0)-0.000029837302*pow(sin(Bf0),3)+0.00000023818 9*pow(sin(Bf0),5)); long double t=tan(Bf); long double m=0.00673852541468*pow(cos(Bf),2); long double V=1+m; long double N=6378245.000/sqrt(1-0.00669342162297*pow(sin(Bf),2)); long double B1=Bf-1.0/2*V*t*pow(y/N,2)+1.0/24*(5+3*pow(t,2)+m-9*m*pow(t,2))*V*t*pow(y/N,4)-1.0/72 0*(61+90*pow(t,2)+45*pow(t,4)) *V*t*pow(y/N,6); long double l1=(1/cos(Bf))*(y/N)-1.0/6*(1+2*pow(t,2)+m)*(1/cos(Bf))*pow(y/N,3) +1.0/120*(5+28*pow(t,2)+24*pow(t,4)+6*m+8*m*pow(t,2))*(1/cos(Bf))*pow(y/N,5); long double B=B1*57.29577951; long double l=l1*57.29577951; long double L=L0+l; int d2=int(B);

大地测量-高斯投影正反算

大地测量高斯投影正反算程序代码 课程:大地测量学基础 姓名:林江伟 学号:2008301610045 班级: 0804

界面如下: 输入数据计算:

using System; using System.Collections.Generic; using https://www.doczj.com/doc/34461177.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace大地 { public partial class Form1 : Form { double B, L; double x, y; double X, Y; int N; double L0, l1; double p=206264.80625; public Form1() {

InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //自动化控件显示初始值 radioButton2.Checked=true; radioButton3.Checked = true; textBox1.Focus(); textBox1.Text = textBox2.Text = textBox3.Text = textBox4.Text = textBox5.Text = textBox6.Text = "0"; this.richTextBox2.Text = "说明:输入的坐标需为按6°带投影且采用克氏椭球参数所得的国家统一坐标"; } private void button1_Click(object sender, EventArgs e) { //获取输入数据 double bb1=Convert.ToDouble(this.textBox1.Text); double bb2=Convert.ToDouble(this.textBox2.Text); double bb3=Convert.ToDouble(this.textBox3.Text); double ll1=Convert.ToDouble(this.textBox4.Text); double ll2=Convert.ToDouble(this.textBox5.Text); double ll3=Convert.ToDouble(this.textBox6.Text); //检查输入格式的正确性 if (bb1 >= 0 && bb1 <90 && bb2 >= 0 && bb2 < 60 && bb3 >= 0 && bb3 < 60) { B = bb1 * 3600 + bb2 * 60 + bb3; } else { MessageBox.Show("纬度输入格式不正确!", "警告"); return; } if (ll1 >= 0 && ll1<360 && ll2 >= 0 && ll2 < 60 && ll3 >= 0 && ll3 < 60) { L = ll1 * 3600 + ll2 * 60 + ll3; } else { MessageBox.Show("经度输入格式不正确!", "警告"); return; }

相关主题
文本预览
相关文档 最新文档