基于MATLAB的WGS84坐标向北京54坐标转换

合集下载

基于MATLAB的七参数坐标系统转换问题分析(精)

基于MATLAB的七参数坐标系统转换问题分析(精)

基于 MATLAB 的七参数法坐标系统转换问题分析 1张鲜妮 21, ,王磊 21,1、中国矿业大学环境与测绘学院,江苏徐州 (2210082、江苏省资源环境信息工程重点实验室,江苏徐州 (221008E-mail:摘要:GPS 测量的坐标是基于 WGS-84坐标系下的,而我国实用的测量成果大多都是基于北京 54坐标系下的。

随着 GPS 测量技术的广泛使用,由 WGS-84坐标向北京 54坐标系下坐标的转换问题一直是一个可探讨的问题, 坐标系统转换的现有模型很多, 但常用的还是经典的七参数转换模型。

随着不断的实践研究, 发现七参数在进行坐标系统转换时有一定的局限性。

本文采用 MATLAB 语言编写了七参数法坐标系统转换程序,并对七参数坐标系统转换的若干问题进行了分析讨论。

分析结果表明, 小区域范围内用正常高代替大地高对坐标转换精度影响很小; 公共点分布情况对坐标转换精度影响显著; 合适的公共点密度有利于提高坐标转换精度。

关键词:七参数法;坐标系统; MATLAB ;转换问题1. 引言随着 GPS 空间定位技术的发展, GPS 技术以其快速、精确、全天候在测量中的应用变的越来越广泛, GPS 成为建立基础控制网的首选手段 ]1[,由于 GPS 系统采用的是 WGS-84坐标系, 是一种地心坐标系, 而我国目前常用的两个坐标系 1954年北京坐标系 (以下称 BJ54 和 1980年国家大地坐标系,是一种参心坐标系,采用克拉所夫斯基椭球为参考椭球,并采用高斯克吕格投影方式进行投影, 我国的国土测量成果和在进行工程施工时大都是基于这两个坐标系下的。

所以在利用 GPS 技术进行测量过程中必然存在由 WGS-84坐标向北京 54坐标系下的转换问题。

现有的转换模型已经成熟,归纳起来主要有布尔莎 -沃尔夫模型(七参数法、莫洛登斯基 -巴代卡斯模型和范士模型 ]2[。

本文主要分析讨论是基于七参数转换模型, 分析工具是MATLAB 软件。

WGS84和BJ54坐标转换源程序

WGS84和BJ54坐标转换源程序

WGS84和BJ54坐标转换源程序两个坐标系转换一般需要平移,旋转,缩放共七参数。

Y=(1+k)*M(x,y,z)*X+dX;X,Y为3*1矩阵,M(x,y,z)为3*3的旋转矩阵.public class CoordTrans7Param{public double[,] values=new double[7,1];//{{dx},{dy},{dz},{rx},{ry},{rz},{k}};//public double dx,dy,dz,rx,ry,rz,k;public void Set4Param(double dx,double dy,double dz,double k){this.dx=dx;this.dy=dy;this.dz=dz;this.k=k;this.rx=this.ry=this.rz=0;}public void SetRotationParamRad(double rx,double ry,double rz){this.rx=rx;this.ry=ry;this.rz=rz;}public void SetRotationParamMM(double rx,double ry,double rz){SetRotationParamRad(rx*Math.PI/648000,ry*Math.PI/648000,rz*Math.PI/648000); }private double[,] GetMx(){double [,] Mx=new double[,]{{1,0,0},{0,Math.Cos(rx),Math.Sin(rx)},{0,-Math.Sin(rx),Math.Cos(rx)}};return Mx;}private double[,] GetMy(){double [,] My=new double[,]{{Math.Cos(ry),0,-Math.Sin(ry)},{0,1,0},{Math.Sin(ry),0,Math.Cos(ry)}};return My;}private double[,] GetMz(){double [,] Mz=new double[,]{{Math.Cos(rz),Math.Sin(rz),0},{-Math.Sin(rz),Math.Cos(rz),0},{0,0,1}};return Mz;}private double[,] GetM() //M=Mx*My*Mz? or M=Mz*My*Mx? {double [,] M=new double[3,3];MatrixTool.Multi(GetMz(),GetMy(),ref M);MatrixTool.Multi(M,GetMx(),ref M);return M;}private double[,] GetMdx(){double[,] mt = {{ 0, 0, 0 },{ 0, -Math.Sin(rx), Math.Cos(rx) },{ 0, -Math.Cos(rx), -Math.Sin(rx) }};double[,] m=new double[3,3];MatrixTool.Multi(GetMz(),GetMy(),ref m);MatrixTool.Multi(m,mt,ref m);return m;}private double[,] GetMdy(){double[,] mt = {{ -Math.Sin(ry), 0, -Math.Cos(ry) },{ 0, 0, 0 },{ Math.Cos(ry), 0, -Math.Sin(ry) }};double[,] m=new double[3,3];MatrixTool.Multi(GetMz(),mt,ref m);MatrixTool.Multi(m,GetMx(),ref m);return m;}private double[,] GetMdz(){double[,] mt = {{ -Math.Sin(rz), Math.Cos(rz), 0 },{ -Math.Cos(rz), -Math.Sin(rz), 0 },{ 0, 0, 0 }};double[,] m=new double[3,3];MatrixTool.Multi(mt,GetMy(),ref m);MatrixTool.Multi(m,GetMx(),ref m);return m;}private double[,] specialMulti(double[,] m,double[,] X){int rowNumM=m.GetLength(0);int colNumM=m.GetLength(1);int rowNumX=X.GetLength(0);int colNumX=X.GetLength(1);int lines=rowNumX/colNumM;double[,] mt=MatrixTool.Init(rowNumM,colNumX);double[,] subX=MatrixTool.Init(colNumM,colNumX);double[,] res=MatrixTool.Init(rowNumM*lines,colNumX);for(int i=0;i<lines;i++){MatrixTool.CopySub(X,i*colNumM,0,colNumM,colNumX,ref subX,0,0); MatrixTool.Multi(m,subX,ref mt);MatrixTool.CopySub(mt,0,0,rowNumM,colNumX,ref res,i*rowNumM,0); }return res;}private double[,] specialSub(double[,] m,double[,] X){int rowNumM=m.GetLength(0);int colNumM=m.GetLength(1);int rowNumX=X.GetLength(0);int colNumX=X.GetLength(1);int lines=rowNumX/rowNumM;double[,] subX=MatrixTool.Init(rowNumM,colNumX);double[,] res=MatrixTool.Init(rowNumX,colNumX);for(int i=0;i<rowNumX;i+=rowNumM){MatrixTool.CopySub(X,i,0,rowNumM,colNumX,ref subX,0,0);MatrixTool.Sub(m,subX,ref subX);MatrixTool.CopySub(subX,0,0,rowNumM,colNumX,ref res,i,0); }return res;}private double[,] GetF(double[,] X,double[,] Y){double[,] f0;double[,] qx=MatrixTool.Init(X.GetLength(0),1);double[,] K={{-dx},{-dy},{-dz}};double[,] S={{1+k}};MatrixTool.Multi(X,S,ref qx);double [,] M=GetM();qx=specialMulti(M,qx);MatrixTool.Sub(qx,Y,ref qx);f0=specialSub(K,qx);return f0;}private double[,] GetB(double[,] X){int rowNum=X.GetLength(0);double[,] B=MatrixTool.Init(rowNum,7);double[,] M=GetM();double[,] Mdx=GetMdx();double[,] Mdy=GetMdy();double[,] Mdz=GetMdz();double[,] mi=MatrixTool.Ident(3);double[,] MX,MY,MZ,MK;MK=specialMulti(M,X);MX=specialMulti(Mdx,X);MY=specialMulti(Mdy,X);MZ=specialMulti(Mdz,X);for(int i=0;i<rowNum;i+=3)MatrixTool.CopySub(mi,0,0,3,3,ref B,i,0);MatrixTool.CopySub(MX,0,0,rowNum,1,ref B,0,3); MatrixTool.CopySub(MY,0,0,rowNum,1,ref B,0,4); MatrixTool.CopySub(MZ,0,0,rowNum,1,ref B,0,5); MatrixTool.CopySub(MK,0,0,rowNum,1,ref B,0,6);return B;}private double[,] GetA(){double[,] M=GetM();double[,] I2=MatrixTool.Ident(3);double[,] A=MatrixTool.Init(3,6);MatrixTool.MutliConst(ref I2,-1);MatrixTool.MutliConst(ref M,(1+k));MatrixTool.CopySub(M,0,0,3,3,ref A,0,0);MatrixTool.CopySub(I2,0,0,3,3,ref A,0,3);return A;}private double[,] GetV(double[,] X,double[,] Y,CoordTrans7Param dpp) {int rowNum=X.GetLength(0);double[,] B,F,A,B2,B3,F2,V;double[,] AT=MatrixTool.Init(6,3);A=GetA();MatrixTool.AT(A,ref AT);MatrixTool.MutliConst(ref AT,1/(1+(1+k)*(1+k)));F=GetF(X,Y);B=GetB(X);B2=MatrixTool.Init(3,7);B3=MatrixTool.Init(3,1);F2=MatrixTool.Init(rowNum,1);for(int i=0;i<rowNum/3;i++){MatrixTool.CopySub(B,i*3,0,3,7,ref B2,0,0);MatrixTool.Multi(B2,dpp.values,ref B3);MatrixTool.CopySub(B3,0,0,3,1,ref F2,i*3,0);}MatrixTool.Sub(F,F2,ref F2);V=specialMulti(AT,F2);return V;}public double CalculateTrans7Param(double[,] X,double[,] Y){int PtNum=X.GetLength(0)/3;double[,] B;double[,] F;double[,] BT=MatrixTool.Init(7,3*PtNum);double[,] BTB=MatrixTool.Init(7,7);double[,] BTF=MatrixTool.Init(7,1);//init pararmCoordTrans7Param dpp=new CoordTrans7Param();Set4Param(0,0,0,0);this.SetRotationParamMM(0,0,0);//debug//this.TransCoord(X[0,0],X[1,0],X[2,0],out x2,out y2,out z2); int round=0;while(round++<20){F=GetF(X,Y);B=GetB(X);MatrixTool.AT(B,ref BT);MatrixTool.Multi(BT,B,ref BTB);MatrixTool.Inv(BTB);MatrixTool.Multi(BT,F,ref BTF);MatrixTool.Multi(BTB,BTF,ref dpp.values);if (dpp.isSmall())break;elseMatrixTool.Add(this.values,dpp.values,ref this.values);}//this.TransCoord(X[0,0],X[1,0],X[2,0],out x2,out y2,out z2); double[,] V=GetV(X,Y,dpp);double vMax=-1;for(int i=0;i<V.GetLength(0);i++){if (Math.Abs(V[i,0])>vMax)vMax=Math.Abs(V[i,0]);}return vMax;}private bool isSmall(){double s=0;for(int i=0;i<7;i++)s+=Math.Abs(values[i,0]);if (s<0.0000001)return true;elsereturn false;}public void TransCoord(double x1,double y1,double z1,out double x2,out double y2,out double z2){double[,] Xi={{x1},{y1},{z1}};double[,] DX={{dx},{dy},{dz}};double[,] tY=new double[3,1];double[,] K={{1+k}};double [,] M=GetM();MatrixTool.Multi(Xi,K,ref tY);MatrixTool.Multi(M,tY,ref tY);MatrixTool.Add(tY,DX,ref tY);x2=tY[0,0];y2=tY[1,0];z2=tY[2,0];}public double dx{get{return values[0,0];}set{values[0,0]=value;}}public double dy{get{return values[1,0];}set{values[1,0]=value;}}{get{return values[2,0]; }set{values[2,0]=value; }}public double rx {get{return values[3,0]; }set{values[3,0]=value; }}public double ry {get{return values[4,0]; }set{values[4,0]=value; }}public double rz {get{return values[5,0]; }set{values[5,0]=value; }}{get{return values[6,0];}set{values[6,0]=value;}}}理论部分可以参考本站"高精度gps测点到54/80坐标系的转换问题"矩阵计算程序public class MatrixTool{public static double[,] Init(int m,int n){double[,] M=new double[m,n];for(int i=0;i<m;i++)for(int j=0;j<n;j++)M[i,j]=0;return M;}public static double[,] Ident(int rank){double[,] m=new double[rank,rank];for(int i=0;i<rank;i++)for(int j=0;j<rank;j++){if (i==j)m[i,j]=1.0;elsem[i,j]=0;}return m;}public static void MutliConst(ref double[,] m1,double c){for(int i=0;i<m1.GetLength(0);i++)for(int j=0;j<m1.GetLength(1);j++){m1[i,j]*=c;}}public static void Copy(double[,] m1,ref double[,] m2){for(int i=0;i<m1.GetLength(0);i++)for(int j=0;j<m1.GetLength(1);j++){m2[i,j]=m1[i,j];}}public static void CopySub(double[,] m1,int rowStart,int colStart,int rowNum,int colNum,ref double[,] m2,int rowStart2,int colStart2){for(int i1=rowStart,i2=rowStart2;i1<rowStart+rowNum;i1++,i2++)for(int j1=colStart,j2=colStart2;j1<colStart+colNum;j1++,j2++){m2[i2,j2]=m1[i1,j1];}}public static void Multi(double[,] m1,double [,] m2,ref double [,] mout){int m1x,m1y,m2x,m2y,moutx,mouty;if (m1.Rank!=2 || m2.Rank!=2||mout.Rank!=2)throw new Exception("Multi 输入错误!");m1x=m1.GetLength(0);m1y=m1.GetLength(1);m2x=m2.GetLength(0);m2y=m2.GetLength(1);moutx=mout.GetLength(0);mouty=mout.GetLength(1);if (m1y!=m2x||m1x!=moutx||m2y!=mouty)throw new Exception("Multi 输入错误!");double[,] mtemp=new double[moutx,mouty];for(int i=0;i<m1x;i++)for(int j=0;j<m2y;j++){mtemp[i,j]=0;for (int k=0;k<m1y;k++)mtemp[i,j]+=m1[i,k]*m2[k,j];}Copy(mtemp,ref mout);}public static void Add(double[,] m1,double [,] m2,ref double [,] mout) {int m1x,m1y,m2x,m2y;if (m1.Rank!=2 || m2.Rank!=2||mout.Rank!=2)throw new Exception("Matrix.Add 输入错误!");m1x=m1.GetLength(0);m1y=m1.GetLength(1);m2x=m2.GetLength(0);m2y=m2.GetLength(1);if (m1x!=m2x||m1y!=m2y)throw new Exception("Matrix.Add 输入错误!");if (mout.GetLength(0)!=m1x||mout.GetLength(1)!=m2y)throw new Exception("Matrix.Add 输入错误!");//mout=new double[m1x,m2y];for(int i=0;i<m1x;i++)for(int j=0;j<m2y;j++)mout[i,j]=m1[i,j]+m2[i,j];}public static void Sub(double[,] m1,double [,] m2,ref double [,] mout) {int m1x,m1y,m2x,m2y;if (m1.Rank!=2 || m2.Rank!=2||mout.Rank!=2)throw new Exception("Matrix.Sub 输入错误!");m1x=m1.GetLength(0);m1y=m1.GetLength(1);m2x=m2.GetLength(0);m2y=m2.GetLength(1);if (m1x!=m2x||m1y!=m2y)throw new Exception("Matrix.Sub 输入错误!");if (mout.GetLength(0)!=m1x||mout.GetLength(1)!=m2y)throw new Exception("Matrix.Sub 输入错误!");//mout=new double[m1x,m2y];for(int i=0;i<m1x;i++)for(int j=0;j<m2y;j++)mout[i,j]=m1[i,j]-m2[i,j];}public static void AT(double[,] m1,ref double [,] mout){for(int i=0;i<m1.GetLength(0);i++)for(int j=0;j<m1.GetLength(1);j++){mout[j,i]=m1[i,j];}}public static void ATBA(double[,] m1,double [,] m2,ref double [,] mout) {int M,N;M=m1.GetLength(0);N=m1.GetLength(1);if (mout.GetLength(0)!=mout.GetLength(1)||mout.GetLength(0)!=M) throw new Exception("ATBA 输入错误!");for(int i=0;i<N;i++)for(int j=0;j<N;j++){mout[i,j]=0;for (int r=0;r<M;r++)for(int k=0;k<M;k++)mout[i,j]=mout[i,j]+m1[k,i]*m2[k,r]*m1[r,j];}}public static void ABAT(double[,] m1,double [,] m2,ref double [,] mout) {int M,N;M=m1.GetLength(0);N=m1.GetLength(1);if (mout.GetLength(0)!=mout.GetLength(1)||mout.GetLength(0)!=M) throw new Exception("ATBA 输入错误!");for(int i=0;i<M;i++)for(int j=0;j<M;j++){mout[i,j]=0;for (int r=0;r<N;r++)for(int k=0;k<N;k++)mout[i,j]=mout[i,j]+m1[i,k]*m2[k,r]*m1[j,r];}}public static void Inv(double[,] c) {double temp=0;int i,j,k,N=c.GetLength(0);//debugfor(i=1;i<N;i++)for(j=0;j<i;j++)c[i,j]=0;for(i=0;i<N;i++){for(j=i;j<N;j++){temp=c[i,j];for(k=0;k<i;k++)temp=temp-c[k,i]*c[k,j]/c[k,k]; if (j==i)c[i,j]=1/temp;elsec[i,j]=temp*c[i,i];}}for(i=0;i<N-1;i++){for(j=i+1;j<N;j++){temp=-c[i,j];for(k=i+1;k<j;k++){temp=temp-c[i,k]*c[k,j];}c[i,j]=temp;}}for(i=0;i<N-1;i++){for(j=i;j<N;j++){if(j==i)temp=c[i,j];elsetemp=c[i,j]*c[j,j];for(k=j+1;k<N;k++)temp=temp+c[i,k]*c[j,k]*c[k,k];c[i,j]=temp;}}for(i=1;i<N;i++)for(j=0;j<i;j++)c[i,j]=c[j,i];}public static void DEBUG_DUMP(double[,] m1){int M,N;string buf;M=m1.GetLength(0);N=m1.GetLength(1);Debug.WriteLine("****************debug matrix****************"); for(int i=0;i<M;i++){buf="";for(int j=0;j<N;j++){buf+=m1[i,j].ToString("0.000000");buf+=",";}Debug.WriteLine(buf);}Debug.WriteLine("**************** end ****************");}}。

WGS84座标与北京54坐标的转换(2003)

WGS84座标与北京54坐标的转换(2003)

GARMIN GPS60所测WGS84坐标转换至北京54坐标或西安80坐标的方法一、坐标转换坐标表示方法有:经纬度和高程、空间直角坐标、平面坐标和高程等三种。

WGS-84坐标为经纬度和高程,北京54坐标是平面坐标和高程。

在同一个椭球里的坐标转换是严密的,而在不同的椭球之间的转换是不严密的。

WGS-84坐标和北京54坐标之间是不存在一套转换参数可以全国通用的,在每个地方会不一样,因为它们是两个不同的椭球基准。

两个椭球间的坐标转换:一般而言比较严密的是用七参数法(包括布尔莎模型,一步法模型,海尔曼特等),即X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度变化K。

要求得七参数就需要在一个地区需要3个以上的已知点,如果区域范围不大,最远点间的距离不大于30Km(经验值),这可以用三参数(莫洛登斯基模型),即X平移,Y平移,Z 平移,而将X旋转,Y旋转,Z旋转,尺度变化K视为0,所以三参数只是七参数的一种特例。

在一个椭球的不同坐标系中转换可能会用到平面转换,现阶段一般分为四参数和平面网格拟合两种方法,以四参数法在国内用的较多。

另外,还有高程拟合的问题,大地水准面模型在国内用户中很少会用到,但在国际上已经是标准之一,本软件提供最常用的EGM96模型和Geoid99模型。

二、转换步骤1.采集WGS84坐标收集测区控制点坐标或明显地物标志点若干,用GARMIN GPS60测定测区的这些点的WGS84坐标。

2.计算GARMIN GPS60校正参数①打开COORD GM程序②新建坐标转换文件③根据所测测区的WGS84坐标设定地图投影参数,设定中央子午线④根据测区大小选定三参数法或七参数,并计算得到椭球转换参数⑤保存转换参数,下次使用时,打开文件调入既可3.将椭球转换参数输入GARMIN GPS60①MENU→设置→单位→位置格式选“自定义格式”,根据测区的经纬度坐标设定中央子午线,如: E 117°00.000′,其他用默认值②MENU→设置→坐标系统选“User”,DX,DY,DZ分别输入2、④中计算所得的X、Y、Z平移参数;DA,DF分别是两个坐标系椭球体半径和曲率的差值,WGS84转为北京54为:-108m,+0.00000050WGS84转为西安80为:-3m,0(待查)设定完毕后GARMIN GPS60所示坐标将与所用底图坐标系统完全统一。

WGS84与北京54坐标系之间的转换

WGS84与北京54坐标系之间的转换

第一章绪论1.1概述坐标转化并不是一个新的课题,随着测绘事业的发展,全球一体化的形成,越来越要求全球测绘资料的统一。

尤其是在坐标系统的统一方面.原始的大地测量工作主要是依靠光学仪器进行,这样不免受到近地面大气的影响,同时受地球曲率的影响很大,在通视条件上受到很大的限制,从而对全球测绘资料的一体化产生巨大的约束性。

另外由于每一个国家的大地坐标系的建立和发展具有一定的历史特性,仅常用的大地坐标系就有150余个。

在同一个国家,在不同的历史时期由于习惯的改变或经济的发展变化也会采用不同的坐标系统。

例如:在我国建国之后,为了尽快搞好基础建设,我国采用了应用克氏椭球与我国实际相结合的北京54坐标系;随着经济的发展北京54坐标系的缺陷也随之被表露的越来越明显,特别是对我国经济较发达的东南沿海地区的影响表现得更为明显,进而我国开始研究并使用国家80坐标系。

在实际生活中,在一些地区由于国家建设的急需,来不及布设国家统一的大地控制网,而建立局部的独立坐标系。

而后,再将其转换到国家统一的大地控制网中,这些坐标系的变换都离不开坐标值的转化.在国际上,随着1964年美国海军武器实验室对第一代卫星导航系统─NNSS的研制成功,为测绘资料的全球一体化提供了可能。

到1972年,经过美国国防部的批准,开始了第二代卫星导航系统的开发研究工作,即为现在所说的GPS。

此套卫星导航系统满足了全球范围、全天候、连续实时以及三维导航和定位的要求.正是由于GPS卫星的这些特性,这种技术就很快被广大测绘工作者接受。

是由于坐标系统的不同,对GPS技术的推广使用造成了一定的障碍。

这样坐标转换的问题再一次被提到了重要的位置。

为了描述卫星运动,处理观测数据和表示测站位置,需要建立与之相应的坐标系统。

在GPS测量中,通常采用两种坐标系统,即协议天球坐标系和协议地球坐标系。

其中协议地球坐标系采用的是1984年世界大地坐标系(Word Geodetic System 1984─WGS-84)其主要参数为:长半轴 a=6378137; 扁率 f=1:298.257223563.而我国采用的坐标系并不是WGS-84坐标系而是BJ-54坐标系,这个坐标系是与前苏联的1942年普耳科沃坐标系有关的,其主要参数为: 长半轴 a=6378245; 扁率 f=1:298.3.这就使得同一点在不同的坐标系下有不同的坐标值,这样使测绘资料的使用范围受到很大的限制,并且对GPS系统在我国的广泛使用造成了一定的约束性,对我国的测绘事业的发展不利。

wgs84和北京54坐标转换的一些参数

wgs84和北京54坐标转换的一些参数

主要介绍的是:3参数(七参数)转换法,三参数坐标纠正法一:3参数(七参数)转换法从本质上来说,转换的步骤应该大致遵循这样的规则:首先,将84的经纬度坐标(b84,l84,h84)转换为以地心为中心点的大地坐标(x84,y84,z84);然后根据七参数法(或3参数法)将其转换为54下的地心坐标(x54,y54,z54);然后根据54下的椭球参数,将第二步得到的地心坐标转换为大地坐标(b54,l54,h54);最后根据工程需要以及各种投影(如高斯克吕格)规则进行投影得到对应的投影坐标。

只有在第二步的时候涉及到七个参数的计算,其他的步骤都有现成的公式可供计算,稍后我会将各种论文贴上来。

如果这里涉及到您的利益还请跟我联系,我将马上删除下载链接,我本意只是用于学习使用。

其实如果在公司或者做项目的时候,当对这起个参数要求的很急的时候,我们可以从政府部门或者通过坐标转换软件求出这七个参数或者三个参数,这个可以大大提高效率,节省时间。

这些坐标转换软件有:坐标转换大师(这个不错),coorconvert.exe(一般),coord.exe(这个不错)。

一旦求出了七个参数,可以进行坐标转换的软件除了上述这些小软件可以进行转换外,一些比较有名的gis开发软件或者开发平台都提供了利用七个参数转换整个数据的功能或者提供了转换单个点的功能,这些在arc gis,supermap,mapgis中都有。

二:三参数坐标纠正法这个方法是这次我在实践中得出来的。

因为求出七个参数太过麻烦,所以选用了本方法。

本方法的使用范围为:大比例尺地形图比较适用,如县范围等。

具体方法:1.从测区取出适量的坐标控制点,坐标控制点是些这样的点,他们拥有84下的经纬度坐标,同时也拥有54下的投影坐标;2.取出后利用将经纬度坐标在esupermap平台中编写程序将其转成84下的高斯克吕格投影坐标(可以看成是一种虚假的投影);3.由2步中得到的投影坐标和原54下的投影坐标相比较得到一个差值p1(x1,y1,z1),并将其保存起来;4.重复第二步一直到把所有的点都计算完,计算完后将差值进行汇总并得到一个平均值p(x,y,z).通过此方法得到的三个参数经过测试和验证,他的精度在厘米或者亚米级的进度,这个对于一般的定位来说已经足够了。

北京54坐标与WGS84坐标转换说明

北京54坐标与WGS84坐标转换说明

坐标转换程序说明COOD坐标转换4.2版,无需安装,直接运行即可使用,可以实现、空间直角坐标、大地坐标、平面坐标的七参数或四参数转换。

下面以北京1954坐标系(中央子午线经度123°)平面坐标转换为施工工程坐标系(GWS84椭球,中央子午线经度121-44-05,投影大地高40m)坐标为例,说明四参数平面坐标转换的具体步骤。

1、运行COOD坐标转换程序,程序界面如下图所示:2、计算转换参数单击“坐标转换”下拉菜单,单击“计算四参数”或者在键盘上直接输入字母“C”,进入参数计算,如图2所示:输入坐标转换重合点的源坐标和目标坐标,输入一个点的源坐标和目标坐标后,单击“增加”,然后依次输入下一个重合点的源坐标和目标坐标,一般四参数转换应输入至少3个重合点的坐标,以便对检核参数计算的正确性,也可提高转换精度,最后单击“计算”。

则显示计算结果如下图:随后弹出地方坐标转换参数,如下图:单击“确定”,此时四参数计算完成,软件自动将计算的参数作为当前值,并将参数计算结果保存在名为FourResult的文本文件中,查看COOD坐标转换程序的当前目录,找到FourResult文本文件查看转换误差,该例计算结果如下图:若转换后中误差过大,说明输入的重合点有误,或者重合点误差较大,应重新选择合适的重合点计算转换参数。

确认转换参数无误后,然后单击文件菜单,保存转换项目,例如保存为“54北京坐标系与84施工坐标系转换”。

2、坐标转换首先设置坐标类型和转换参数的类型,源坐标坐标类型为平面坐标,椭球基准为北京-54坐标系,目标坐标类型为平面坐标,椭球基准为WGS-84坐标系,坐标转换参数勾选“四参数转换”如下图所示:(1)单点坐标转换设置好坐标类型和转换参数的类型后,直接在对话框中输入一个控制点的源坐标,单击右侧的“转换坐标”按纽,则在右侧“输出目标坐标”框内显示转换后的坐标值,如下图所示:(2)文件转换对于少量的坐标可以通过单点转换来实现,但是对于批量坐标的转换就应采用文件转换实现比较方便。

WGS84坐标转换到BJ54坐标的方法的实验研究

WGS84坐标转换到BJ54坐标的方法的实验研究

第一章绪论随着GPS 定位精度的不断提高,GPS 技术在测量中的应用也越来越广泛。

但是由于GPS 卫星星历表示于WGS84 坐标系中,算得的GPS 定位结果只能表示在WGS84 全球坐标系中。

WGS84坐标系是一种质心坐标系统,其坐标原点位于地球的质心上。

而我国的国土测量成果和在进行工程施工时大都采用BJ54坐标系,它是一种参心坐标系,它以克拉索夫斯基椭球为参考椭球, 并采用高斯—克吕格投影(等角横切圆锥投影)方式进行投影, 如何实现WGS84地心空间直角坐标系与BJ54在平面直角坐标系的之间的转换,一直是各个部门关心的热点。

在进行WGS84坐标系和BJ54坐标系转换时有两种转换思想和模型,即平面转换模型和空间转换模型。

在平面转换模型中,首先要假定两种坐标系的中心和坐标轴的方向一致,所以只适合小范围内国土测量和工程设计使用,平面转换模型原理简单,数值稳定可靠。

要进行大范围的GPS测量,应该使用空间转换模型。

按实际情况又分为7 参数转换和3 参数转换两种。

鉴于54 坐标点的大地高通常不能精确得知,对这两种转换方法得到的平面坐标的精度进行了比较,得出大地高精度主要表现为对高程的影响,对平面坐标影响较小的结论。

此外,还讨论了7 参数与3 参数模型对转换结果的影响。

第二章坐标系统简介第一节坐标系统2.1坐标系统所谓的坐标系指的是描述空间位置的表达形式,即采用什么方法表示空间位置。

人们为了描述空间位置,采用了多种方法,从而产生了不同的坐标系。

在各种测量中,经常使用的坐标系有3种类型。

2.1.1 空间直角坐标系空间直角坐标系的原点位于参考椭球的中心,Z轴指向参考椭球的北极,X轴指向起始子午面与赤道的交点,Y轴位于赤道的平面上,且按右手系于X轴成90°夹角。

(见图2—1)图2—1空间直角坐标系2.1.2 空间大地坐标系空间大地坐标系是采用大地经度和大地高来描述空间位置的。

纬度(B)是空间的点与参考椭球面的法线与赤道面的夹角,经度(L)是空间中的点与参考椭球的自转轴所在的面与参考椭球的起始子午面的夹角,大地高(H)是空间点沿参考椭球的法线的方向到参考椭球面的距离。

WGS_84坐标与北京坐标系之间的坐标转换计算

WGS_84坐标与北京坐标系之间的坐标转换计算

= 29°53′24.
″906
λ B
= 122°25′39.
″440
反解验算 :
MB = 6 351 382. 650m NB = 6 383 552. 783m
Δa = - 108m
Δf = 0. 000 000 4817
Δφ = 0. ″130
Δλ = 3. ″052
φ W
= 29°53′25.
正值 。
Δφ″= ( p″/M ) 〔 - ΔX sinφcosλ - Δysinφsinλ +
ΔZ cosφ + ( aΔf + Δf a) sin2φ〕
(2)
Δλ″= ( p″/N cosφ) ( - ΔX sinλ +Δycosλ)
(3)
式中 p″= 206265″,ΔX、Δy、ΔZ 为新坐标系相对
[ 2 ] 陈士银. 新旧地形图转换方法和需注意的问题〔J 〕. 测绘通报 , 1991 ( 2) : 8~12
[ 3 ] 李纪东. 浅论不同大地坐标系的转换方法〔C〕. 第十五届海洋 测绘综合性学术研讨会论文集 、中国测绘学会海洋测绘专业
委员会 , 2003: 319~323
11
现在天津港正在积极建造 2艘大功率拖轮 ,要 为天津港 150 000 t级船舶提供港口服务 。从主机功 率上说 ,应该为 150 000 t ×5% = 5 475kW 也就是说 需要 5 475kW 的拖力 ,如果这个拖力由 2艘拖轮来 提供 ,则每艘拖轮提供 2 737kW 的拖力 。就目前天 津港 的 拖 轮 情 况 看 , 最 大 功 率 的 拖 轮 是 2 艘 2 920kW 的 ,单从数据上看 , 2 920kW 大于 2 737kW , 足以满足 150 000 t船舶的使用要求 ,但根据主机功 率与主机转速的立方成正比的关系来看 ,以主机的 最高转速为 750 r/m in计算 ,则拖轮应发挥 94%的功 率即主机应以 734 r/m in连续工作 ,显然这对拖轮来 说是非常困难的 。而如果 3 650kW 拖轮投入生产 以后 ,只要发挥 75%的功率就可以满足 150 000 t大 船的操纵要求 ,这在实际当中是完全可行的 。

基于MATLAB的WGS84坐标向北京54坐标转换

基于MATLAB的WGS84坐标向北京54坐标转换

的G S J P  ̄ 量成果转化 为北京5 坐标或西安‘唑 标 、 4 , I WG o 坐标 系是地心空 间直角坐 标系 ,坐标原 点位于地 球的质 S4 量 中心 , 轴指 rB H 9 4 J x u I 18 . 】 1 的协议子午面和C P T 赤道 的交点 , 轴与 Y z 、 轴垂直构成右手坐标 系,称 为 轴 X 18 年世界大地坐标系 其长半轴 为 94
6 7 1 70 3 8 3 .m,短 半 轴 为 6 5 7 23 4 m 3 6 5 .1 2
2;15 4 ; 33  ̄ :3 4 t, 8 4 2 224 3 “7 5 13

2 31 R +2 R  ̄g 7 2 2 2b ̄ t S SI , , l 3 2 55 ,65 3 s 2 7
足 工 程 测 量 的 需 要
关键词 Maa 七参数 tb l
最小二 乘法
坐标 系转换
Ⅵ ( 4坐标 系 t F 尘 直 自±


随着G S P 技术的发 展 ,G S ! P  ̄ 量在地 形 测绘 和各类工程测量 中 J f 的应用也越 来越广 ,各地 都有大量f GP i 量成果 而我国 目前的测 l SJ ( J l ! ] J
自 ± * 7
 ̄ w 93)1 5 2 t' 72 3 2 6, 4l 2 "2 t33 3 4u2 1 I t 4615' ' 4  ̄ 79Ⅲ 4 2 i-n f " t‘ ) " ・ ̄) 47 7 2 7 q3 46 9 64t 3 q4 H 4 ,0 t2 5 ̄1 l

始子午面 的二面角 为L( 大地 经度 ) 点的法线 P 与赤道面 的夹角 ,P N 为B ( 大地 纬度 ),H为大地 高即地 面上 一点到椭 球面的距离 我国 1 5 年在通过 对前苏联 14 年坐际 系的延 伸 ,大地原点在前苏联的普 94 92 尔科沃 ,北京5 坐标 是参心坐标系 ,坐标采用的椭球是克拉索夫斯基 4 椭球 。其长 半轴为6 7 2 5 3 8 4 m,短半轴 为6 5 8 3 1 73 4 3 3 66 . 8 7 0 7m,扁率 0

WGS84与北京54坐标系之间的转换

WGS84与北京54坐标系之间的转换

第一章绪论1.1概述坐标转化并不是一个新的课题,随着测绘事业的发展,全球一体化的形成,越来越要求全球测绘资料的统一。

尤其是在坐标系统的统一方面.原始的大地测量工作主要是依靠光学仪器进行,这样不免受到近地面大气的影响,同时受地球曲率的影响很大,在通视条件上受到很大的限制,从而对全球测绘资料的一体化产生巨大的约束性。

另外由于每一个国家的大地坐标系的建立和发展具有一定的历史特性,仅常用的大地坐标系就有150余个。

在同一个国家,在不同的历史时期由于习惯的改变或经济的发展变化也会采用不同的坐标系统。

例如:在我国建国之后,为了尽快搞好基础建设,我国采用了应用克氏椭球与我国实际相结合的北京54坐标系;随着经济的发展北京54坐标系的缺陷也随之被表露的越来越明显,特别是对我国经济较发达的东南沿海地区的影响表现得更为明显,进而我国开始研究并使用国家80坐标系。

在实际生活中,在一些地区由于国家建设的急需,来不及布设国家统一的大地控制网,而建立局部的独立坐标系。

而后,再将其转换到国家统一的大地控制网中,这些坐标系的变换都离不开坐标值的转化.在国际上,随着1964年美国海军武器实验室对第一代卫星导航系统─NNSS的研制成功,为测绘资料的全球一体化提供了可能。

到1972年,经过美国国防部的批准,开始了第二代卫星导航系统的开发研究工作,即为现在所说的GPS。

此套卫星导航系统满足了全球范围、全天候、连续实时以及三维导航和定位的要求.正是由于GPS卫星的这些特性,这种技术就很快被广大测绘工作者接受。

是由于坐标系统的不同,对GPS技术的推广使用造成了一定的障碍。

这样坐标转换的问题再一次被提到了重要的位置。

为了描述卫星运动,处理观测数据和表示测站位置,需要建立与之相应的坐标系统。

在GPS测量中,通常采用两种坐标系统,即协议天球坐标系和协议地球坐标系。

其中协议地球坐标系采用的是1984年世界大地坐标系(Word Geodetic System 1984─WGS-84)其主要参数为:长半轴 a=6378137; 扁率 f=1:298.257223563.而我国采用的坐标系并不是WGS-84坐标系而是BJ-54坐标系,这个坐标系是与前苏联的1942年普耳科沃坐标系有关的,其主要参数为: 长半轴 a=6378245; 扁率 f=1:298.3.这就使得同一点在不同的坐标系下有不同的坐标值,这样使测绘资料的使用范围受到很大的限制,并且对GPS系统在我国的广泛使用造成了一定的约束性,对我国的测绘事业的发展不利。

部分各地WGS84坐标系转换BJ54坐标系参数

部分各地WGS84坐标系转换BJ54坐标系参数

DF= 0.0000005 中央子午经度:117 鄂尔多斯市省坐标转换区域化参数: DX = 16 DY = -147 DZ = -77 DA= -108; DF= 0.0000005 中央子午经度:111
新疆阿克苏地区坐标转换参数: DX = 18 DY = -152 DZ = -76 DA= -108; DF= 0.0000005 中央子午经度:81
新疆阿克苏地区坐标转换参数: DX = 18 DY = -152 DZ = -76 DA= -108; DF= 0.0000005 中央子午经度:81
西藏坐标转换区域化参数: DX = 11.9 DY = -120.8 DZ = -62.4 DA= -108; DF= 0.0000005 中央子午经度:93
Dx=-4 Dy=-104 Dz=-45 Da=-108 Df=+0.0000005 中央子午经度:105 包头地区坐标系转换参数 Dx=-92 Dy=-49 Dz=-4 Da=-108 Df=+0.0000005 中央子午经度:114 安徽省坐标转换区域化参数: DX = -15 DY = -120 DZ = -48 DA= -108; DF= 0.0000005 中央子午经度:117 鄂尔多斯市省坐标转换区域化参数: DX = 16 DY = -147 DZ = -77 DA= -108; DF= 0.0000005 中央子午经度:111 新疆阿克苏地区坐标转换参数: DX = 18 DY = -152 DZ = -76 DA= -108; DF= 0.0000005 中央子午经度:81 西藏坐标转换区域化参数: DX = 11.9 DY = -120.8 DZ = -62.4 DA= -108; DF= 0.0000005 中央子午经度:93 赤峰地区坐标转换参数: DX = -18 DY = -104.5

WGS-84坐标与 BJ-54坐标之间的坐标转换问题

WGS-84坐标与 BJ-54坐标之间的坐标转换问题

WGS-84坐标与 BJ-54坐标之间的坐标转换问题
杨玉华;郭圣权
【期刊名称】《科技情报开发与经济》
【年(卷),期】2004(014)003
【摘要】主要介绍了WGS-84坐标与BJ-54坐标的坐标变换参数的求解方法,分别采用7参数法和3参数法求解转换参数,并对比分析了不同的转换方法和转换参数对定位精度的影响.
【总页数】3页(P165-167)
【作者】杨玉华;郭圣权
【作者单位】华北工学院,山西太原,030051;华北工学院,山西太原,030051
【正文语种】中文
【中图分类】V44
【相关文献】
1.空管系统中WGS-84与BJ-54坐标转换 [J], 梁海军;张建伟
2.WGS-84坐标与BJ-54坐标转换的方法及应用 [J], 李宇廷
3.WGS-84坐标与北京坐标系之间的坐标转换计算 [J], 丁佳波
4.济宁矿区BJ-54至WGS-84坐标转换模型改进及精度分析 [J], 刘永义;党亚民;郑作亚
5.关于利用七参数法进行WGS-84和BJ-54坐标转换问题的探讨 [J], 徐仕琪;张晓帆;周可法;赵同阳
因版权原因,仅展示原文概要,查看原文内容请购买。

WGS84坐标转换为北京54坐标流程

WGS84坐标转换为北京54坐标流程

WGS84坐标转换为北京54坐标流程1.了解WGS84和北京54的坐标系统:WGS84是全球定位系统(GPS)所采用的经度、纬度坐标系,而北京54是中国国内所采用的大地坐标系。

2.收集WGS84坐标数据:获取到需要转换的WGS84坐标数据,可以通过GPS设备或者地图软件获取。

3.设置转换参数:根据具体的需求,选择相应的转换参数。

一般来说,可以选择7参数转换或者带变形参数转换,其中7参数转换一般误差较小,而带变形参数转换可以更加精确。

4.进行转换计算:利用所选的转换参数,将WGS84坐标数据转换为北京54坐标数据。

转换计算可以通过编程实现,也可以使用专门的坐标转换软件。

5.校验转换结果:将转换后的北京54坐标与其他已知的北京54坐标进行对比,检查转换结果的准确性。

可以利用已知的北京54坐标点进行验证。

6.保存和输出转换结果:将转换后的北京54坐标数据保存下来,并进行输出。

可以将结果输出为文本格式或者图形格式,便于后续的使用和处理。

需要注意的是,在进行坐标转换过程中,可能会出现一定的误差。

这是由于坐标系统的不同、地球椭球体的模型差异等原因所导致的。

因此,在进行坐标转换时,需要根据具体的应用场景和精度要求,选择适当的转换方法和参数。

此外,对于经纬度坐标的转换,还需要考虑一些特殊情况,比如跨越180度经线的坐标点,或者在地球极地区域的坐标点转换等。

在进行转换计算时,需要对这些特殊情况进行处理,以保证结果的准确性。

总的来说,将WGS84坐标转换为北京54坐标是一个常见的坐标转换过程,在实际操作中,可以根据具体的需求和精度要求,选择适当的转换方法和参数,以达到预期的转换效果。

WGS84坐标与北京54坐标转换

WGS84坐标与北京54坐标转换

WGS84坐标与北京54坐标转换1. 椭球体、基准面及地图投影GIS中的坐标系定义是GIS系统的基础,正确定义GIS系统的坐标系非常重要。

GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐标系,首先必须弄清地球椭球体(Ellipsoid)、大地基准面(Datum)及地图投影(Projection)三者的基本概念及它们之间的关系。

基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面,我们通常称谓的北京54坐标系、西安80坐标系实际上指的是我国的两个大地基准面。

我国参照前苏联从1953年起采用克拉索夫斯基(Krassovsky)椭球体建立了我国的北京54坐标系,1978年采用国际大地测量协会推荐的1975地球椭球体建立了我国新的大地坐标系--西安80坐标系,目前大地测量基本上仍以北京54坐标系作为参照,北京54与西安80坐标之间的转换可查阅国家测绘局公布的对照表。

WGS1984基准面采用WGS84椭球体,它是一地心坐标系,即以地心作为椭球体中心,目前GPS测量数据多以WGS1984为基准。

上述3个椭球体参数如下:椭球体与基准面之间的关系是一对多的关系,也就是基准面是在椭球体基础上建立的,但椭球体不能代表基准面,同样的椭球体能定义不同的基准面,如前苏联的Pulkovo 1942、非洲索马里的Afgooye 基准面都采用了Krassovsky椭球体,但它们的基准面显然是不同的。

地图投影是将地图从球面转换到平面的数学变换,如果有人说:该点北京54坐标值为X=4231898,Y=21655933,实际上指的是北京54基准面下的投影坐标,也就是北京54基准面下的经纬度坐标在直角平面坐标上的投影结果。

2. GIS中基准面的定义与转换虽然现有GIS平台中都预定义有上百个基准面供用户选用,但均没有我们国家的基准面定义。

北京54坐标与WGS84坐标转换说明

北京54坐标与WGS84坐标转换说明

坐标转换程序说明COOD坐标转换4.2版,无需安装,直接运行即可使用,可以实现、空间直角坐标、大地坐标、平面坐标的七参数或四参数转换。

下面以北京1954坐标系(中央子午线经度123°)平面坐标转换为施工工程坐标系(GWS84椭球,中央子午线经度121-44-05,投影大地高40m)坐标为例,说明四参数平面坐标转换的具体步骤。

1、运行COOD坐标转换程序,程序界面如下图所示:2、计算转换参数单击“坐标转换”下拉菜单,单击“计算四参数”或者在键盘上直接输入字母“C”,进入参数计算,如图2所示:输入坐标转换重合点的源坐标和目标坐标,输入一个点的源坐标和目标坐标后,单击“增加”,然后依次输入下一个重合点的源坐标和目标坐标,一般四参数转换应输入至少3个重合点的坐标,以便对检核参数计算的正确性,也可提高转换精度,最后单击“计算”。

则显示计算结果如下图:随后弹出地方坐标转换参数,如下图:单击“确定”,此时四参数计算完成,软件自动将计算的参数作为当前值,并将参数计算结果保存在名为FourResult的文本文件中,查看COOD坐标转换程序的当前目录,找到FourResult文本文件查看转换误差,该例计算结果如下图:若转换后中误差过大,说明输入的重合点有误,或者重合点误差较大,应重新选择合适的重合点计算转换参数。

确认转换参数无误后,然后单击文件菜单,保存转换项目,例如保存为“54北京坐标系与84施工坐标系转换”。

2、坐标转换首先设置坐标类型和转换参数的类型,源坐标坐标类型为平面坐标,椭球基准为北京-54坐标系,目标坐标类型为平面坐标,椭球基准为WGS-84坐标系,坐标转换参数勾选“四参数转换”如下图所示:(1)单点坐标转换设置好坐标类型和转换参数的类型后,直接在对话框中输入一个控制点的源坐标,单击右侧的“转换坐标”按纽,则在右侧“输出目标坐标”框内显示转换后的坐标值,如下图所示:(2)文件转换对于少量的坐标可以通过单点转换来实现,但是对于批量坐标的转换就应采用文件转换实现比较方便。

WGS_84和BJ54坐标转换问题的分析

WGS_84和BJ54坐标转换问题的分析

收稿日期:2008-04-16作者简介:张灿(1974-),男,安徽六安人,毕业于同济大学,硕士,工程师。

0引言随着GPS定位精度的发展,GPS技术在测量中的应用也越来越广泛。

但是GPS定位的结果是位于WGS-84坐标系统中,WGS-84坐标是一个协议地球参考系,其坐标原点位于地球的质心上。

而我国测绘成果普遍表示在BJ54和1980年国家大地坐标系下,它是参心坐标系,BJ54生标系是以克拉索夫斯基椭球为参考椭球,采用高斯投影方式进行投影。

因此,需要将GPS测量得到的位于WGS-84坐标系的成果转换到BJ54坐标系下。

在进行WGS-84坐标系和BJ54坐标系转换时有两种转换思想和模型,即平面转换模型和空间转换模型。

1平面转换模型假设BJ54椭球的中心和坐标轴与WGS-84椭球一致,可通过平面转换模型,将GPS定位得到的大地经纬度和大地高通过以下过程转换为平面坐标。

①在WGS-84椭球参数约束下将WGS-84大地坐标转换为WGS-84空间直角坐标;X=(N+H)cosBcosLY=(N+H)cosBsinLZ=[N(1-e2)+H]sin!###"###$B(1)②将WGS-84空间直角坐标等同于BJ54坐标系下的空间直角坐标,将其在BJ54椭球参数约束下转换为假定的大地坐标;L=arctan(YX)B=arctan[(Z+Ne2sinB)/X2+Y2%]H=X2+Y2%secB-!#####"#####$N(2)③取当地中央子午线,将假定的地方大地坐标通过高斯投影转换成假定地方平面坐标;④通过平面转换模型将假定的地方平面坐标转换成地方平面坐标。

平面转换模型见式(3)。

xgyg&’=x0y0&(+(1+r)R(ψ)x'gy'g&((3)其中:(x'g.y'g)T为假定的地方平面坐标;(xg,yg)T为地方平面坐标;(x0,y0)T为坐标平移量;r为缩放尺度;R(ψ)=cos(ψ)sin(ψ)-sin(ψ)cos(ψ&()为旋转矩阵;ψ为旋转角。

用七参数法实现WGS84到北京54的坐标转换

用七参数法实现WGS84到北京54的坐标转换

用七参数法实现WGS84到北京54的坐标转换七参数法是一种常用的坐标转换方法,可以将WGS84坐标转换为北京54坐标。

在进行坐标转换之前,我们需要了解七参数法的原理和步骤。

七参数法的原理是通过七个参数对坐标进行转换,这七个参数分别是平移参数(dx, dy, dz),旋转参数(rx, ry, rz)和缩放参数(s)。

平移参数表示两个坐标系之间的平移量,旋转参数表示两个坐标系之间的旋转角度,缩放参数表示两个坐标系之间的比例关系。

通过这七个参数可以实现坐标的精确转换。

下面是使用七参数法将WGS84坐标转换为北京54坐标的步骤:步骤1:确定七参数的值七参数的值可以通过大地测量和控制点的观测数据来确定。

通常情况下,我们可以使用大地测量仪器进行观测,并使用专业的数据处理软件计算出七参数的值。

步骤2:计算WGS84坐标系的平移矩阵T平移矩阵T可以通过平移参数(dx, dy, dz)来计算,其表达式如下:T = [[1, 0, 0, dx],[0, 1, 0, dy],[0, 0, 1, dz],[0,0,0,1]]步骤3:计算WGS84坐标系的旋转矩阵R旋转矩阵R可以通过旋转参数(rx, ry, rz)来计算,其表达式如下:Rx=[[1,0,0],[0, cos(rx), -sin(rx)],[0, sin(rx), cos(rx)]]Ry = [[cos(ry), 0, sin(ry)],[0,1,0],[-sin(ry), 0, cos(ry)]]Rz = [[cos(rz), -sin(rz), 0],[sin(rz), cos(rz), 0],[0,0,1]]R=Rz*Ry*Rx步骤4:计算WGS84坐标系到北京54坐标系的坐标转换矩阵M坐标转换矩阵M可以通过平移矩阵T、旋转矩阵R和缩放参数s来计算,其表达式如下:M=s*R*T步骤5:使用坐标转换矩阵M将WGS84坐标转换为北京54坐标给定一个WGS84坐标P(WGS84_x,WGS84_y,WGS84_z),其对应的北京54坐标P54可以通过矩阵运算计算得到:P54=M*P以上步骤描述了通过七参数法实现WGS84到北京54坐标转换的具体过程。

部分各地WGS84坐标系转换BJ54坐标系参数

部分各地WGS84坐标系转换BJ54坐标系参数

部分各地WGS84坐标系转换BJ54坐标系参数WGS84坐标系(World Geodetic System 1984)是由美国国防部制定的一种全球地理坐标系。

它通过地球表面的经纬度来表示位置,被广泛用于全球定位系统(GPS)和地理信息系统(GIS)等领域。

BJ54坐标系(Beijing 1954)是中国国家标准的地理坐标系,主要用于中国大陆境内的测绘和地理信息应用。

它是基于1954年在北京进行的地球物理大地测量所建立的。

在进行WGS84坐标系到BJ54坐标系的转换时,需要使用一组坐标转换参数,以确保精确的转换结果。

以下是部分各地区的WGS84到BJ54坐标系的转换参数:
1.北京地区:
-平移参数:
-旋转参数:
-尺度参数:-2.4989×10^-6
2.上海地区:
-平移参数:
-X轴偏移:-235.0米
-Y轴偏移:-85.0米
-Z轴偏移:-47.0米
-旋转参数:
-绕X轴旋转:-11.0秒
-绕Y轴旋转:-2.0秒
-绕Z轴旋转:-9.0秒
-尺度参数:0.994
3.广州地区:
-平移参数:
-X轴偏移:-235.6318米
-Y轴偏移:-85.6829米
-Z轴偏移:-69.6162米
-旋转参数:
-尺度参数:0.998
以上是部分地区WGS84坐标系到BJ54坐标系的转换参数。

不同地区
的参数可能略有不同,具体的转换参数可根据需要进行查询和获取。

使用
这些参数,可以将WGS84坐标系的经纬度转换为BJ54坐标系的平面坐标,以满足特定测绘和地理信息应用的需求。

WGS84与BJ54坐标系转换代码

WGS84与BJ54坐标系转换代码

public class CoordTrans7Param{public double[,] values=new double[7,1];//{{dx},{dy},{dz},{rx},{ry},{rz},{k}};//public double dx,dy,dz,rx,ry,rz,k;public void Set4Param(double dx,double dy,double dz,double k) {this.dx=dx;this.dy=dy;this.dz=dz;this.k=k;this.rx=this.ry=this.rz=0;}public void SetRotationParamRad(double rx,double ry,double rz) {this.rx=rx;this.ry=ry;this.rz=rz;}public void SetRotationParamMM(double rx,double ry,double rz) {SetRotationParamRad(rx*Math.PI/,ry*Math.PI/,rz*Math.PI/);}private double[,] GetMx(){double [,] Mx=new double[,]{{1,0,0},{0,Math.Cos(rx),Math.Sin(rx)},{0,-Math.Sin(rx),Math.Cos(rx)}};return Mx;}private double[,] GetMy(){double [,] My=new double[,]{{Math.Cos(ry),0,-Math.Sin(ry)},{0,1,0},{Math.Sin(ry),0,Math.Cos(ry)}};return My;}private double[,] GetMz(){double [,] Mz=new double[,]{{Math.Cos(rz),Math.Sin(rz),0},{-Math.Sin(rz),Math.Cos(rz),0},{0,0,1}};return Mz;}private double[,] GetM() //M=Mx*My*Mz? or M=Mz*My*Mx? {double [,] M=new double[3,3];MatrixTool.Multi(GetMz(),GetMy(),ref M);MatrixTool.Multi(M,GetMx(),ref M);return M;}private double[,] GetMdx(){double[,] mt = {{ 0, 0, 0 },{ 0, -Math.Sin(rx), Math.Cos(rx) },{ 0, -Math.Cos(rx), -Math.Sin(rx) }};double[,] m=new double[3,3];MatrixTool.Multi(GetMz(),GetMy(),ref m);MatrixTool.Multi(m,mt,ref m);return m;}private double[,] GetMdy(){double[,] mt = {{ -Math.Sin(ry), 0, -Math.Cos(ry) }, { 0, 0, 0 },{ Math.Cos(ry), 0, -Math.Sin(ry) }};double[,] m=new double[3,3];MatrixTool.Multi(GetMz(),mt,ref m);MatrixTool.Multi(m,GetMx(),ref m);return m;}private double[,] GetMdz(){double[,] mt = {{ -Math.Sin(rz), Math.Cos(rz), 0 }, { -Math.Cos(rz), -Math.Sin(rz), 0 },{ 0, 0, 0 }};double[,] m=new double[3,3];MatrixTool.Multi(mt,GetMy(),ref m);MatrixTool.Multi(m,GetMx(),ref m);return m;}private double[,] specialMulti(double[,] m,double[,] X){int rowNumM=m.GetLength(0);int colNumM=m.GetLength(1);int rowNumX=X.GetLength(0);int colNumX=X.GetLength(1);int lines=rowNumX/colNumM;double[,] mt=MatrixTool.Init(rowNumM,colNumX);double[,] subX=MatrixTool.Init(colNumM,colNumX);double[,] res=MatrixTool.Init(rowNumM*lines,colNumX);for(int i=0;i<lines;i++){MatrixTool.CopySub(X,i*colNumM,0,colNumM,colNumX,ref subX,0,0); MatrixTool.Multi(m,subX,ref mt);MatrixTool.CopySub(mt,0,0,rowNumM,colNumX,ref res,i*rowNumM,0); }return res;}private double[,] specialSub(double[,] m,double[,] X){int rowNumM=m.GetLength(0);int colNumM=m.GetLength(1);int rowNumX=X.GetLength(0);int colNumX=X.GetLength(1);int lines=rowNumX/rowNumM;double[,] subX=MatrixTool.Init(rowNumM,colNumX);double[,] res=MatrixTool.Init(rowNumX,colNumX);for(int i=0;i<rowNumX;i+=rowNumM){MatrixTool.CopySub(X,i,0,rowNumM,colNumX,ref subX,0,0); MatrixTool.Sub(m,subX,ref subX);MatrixTool.CopySub(subX,0,0,rowNumM,colNumX,ref res,i,0);}return res;}private double[,] GetF(double[,] X,double[,] Y)double[,] f0;double[,] qx=MatrixTool.Init(X.GetLength(0),1); double[,] K={{-dx},{-dy},{-dz}};double[,] S={{1+k}};MatrixTool.Multi(X,S,ref qx);double [,] M=GetM();qx=specialMulti(M,qx);MatrixTool.Sub(qx,Y,ref qx);f0=specialSub(K,qx);return f0;}private double[,] GetB(double[,] X){int rowNum=X.GetLength(0);double[,] B=MatrixTool.Init(rowNum,7);double[,] M=GetM();double[,] Mdx=GetMdx();double[,] Mdy=GetMdy();double[,] Mdz=GetMdz();double[,] mi=MatrixTool.Ident(3);double[,] MX,MY,MZ,MK;MK=specialMulti(M,X);MX=specialMulti(Mdx,X);MY=specialMulti(Mdy,X);MZ=specialMulti(Mdz,X);for(int i=0;i<rowNum;i+=3)MatrixTool.CopySub(mi,0,0,3,3,ref B,i,0); MatrixTool.CopySub(MX,0,0,rowNum,1,ref B,0,3); MatrixTool.CopySub(MY,0,0,rowNum,1,ref B,0,4); MatrixTool.CopySub(MZ,0,0,rowNum,1,ref B,0,5); MatrixTool.CopySub(MK,0,0,rowNum,1,ref B,0,6); return B;}private double[,] GetA(){double[,] M=GetM();double[,] I2=MatrixTool.Ident(3);double[,] A=MatrixTool.Init(3,6);MatrixTool.MutliConst(ref I2,-1);MatrixTool.MutliConst(ref M,(1+k));MatrixTool.CopySub(M,0,0,3,3,ref A,0,0);MatrixTool.CopySub(I2,0,0,3,3,ref A,0,3);return A;}private double[,] GetV(double[,] X,double[,] Y,CoordTrans7Param dpp) {int rowNum=X.GetLength(0);double[,] B,F,A,B2,B3,F2,V;double[,] AT=MatrixTool.Init(6,3);A=GetA();MatrixTool.AT(A,ref AT);MatrixTool.MutliConst(ref AT,1/(1+(1+k)*(1+k)));F=GetF(X,Y);B=GetB(X);B2=MatrixTool.Init(3,7);B3=MatrixTool.Init(3,1);F2=MatrixTool.Init(rowNum,1);for(int i=0;i<rowNum/3;i++){MatrixTool.CopySub(B,i*3,0,3,7,ref B2,0,0);MatrixTool.Multi(B2,dpp.values,ref B3);MatrixTool.CopySub(B3,0,0,3,1,ref F2,i*3,0);}MatrixTool.Sub(F,F2,ref F2);V=specialMulti(AT,F2);return V;}public double CalculateTrans7Param(double[,] X,double[,] Y){int PtNum=X.GetLength(0)/3;double[,] B;double[,] F;double[,] BT=MatrixTool.Init(7,3*PtNum);double[,] BTB=MatrixTool.Init(7,7);double[,] BTF=MatrixTool.Init(7,1);//init pararmCoordTrans7Param dpp=new CoordTrans7Param();Set4Param(0,0,0,0);this.SetRotationParamMM(0,0,0);//debug//this.TransCoord(X[0,0],X[1,0],X[2,0],out x2,out y2,out z2);int round=0;while(round++<20){F=GetF(X,Y);B=GetB(X);MatrixTool.AT(B,ref BT);MatrixTool.Multi(BT,B,ref BTB);MatrixTool.Inv(BTB);MatrixTool.Multi(BT,F,ref BTF);MatrixTool.Multi(BTB,BTF,ref dpp.values);if (dpp.isSmall())break;elseMatrixTool.Add(this.values,dpp.values,ref this.values);}//this.TransCoord(X[0,0],X[1,0],X[2,0],out x2,out y2,out z2);double[,] V=GetV(X,Y,dpp);double vMax=-1;for(int i=0;i<V.GetLength(0);i++){if (Math.Abs(V[i,0])>vMax)vMax=Math.Abs(V[i,0]);}return vMax;}private bool isSmall(){double s=0;for(int i=0;i<7;i++)s+=Math.Abs(values[i,0]);if (s<0.)return true;elsereturn false;}public void TransCoord(double x1,double y1,double z1,out double x2,out double y2,out double z2){double[,] Xi={{x1},{y1},{z1}}; double[,] DX={{dx},{dy},{dz}}; double[,] tY=new double[3,1]; double[,] K={{1+k}};double [,] M=GetM(); MatrixTool.Multi(Xi,K,ref tY); MatrixTool.Multi(M,tY,ref tY); MatrixTool.Add(tY,DX,ref tY); x2=tY[0,0];y2=tY[1,0];z2=tY[2,0];}public double dx{get{return values[0,0];}set{values[0,0]=value;}}public double dy{get{return values[1,0];}set{values[1,0]=value;}}public double dz{get{return values[2,0];}setvalues[2,0]=value; }}public double rx {get{return values[3,0]; }set{values[3,0]=value; }}public double ry {get{return values[4,0]; }set{values[4,0]=value; }}public double rz {get{return values[5,0]; }set{values[5,0]=value; }}public double k {get{return values[6,0]; }setvalues[6,0]=value; }}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(ATA)B=ATY[5]
(6)
利用MATLAB求解矩阵的逆和转置都比较方便,避免了写程序
求 解 超 定 方 程 的 复 杂 性 , 式 ( 5 ) 转 换 为 MATLAB求 解 公 式 为
inv(AT*A)*(AT*Y)[6][7]。
选取表1中的前四个已知点坐标,利用公式(6)求出参数B7为 [163.27144277096, -9746.33913654089, -854.98293349147,
19 内江科技 2011年第10期
学术研讨
基于MATLAB的WGS84坐标向北京54坐标转换
伍 霁 ①② 曹 娜 ③
(①武汉大学资源与环境科学学院 ②四川省林业调查规划院 ③中国石油集团工程设计有限责任公司西南分公司)
摘 要 GPS坐标是以WGS 84大地坐标系为基础建立的,而在我国使用最多是1954北京坐标系。因此,在工程测量中常常需要将 GPS接收机获得的WGS84坐标转换成北京54坐标。本文基于坐标转换的七参数模型和三参数模型,利用MATLAB和最小二乘法求解出 了WGS84坐标向北京54坐标转换的七参数和三参数,并对七参数和三参数的坐标转换进行了精度验证和比较,认为七参数能很好的满 足工程测量的需要。
大地高。如图1所示,O为地球质量中
心,A点与椭球旋转轴构成的平面与
椭球体构成的面为起始子午面,椭球
上任一点P与O点构成的子午面与起
图1 WGS84坐标系示意图
始子午面的二面角为L(大地经度),P点的法线PN与赤道面的夹角
为B(大地纬度),H为大地高即地面上一点到椭球面的距离。我国
1954年在通过对前苏联1942年坐标系的延伸,大地原点在前苏联的普
为七参数模型,式(1)是一个严密的转换模型,求解7个参数理论上
需要7个方程,因此至少需要3个相应两种坐标系下的公共已知点坐
标。
当式(1)中不求旋转参数和尺度常数时,则式(1)转换为三参
数模型即为:
(2)
此时只需要一个公共点求解。 2 参数求解
已知分别在WGS84和北京54坐标系下公共点坐标为:
表1 已知公共点已知坐标 (1)七参数求解。对于式(1),当有3个已知大于3个相应两种 坐标系下的公共已知点坐标,此时有大于等于9个方程,而参数只有 7个,属于超定方程,求解超定方程采用最小二乘解求参数,可以使 误差达到最小。将式(1)转换为:
(8)
式中xi-x为转换的坐标和已知坐标之差。求出七参数的中误差为 RMS7= 0.26046627。
根据求出的三参数计算A2,A3,A4,A5,A6的北京54坐标,代 入公式(8),求出三参数的中误差为RMS3= 2.32371534。
4 结论
针对本文研究坐标区域,七参数的RMS7精度远远大于三参数求 解的精度,但是当研究区域没有足够的已知点时,可以采用三参数求 解,此时仅能满足一般的工程测量需要。当需要进行精确控制测量 时,此时需要采用七参数求解北京54坐标。
4 狠抓安全培训
当前,从游泳池安全管理存在的问题来看,主要表现为游泳池的 管理人员安全知识匮乏,在具体的安全生产管理中失误较多,不能够 根据游泳池的实际情况做出具体的、科学的安排部署,而从业人员自 身素质较低,自我防护意识较差,“三违”现象严重。为此,做好游 泳池管理人员和从业人员的安全培训显得尤为重要:一是行业主管部 门要依法强化对经营单位的主要负责人和安全管理人员及作业人员的 培训工作,强化对相关法律法规和安全规程的宣传教育,使取得资格 和实际管理水平形成统一,真正提高游泳池管理人员的安全管理意识 和水平;二是各游泳池自身要加强对从业人员的培训、教育,特别是 要针对各自的实际情况逐条逐款培训到位,真正使工人能够做到遵章 守纪,不违规,确保人员安全,从而降低或杜绝事故的发生。
(收稿日期:2011-08-12)
5 结语
游泳池的安全工作不仅是一项建设工程,更是一项需常抓不懈的 长期性工作。要从真正意义上实现游泳池安全,杜绝各类事故的发 生,还有待于各级领导干部和全体职工群众一定要牢固树立“以人为 本,安全第一”的理念,求真务实,真抓实干,防骄、防跺、防飘 浮,确保安全,保持安全的总体平稳态势,坚持不懈地去总结、探 索,为游泳池的安全运行提供强大的保障。
-0.00000307714, -0.00000492427, 0.00002852232,
0.00001836618]T。
(2)三参数求解。根据公式(2)只需知道一个已知在相应两个
坐标系下坐标,即可求出所需的三参数。公式为:
(7)
根据式(7)和表1中的第一个已知点求出三参数为B3(转6页)
科学管理
3 完善安全管理制度
游泳池管理制度是游泳池工作人员在经营活动中共同遵守的规定
和准则,如果没有统一规范性的管理制度,游泳池就不可能正常运 行。因此,要保证游泳池的规范化和精细化运作,必须从完善、细化 规章制度和工作标准人手,建立一整套包括组织机构设计、职能分 工、岗位职责说明、工作流程以及各个专业的工作标准和管理制度, 工作人员能做到有章可循有规可守。同时,要确保编制的制度和标准 是规范的,实施过程是规范的。只有这样,才能保证整个管理制度体 系的整体运作是规范的。因此,建立各项制度和标准,必须深人研 究、仔细推敲、认真琢磨,尽量细化,符合游泳池科学原理,避免管 理漏洞,具有可操作性。从而形成覆盖全面、方便操作、易于判断、 合法合规合理的制度体系并形成制度和标准可以执行、能够执行、容 易执行、自觉执行的环境和条件,确保制度和标准能够规范员工的每 一个行为,具有真正的规范性和执行效力。
量中心,X轴指向BIH1984.0的协议子午面和CTP赤道的交点 ,Y轴与
Z轴、X轴垂直构成右手坐标系,称为
1984年世界大地坐标系。其长半轴为
6378137.0m,短半轴为6356752.3142m,
扁率e为1/298.257223563[2],如图1示。
GPS接收机接受的信号经过处理
后得到的是大地经纬度,得到的Z为
尔科沃,北京54坐标是参心坐标系,坐标采用的椭球是克拉索夫斯基
椭球。其长半轴为6378245m,短半轴为6356863.0187730473m,扁率
为1/298.3[2]。
由于WGS84和北京54坐标定义原点、坐标轴方向、尺度不同,
此时三维坐标之间的转换需要7个参数,3个平移参数、3个旋转参数、1Βιβλιοθήκη 尺度参数[3]。(3)[4]
当有3个公共点已知坐标且改为矩阵形式如下所示:
(4)
可以表示为AB=Y,对于上式或大于3个点时,上式方程为超定 方程,求解时采用最小二乘法能使误差达到最小。
最小二乘法表达式为:
(5)
式中Yi为参数的真实值,一般用已知点的已知值代替真实值, 为Yi的回归值。式(5)对参数进行求导得到最小二乘的矩阵表达形 式:
2 强力推进安全监察
多年来,尽管游泳池已将安全管理作为天字号工作来抓,但事实 上,真正促使游泳池重视安全的外在压力却是非常不够的。实践中, 某些人往往是抱着侥幸的心理,在安全与效益发生矛盾时,把安全抛 在脑后。安全工作在一些人的思想观念中是说起来重要,干起来次 要,忙起来不要的。因此,游泳池强力推进安全监察,势在必行。
1 高点定位安全理念
确立了构建全员、全方位、全过程、全时段的四全模式的大安全 观。围绕安全是什么、怎样抓安全这两个问题,可以对游泳池安全进 行八个定位,确立八项安全理念。一是安全就是责任,责任重于泰山 的安全第一理念;二是尊重客观规律的安全风险理念;三是大处着 眼,小处着手,防微杜渐的安全防范理念;四是激励和约束机制相结 合的安全理念;五是抓两头、带中间,整体推进,螺旋递进的理念; 六是管人、管理、管思想相结合的齐抓共管理念;七是如履薄冰,如 临深渊的危机、忧患理念;八是不断提高管理水平和管理境界,超越 安全抓安全的理念。
公式(4)同样适用于WGS84坐标和西安80坐标之间的转换,且 利用MATLAB求解参数十分方便。
参考文献 [1] 于彩霞,黄文骞. Bursa的 3参数模型与7参数模型的适用性研究 [J].测绘科学, 2008(3):96-97 [2] 周立.GPS测量技术[M].黄河水利出版社,2006(8):113-114 [3] 张 灿 . WGS-84和 BJ54坐 标 转 换 问 题 的 分 析 [J].安 徽 建 筑 , 2008(4):169-170 [4] 孔祥元,梅是义.控制测量学[M].武汉大学出版社,2002(2):142- 145 [5] 郭科,龚灏.多元统计方法及其应用[M].成都理工大学出版社, 2009(1):24-27 [6] 李 丽 , 王 振 领 .Matlab工 程 计 算 及 应 用 [M].人 们 邮 电 出 版 社 , 2001(9):20-44 [7] John H. Mathews著 , 周 璐 等 译 . Numerical Methods Using MATLAB Fourth Edition[M].电子工业出版社,2005(12):208-210
内江科技 2011年第10期 6
游泳池安全管理刍议
黄毅
(内江师范学院体育学院)
摘 要 安全第一、预防为主,这是游泳池安全工作的指导思想。一定要把安全装备、管理、培训等视为实现游泳池安全管理的 基础工作,并作为一项长期工作抓实、抓牢、抓好。
关键词 游泳池 安全管理 预防为主
纵观全国各地资料,游泳池发生事故率是相当高的。就内江市的 游泳池来说,也是惊人的。安全第一、预防为主,这是游泳池安全工 作的指导思想,更应把安全装备、管理、培训等视为实现游泳池安全 管理的基础工作。要求各游泳池抓实抓好,则是一项游泳池安全工作 的长期工作。可是,事故却屡屡发生。究其原因,主要是管理工作不 到位。在游泳池安全管理实践中,需要特别指出的是由于装备不同、 环境不同、管理难易程度不同,发生事故的性质、大小也就不同。通 过对许许多多、大大小小的事故案例分析,因管理不到位、不扎实而 引发的事故让人触目惊心。比如,由于技术和装备管理不到位而引发 的事故;再如现场管理不到位,游泳池工作人员行为不规范引发的事 故等。因此,管理是安全工作的重中之重,是第一位的工作。当然, 安全管理工作是一项系统工程,它包括技术、装备、资金投入、职工 培训、干部责任制落实、安全制度措施落实等一系列安全管理工作。
相关文档
最新文档