精华内容
下载资源
问答
  • 2022-04-22 10:57:43

    七参数转换法(布尔莎模型)

    七参数法(包括布尔莎模型,一步法模型,海尔曼特等)是解决此问题的比较严密和通用的方法。一般含有7个转换参数:X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度变化m。通过3个以上的公共点由最小二乘法拟合出相应的转换参数, 然后由求得的转换参数进行坐标转换。

    七参数公式如下:

    [ X Y Z ] = [

    更多相关内容
  • 程序可以实现 WGS84 大地坐标 UTM投影坐标 北京54 大地坐标 高斯克吕格投影坐标 西安80 大地坐标 高斯克吕格投影坐标 CGCS2000大地坐标 高斯克吕格投影坐标之间的布尔沙七参数的计算以及坐标系统值的相互转换。布尔...
  • 布尔沙模型为常用的三维坐标转换模型,算法简单且容易实现。其主要是利用泰勒级数展开的方法将模型线性化,然后解算坐标转换的旋转和平移参数,最后可以 通过参数求解出在目的坐标系下坐标
  • 该工具是针对AUTOCAD格式(DXF格式)的高斯投影地图数据的转换应用(布尔七参数法),转换参数在转换工具内部计算,可批量转换不同椭球的地图数据。经过实际验证,该工具转换精度高,转换速度快,完全适应于AUTO...
  • 基于MATLAB的布尔莎模型七参数解算实现.pdf
  • 布尔七参数

    2018-10-13 11:04:21
    本文件是求解布尔七参数的程序,包括界面和EXE,计算精度非常高。
  • 布尔沙七参数计算 七参数坐标转换 投影换带 大地坐标系、投影坐标系、空间直角坐标系的任意互转 程序特点: 支持任意椭球参数 程序内定义了北京54、西安80、WGS84、CGCS2000等常用椭球基准,并且可以采用...

    由于工作需要,编写了大地测量方面坐标转换的程序,主要实现以下功能:

    1. 投影正反算
    2. 布尔沙七参数计算
    3. 七参数坐标转换
    4. 投影换带
    5. 大地坐标系、投影坐标系、空间直角坐标系的任意互转

    程序特点:

    1. 支持任意椭球参数
      程序内定义了北京54、西安80、WGS84、CGCS2000等常用椭球基准,并且可以采用自定义椭球,只需要输入椭球长轴半径和扁率的倒数两个最常用的参数,即可完成椭球的定义。方便快捷。
    2. 支持单点转换和文件转换两种方式
      两种方式共用一个按键,两种方式同时执行。单点转换可以可视化的观察坐标转换的结果,文件转换可以大批量的进行数据转换,无数量限制。
    3. 支持多种角度单位
      无论是“度”或者dd.mmss的经纬度格式,均可支持。也可以用来进行“度”和dd.mmss格式的转换。

    经过大量的实验数据验证,程序稳定可靠。精度可达到亚毫米级别。

    程序的可执行文件可以免费分享和使用。在CSDN博客我的下载中有。
    源代码有偿提供。
    联系GeoPhoto@126.com

    软件中的基本坐标转换都是通过以下几个核心函数组合实现的。

    //度数和弧度的转换
    double Deg2Rad(double deg);
    double Rad2Deg(double rad);
    
    //度转度分秒
    double Deg2DMS(double deg);
    //度分秒转度
    double DMS2Deg(double DMS);
    
    //高斯投影正反算
    void GaussForward(double a,double f,double B,double L,double L0,double &x,double &y,double east_plus);
    void GaussBackword(double a,double f,double x,double y,double L0,double &B,double &L,double east_plus);
    
    //UTM投影正反算
    void UTMForward(double a,double f,double B,double L,double L0,double &x,double &y,double east_plus);
    void UTMBackword(double a,double f,double x,double y,double L0,double &B,double &L,double east_plus);
    
    //大地坐标系和空间直角坐标系的相互转换
    void BLH2XYZ(double a,double f,double B,double L,double H, double &X,double &Y,double &Z);
    void XYZ2BLH(double a,double f,double X,double Y,double Z, double &B,double &L,double &H);```
    
    

    以上代码每次只能转换一个点的坐标,为了实现点的批量转换,构建下面的类:
    单点类

    /******************坐标系坐标****************
    成员变量有点号、北、东、高
    可以用来表示空间直角坐标系坐标,对应为XYZ
    可以用来表示投影坐标系坐标,对应为北东高
    可以用来表示大地坐标,对应为纬度、经度、椭球高
    ********************************************/
    class Coor
    {
    public:
    	string ID;
    	double east;
    	double north;
    	double h;
    public:
    	Coor();
    	Coor(string ID, double east,double north, double h);
    	void PrintData();
    }
    

    点集类
    通过该类进行批量坐标的转换

    /******************点位坐标的集合****************
    
    ************************************************/
    class CoorVector
    {
    public:
    	vector <Coor> v_coor;
    public:
    	CoorVector();
    	//将上面的单点转换写成批量转换
    	void GaussForward_cv(double a,double f,double L0,double east_plus = 500000);
    	void GaussBackword_cv(double a,double f,double L0,double east_plus = 500000);
    	void UTMBackword_cv(double a,double f,double L0,double east_plus = 500000);
    	void UTMForward_cv(double a,double f,double L0,double east_plus = 500000);
    	void Deg2Rad_cv();
    	void Rad2Deg_cv();
    	void BLH2XYZ_cv(double a,double f);
    	void XYZ2BLH_cv(double a,double f);
    	void DMS2Deg_cv();
    	void Deg2DMS_cv();
    	//读文件
    	bool ReadData(string fileName);
    	//打印数据到屏幕
    	void PrintData();
    	//数据写入文件
    	void WriteData(string fileName);
    };
    

    到此为止,软件可以进行单点和批量的坐标转换,包括大地坐标、高斯投影、UTM投影坐标,空间直角坐标系之间的任意转换,涉及北京54、西安80、WGS84、CGCS2000和自定义坐标系。
    那么给定两组坐标,如何进行布尔沙七参数的反算呢?以及如何进行不同椭球之家附带七参数转换关系的坐标转换呢?下面一个新的类可以解决问题:
    七参数模型类:

    /*****************布尔沙七参数模型*******************
    平移参数DX,DY,DZ 单位米
    旋转参数WX,WY,WZ 单位秒
    尺度参数K,单位ppm
    初值为0,这样即使进行了七参数转换,依然不改变坐标值
    ****************************************************/
    class Brusa
    {
    public:
    	double DX;
    	double DY;
    	double DZ;
    	double WX;
    	double WY;
    	double WZ;
    	double K;
    public:
    	Brusa();
    	
    	/**************根据七参数进行坐标计算****************
    	输入为两组坐标变量,一组转换前,一组转换后
    	坐标系为空间直角坐标系
    	****************************************************/
    	void TransCoor(double X_befor,double Y_befor,double Z_befor,double &X_after,double &Y_after,double &Z_after);
    
    	/*****************布尔沙七参数反算*******************
    	平移参数DX,DY,DZ 单位米
    	旋转参数WX,WY,WZ 单位秒
    	尺度参数K,单位ppm
    	运用最小二乘计算七参数,公式为Ax=B,无需迭代
    	输入为两组点坐标,坐标系为空间直角坐标系,计算完更新
    	单位为米、弧度、单位1
    	两组点数量不一致或者数量少于3对,返回false
    	不进行点名的匹配,同名点按照顺序匹配
    	****************************************************/
    	bool CalBrusa(CoorVector vc_befor, CoorVector vc_after);
    	
    	void PrintData();
    };
    

    该类中一个函数进行七参数反算,一个函数进行使用七参数的坐标转换。下面只贴出最核心的七参数反算代码,该代码进行最小二乘计算,无需迭代。涉及矩阵运算,矩阵运算有自己写的类库,但是太水了,后面改成Engin类库。使用方法自行百度,很简单,类库源代码代码包中有。

    //参数为转换前点集、转换后点集,该函数其实就是解一个Ax=B的矩阵。
    //在代码中A=MA,x=Mx,B=MB.
    bool CalBrusa(CoorVector vc_befor, CoorVector vc_after)
    {
    		//两组坐标点数量不同,不进行计算
    		if (vc_befor.v_coor.size() != vc_after.v_coor.size())
    			return false;
    
    		//点集数量少于3组,无法计算
    		if (vc_befor.v_coor.size() < 3)
    			return false;
    
    		int num = vc_befor.v_coor.size();
    
    		MatrixXd MB(num*3,1);
    		MatrixXd MA(num*3,7);
    
    		for (int i=0;i<num;i++)
    		{
    
    			MB(i*3 + 0, 0) = vc_after.v_coor[i].north - vc_befor.v_coor[i].north;
    			MB(i*3 + 1, 0) = vc_after.v_coor[i].east - vc_befor.v_coor[i].east;
    			MB(i*3 + 2, 0) = vc_after.v_coor[i].h - vc_befor.v_coor[i].h;
    			
    			MA(i*3 + 0, 0) = 1;
    			MA(i*3 + 0, 1) = 0;
    			MA(i*3 + 0, 2) = 0;
    			MA(i*3 + 0, 3) = 0;
    			MA(i*3 + 0, 4) = 0 - vc_befor.v_coor[i].h;
    			MA(i*3 + 0, 5) = vc_befor.v_coor[i].east;
    			MA(i*3 + 0, 6) = vc_befor.v_coor[i].north;
    
    			MA(i*3 + 1, 0) = 0;
    			MA(i*3 + 1, 1) = 1;
    			MA(i*3 + 1, 2) = 0;
    			MA(i*3 + 1, 3) = vc_befor.v_coor[i].h;
    			MA(i*3 + 1, 4) = 0;
    			MA(i*3 + 1, 5) = 0 - vc_befor.v_coor[i].north;
    			MA(i*3 + 1, 6) = vc_befor.v_coor[i].east;
    
    			MA(i*3 + 2, 0) = 0;
    			MA(i*3 + 2, 1) = 0;
    			MA(i*3 + 2, 2) = 1;
    			MA(i*3 + 2, 3) = 0 - vc_befor.v_coor[i].east;
    			MA(i*3 + 2, 4) = vc_befor.v_coor[i].north;
    			MA(i*3 + 2, 5) = 0;
    			MA(i*3 + 2, 6) = vc_befor.v_coor[i].h;
    
    		}
    
    		//double **x = LeastSquare(A,num*3,7,B,num*3,1);
    		MatrixXd Mx(7,1);
    		Mx = MA.colPivHouseholderQr().solve(MB);
    		//Mx = MA.jacobiSvd(ComputeThinU|ComputeThinV).solve(MB);
    
    		DX = Mx(0,0);
    		DY = Mx(1,0);
    		DZ = Mx(2,0);
    		WX = Mx(3,0);
    		WY = Mx(4,0);
    		WZ = Mx(5,0);
    		K  = Mx(6,0);
    	}
    

    软件截图如下:
    在这里插入图片描述
    测试数据:
    下面简单介绍软件使用:
    下面三个点是WGS84坐标系下大地坐标
    坐标排列方式在软件面板上写着:
    p1 30.0 120.0 1000
    p1 30.5 120.5 1000
    p3 30.8 120.8 1000


    选取源坐标,选取源数据的坐标系,选取目标坐标系,选取写入文件,点击坐标转换按钮,即可完成计算。如果批量计算,可以采用文件方式,如果单点计算,面板上的数据框也可以进行单点计算,而不用采用文件方式。点击转换按钮,可以同时计算单点和文件。如果没有文件或者没有单点,也没有关系,忽略即可。

    转换后坐标,UTM投影,中央经线120度。
    p1 3318785.352607667900 500000.000000000000 999.999999991618
    p1 3374297.773515739000 547980.561370084410 999.999999989755
    p3 3407710.849772922700 576532.969669877670 999.999999989755

    下面有刚才的两种数据进行七参数计算。
    在这里插入图片描述
    1选取源数据,2选取转换后数据,34选取数据对应的坐标系,5进行计算。计算完成后,如果需要使用该七参数进行坐标转,需要按6启用七参,再通过坐标转换按钮进行计算。
    七参计算后,在程序文件夹下回生成一个report报告:
    在这里插入图片描述
    包含七参数的值,以及三个方向的误差,以及按照七参数将源数据进行转换,和转换后的数据进行比较,很直观看出来点位的精度和偏差。

    注意:
    七参计算和坐标转换共享一套坐标系选项。七参数只是表示连个椭球之间的空间关系,和坐标系,投影方式以及分度带无关。七参计算完毕后,只要椭球没变,可以任意改变投影的方式。
    另外:
    如果你有七参数,可以填到七参数文本框中,点击启用,计算的时候会将七参数加入计算过程。依然可以得到正确的结果。
    由于数据保密原因,随手写了几个坐标进行转换,读者可以使用真实数据进行验证。该软件进行过大量数据验证,请放心使用。

    展开全文
  • 空间坐标系和大地坐标系的相互转换; 布尔沙七参数转换。。 某高校学生的作业,做完不要了的。代码完全符合题目要求
  • 布尔沙模型求七参数

    2018-03-20 15:08:57
    利用布尔沙模型求七参数 ,里面包含有 matlab源程序代码
  • 布尔七参数

    2017-12-27 20:47:30
    本文件包含了布尔莎法计算七参数的界面程序和应用程序。
  • C#实现 布尔七参数求解 包括矩阵运算和参数求解
  • ArcGIS布尔七参数转换精度探讨

    千次阅读 2020-03-03 17:28:03
    设置七参数372, -1476, -715, 50, -406, -34, 280 椭球投影设置: ARCGIS 转换结果:2733705.638798405,915171.33938922675 ,误差近5米   后来经过测试,发现是FalseNorthing=0时,两者...

    地理变换的帖子比较多了,这里不赘述

     

    当大地坐标系统地方坐标系进行转换时,发现一个问题

    当FalseNorthing不等于0时,Arcgis 转换的结果和HGO中海达的转换结果就会不一致! 不知道ArcGIS的内部算法是如何算的?

     

    这里给个例子:

    P(26.5,103,0),纬度26.5,经度103度,椭球为WGS84

    转换为椭球为北京1954椭球,中央经线102.5度,FalseNorthing=-200000,False_Easting=870000.0

    利用HGO中海达,椭球设置

    设置七参数372, -1476, -715, 50, -406, -34, 280

    椭球投影设置:

    ARCGIS 转换结果:2733705.638798405,915171.33938922675  ,误差近5米

     

    后来经过测试,发现是FalseNorthing=0时,两者转换精度是一致的,FalseNorthing=-200000时则产生了误差!求解?

     

    展开全文
  • 布尔七参数坐标转换模型

    千次阅读 热门讨论 2022-04-30 09:56:50
    间接平差求解布尔七参数坐标转换模型

    一、原理概述

      当观测的公共控制点大于3个时,可采用间接平差法求得空间坐标转换模型中的七个参数,即七参数转换模型。
      两个坐标系之间转换的布尔莎模型为:
    [ X A Y A Z A ] = [ T X T Y T Z ] + ( 1 + m ) R 3 ( w z ) R 2 ( w y ) R 1 ( w x ) [ X B Y B Z B ] (1) \left[ \begin{matrix} X_{A} \\ Y_{A} \\ Z_{A} \end{matrix} \right]=\left[ \begin{matrix} T_{X} \\ T_{Y} \\ T_{Z} \end{matrix} \right]+(1+m)R_3(w_z)R_{2}(w_y)R_1(w_x)\left[ \begin{matrix} X_{B} \\ Y_{B} \\ Z_{B} \end{matrix} \right] \tag{1} XAYAZA=TXTYTZ+(1+m)R3(wz)R2(wy)R1(wx)XBYBZB(1)
      式中, T X T_X TX T Y T_Y TY T Z T_Z TZ为由坐标系B到坐标系A的平移参数, w z w_z wz w y w_y wy w z w_z wz为由坐标系B到坐标系A的旋转参数, m m m为由坐标系B到坐标系A的尺度参数。
      通常情况下,两个不同基准间的旋转欧拉角很小,因此 R 3 ( w z ) 、 R 2 ( w y ) 、 R 1 ( w x ) R_3(w_z)、R_{2}(w_y)、R_1(w_x) R3(wz)R2(wy)R1(wx)都近似为单位矩阵。布尔莎模型最终可简化为
    [ X A Y A Z A ] = [ T X T Y T Z ] + [ 1 0 0 0 − Z B Y B X B 0 1 0 Z B 0 − X B Y B 0 0 1 − Y B X B 0 Z B ] [ T X T Y T Z w x w y w z m ] (2) \left[ \begin{matrix} X_{A} \\ Y_{A} \\ Z_{A} \end{matrix} \right]=\left[ \begin{matrix} T_{X} \\ T_{Y} \\ T_{Z} \end{matrix} \right]+ \left[ \begin{matrix} 1&0&0&0&-Z_{B}&Y_{B}&X_{B} \\ 0&1&0&Z_{B}&0&-X_{B}&Y_{B} \\ 0&0&1&-Y_{B}&X_{B}&0&Z_{B} \end{matrix} \right] \left[ \begin{matrix} T_X \\ T_Y \\ T_Z \\ w_x\\ w_y\\ w_z\\ m \end{matrix} \right] \tag{2} XAYAZA=TXTYTZ+1000100010ZBYBZB0XBYBXB0XBYBZBTXTYTZwxwywzm(2)

    二、案例分析

      已知5个点在WGS-84坐标系和1954北京坐标系下的坐标,如下表所示,根据布尔莎模型求解WGS-84到1954坐标系之间的转换参数。
    在这里插入图片描述

    《误差理论与测量平差基础》

    三、代码实现

    根据间接平差计算原理,使用C++编写代码计算结果如下:
    在这里插入图片描述

    展开全文
  • 布尔莎模型、DSNP 模型、DSNP+ 模型)七参数转换,空间直角坐标的转换模型有很多,这里只讨论三种:布尔莎模型、DSNP 模型、DSNP+ 模型。
  • 坐标转换--基准面转换(布尔七参数

    万次阅读 多人点赞 2017-08-26 19:17:38
    椭球基准面转换,布尔七参数模型及七参数反解
  • 这篇文章我将主要介绍基于布尔莎模型的7参数计算流程及转换方法。为了验证数据转换的正确性,先将该工具跟其他软件的计算结果进行对比。 转换结果验证 1.验证一 该工具北京54转西安80: 对比其他转换工具: ...
  • 七参数坐标转换

    2018-08-30 21:41:02
    这是一个通用的地理坐标系转换工具,基于七参数转换原理,实现了毫米级别的转换。如实现了WGS-84和XIAN80坐标系统之间的相互转化,经度的转换精度为小数点后7位,纬度的转换精度为小数点后6位,平面坐标的转换精度为...
  • 1. 公式布尔七参数的数学模型为[X1,Y1,Z1]为待求坐标,[X2,Y2,Z2]为目标坐标系坐标。顾及旋转角度都是非常小的,布尔七参数转换模型的数学模型可以简化为:这样有利于使用编程语言来求解。由公式可知,必要...
  • 七参数布尔莎模型

    万次阅读 2011-08-06 16:06:58
    两个椭球间的坐标转换,一般而言比较严密的是用七参数布尔莎模型,即 X 平移, Y 平移, Z 平移, X 旋转(WX), Y 旋转(WY), Z 旋转(WZ),尺度变化(DM )。要求得七参数就需要在一个地区需要 3 个以上的已知...
  • 基于MATLAB的七参数坐标系统转换问题分析,张鲜妮,王磊,GPS测量的坐标是基于WGS-84坐标系下的,而我国实用的测量成果大多都是基于北京54坐标系下的。随着GPS测量技术的广泛使用,由WGS-84坐标�
  • 前段时间,碰到一个陆海项目,我们提供的成果都是CGCS2000坐标。施工单位要求提供当地控制点,用来放样。按道理来说,我们不需要提供,因为项目是CGCS2000坐标,施工方只需要拿千寻CORS进行放样...(1)三参数转换模...
  • 坐标批量转换程序的源代码,包含七参数的正算和反算,采用最小二乘算法。支持坐标的投影正反算。精度达到0.1毫米以内。支持dd.mmss格式和度的格式。支持空间大地坐标。提供报告。支持CGCS2000和自定义椭球基准。
  • 七参数坐标转换工具(可在WGS84、北京54、西安80、CGCS2000坐标系中任意两个转换),也可以自定义参数转换
  • 用Qt写的求七参数和大地测量坐标系与空间坐标系转换,足以应付课程作业等
  • 大地测量课程作业,布尔沙模型的坐标转换,以及空间和大地坐标之间的转换,用Qt在mingw下写的,有啥问题私我,新人哪做的不好求轻喷和关照谢谢
  • 利用七参数进行CGCS2000坐标系到西安80坐标系的转换

    万次阅读 多人点赞 2016-01-22 18:50:34
     因为工作,需要把CGCS2000坐标系下的坐标转到西安80坐标系下,中间由于用到了七参数,所以要进经过到空间直角坐标系的转换,然后再转换到西安80大地坐标下,最后再投影到西安80坐标的某度带。  要求是输入CGCS...
  • Java 七参数计算

    千次阅读 2019-12-31 20:03:29
    两个不同的三维空间直角坐标系之间转换时,通常使用七参数模型(数学方程组)。在该模型中有个未知参数,即:  (1)三个坐标平移量(△X,△Y,△Z),即两个空间坐标系的坐标原点之间坐标差值;  (2)三个...
  • python实现四参数七参数坐标转换

    千次阅读 热门讨论 2019-11-29 15:02:05
    四参和参转换,转换坐标没有什么问题,我附录了一些坐标信息检验,不过七参数的数值有些问题,不知道是哪里有些错误,希望大家指正,下面是完整代码: 在这里插入代码片 ```import numpy as np from numpy import ...
  • 不同空间坐标系转换所必需的7个转换参数的解算 非常重要的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,263
精华内容 505
关键字:

布尔沙七参数