精华内容
参与话题
问答
  • 坐标转换分析

    万次阅读 多人点赞 2018-01-31 10:41:05
    从二维坐标系说起: 二维平面直角坐标系定义可分为两类,从逆时针角度看,第一类为X坐标轴在Y坐标轴后;第二类为X坐标轴在Y坐标轴前。...以第一类二维平面直角坐标为例,涉及的坐标转换有下图中4种情

    从二维坐标系说起:

    二维平面直角坐标系定义可分为两类,从逆时针角度看,第一类为X坐标轴在Y坐标轴后;第二类为X坐标轴在Y坐标轴前。

    有这两类坐标系添加第三个坐标轴Z,得到空间直角坐标系,在默认添加的坐标轴Z垂直纸面朝向外侧下,分别得到左手空间直角坐标系和右手空间直角坐标系。

    而对于坐标的转换,最简单的依然从二维坐标系讲起。

    以第一类二维平面直角坐标为例,涉及的坐标转换有下图中4种情况:a,b,c,d.

    基础一 原坐标系坐标转到新坐标系

     a与b为已知原坐标系下坐标,从原坐标系(蓝色表示)旋转角度θ,获得新坐标系下坐标(红色表示):

    此处注意:定义角度的正负应统一,即存在原坐标系与新坐标系的概念,新坐标系相对于原坐标系的旋转角度为逆时针时为正值。

    针对情况a有:

     

    即:

     

    注:从简单直观方面理解为,当原坐标系转角度θ到新坐标系过程中,y坐标值在新坐标系中是变大的,x坐标值在新坐标系中是变小的。因此,y方向的三角系数都为正,x方向存在负值情况。可以标记为沿旋转方向数,第一条坐标轴数值是变大的,条件是旋转方向角度为无符号数值。

    因此,针对a和b两种情况,由原坐标系经过旋转一定角度,转换到新的坐标系下,得到的旋转矩阵为:

     

    其中θ为具有正负号的角度值,当为正值时代表原坐标系沿逆时针旋转;为负值时代表原坐标系沿顺时针旋转。

    基础二 新坐标系坐标转回原坐标系

    而情况c与d是表示已知新坐标系下坐标,经过坐标转换获得在原坐标系下坐标:

    此处注意:定义角度的正负应统一,即存在原坐标系与新坐标系的概念,新坐标系与原坐标系的旋转角度为逆时针时为正值。

    cd情况中,因为定义了逆时针旋转角度为正,所以c中旋转的角度为(-θ),d中旋转的角度为(θ)。而沿逆时针旋转时,在该方向上第一条坐标轴为Y轴,所以基本公式为:

    小结:

    定义了坐标轴的指向,以及新坐标系与原坐标系旋转角度的正负关系后,可以确定原坐标系转到新坐标系运算与你运算正弦系数符号变换。

    因此,要确定旋转矩阵内容必须要确定两个因素,一是坐标轴的指向二是旋转角度的正负定义

    (1)当存在原坐标系与新坐标系概念时,必然的旋转角度的正负定义必须一致,此时由原坐标系到新坐标系的转换,可严密的进行返回坐标转换。

    (2)当只存在当前坐标系下坐标转到另一个坐标系下坐标时,根据确定的旋转角度正负,参考基础一即可转换。基础一中只表示了逆时针旋转角度为正的情况,顺时针旋转为正的情况可仿照进行。

    (3)无论什么情况下,选取旋转角度定义为正(无论逆时针还是顺时针旋转)时作为基础,沿旋转方向数的第一条坐标轴的坐标值应变大,即在新坐标系下对应该坐标轴上的坐标值组合为cos+sin的形式,而另一坐标轴上坐标值为-sin+cos形式。

    在基础一与基础二中都可印证(3)的说明。再增加一条印证示例:

    在情况e中,定义从蓝色坐标系旋转到红色坐标系,定义图中状态的旋转角度θ为正,则此时坐标转换关系为:

     

    情况f中,依然定义图中状态为旋转角度θ为正值,但是从红色坐标系转到蓝色坐标系:

    从旋转方向遇到的第一个坐标轴Y坐标开始整理,则有:

     

    旋转矩阵的形式依然是正规形式,以x,y为顺序排列为:

     

    在情况e中定义了目标坐标系在原坐标系的逆时针方向为正,情况f中定义了目标坐标系在原坐标系的顺时针方向为正,这两种情况从纯坐标系的转换方面印证了上面(3)中总结的,即以正值旋转角度为基础,沿旋转方向第一条坐标轴上的坐标为cos+sin形式:e中第一条坐标轴为x轴,f中第一条坐标轴为y轴。从坐标转换与逆转换方面印证了(1)中总结结果,即存在正转换与逆转换时,定义的正旋转角度应一致,此时的正反旋转矩阵相乘为单位矩阵。

     

    基础三 平面坐标系中讨论左右手系的转换问题

    情况h中从蓝色坐标系旋转角度θ到红色坐标系下,两坐标系的坐标轴向定义不同,产生类似左右手系问题,在这类转换中,首先将目标坐标系的轴向假设与原坐标系轴向定义为一类,然后更换坐标符号获得两坐标系的转换。

    第一步:假设X’与Y’轴互换,此时原坐标系与目标坐标系定义类似,相差角度θ,定义目标坐标系与原坐标系之间逆时针旋转角度为正,得到:

     

    根据假设坐标与真实坐标关系获得两坐标系真实关系:

    按顺序排放整理:

    即,进行左右系的坐标系转换时的旋转矩阵为:

    以情况i作为验证示例:

    依然定义目标(红)坐标系转到原(蓝)坐标系时,目标坐标系相对原坐标系旋转角度为逆时针时为正。

    假设原坐标系的坐标轴向与目标坐标系的轴向类似定义,为x(伪),y(伪)。

     

     

     

    按顺序整理得到:

    得由目标坐标系转回原坐标系的旋转矩阵为:

    得该转换过程成立。

     

    小结:在处理坐标系向量的顺序整理时需要进行公式的元素调换。

    (1)    针对等号左边结果的调换如

    要变为

     

    时,只需等号右面矩阵的行进行相应对调:

     

    (2)    只针对等号右面最后原坐标值向量内容调换时,等式的左右都需要变化。如

    但是要保持等号左边的向量顺序不变时需要两步:

    第一步:首先利用(1)将等号左边向量调换为:

    验证,变换后的结果与初始状态一致。

     

    基础四 三维空间直角坐标系的正转换问题

    三维空间直角坐标的坐标转换可由二维平面直角坐标转换扩展来,在二维坐标系中的坐标转换只有一个角度的旋转,也就产生一个旋转矩阵。在三维空间直角坐标系中存在三个方向的角度旋转问题,因此产生三个旋转矩阵相乘的结果。但是针对沿某一坐标轴旋转某一角度时,又回归到二维坐标旋转问题。因此,三维空间直角坐标的坐标旋转问题是三个二维平面直角坐标旋转问题的顺序操作问题。(但是由于某一角度旋转后,后一角度的旋转是否对前者有耦合效应,应该深入研究探讨)

    下面首先讨论三维空间直角坐标系的坐标转换问题。

    以右手坐标系为例,研究原坐标系到新坐标系经过首摇,纵摇,横摇角度的转换过程以及逆过程。

    A 原坐标系转换到新坐标系

    首先定义坐标系以及旋转角度的正负定义

    定义右手坐标系如图,沿各坐标轴正向的反方向看,另外两坐标平面沿逆时针旋转时,定义为沿该坐标轴正角度旋转。

    由此定义沿X,Y,Z轴逆时针旋转角分别为α,β,γ。

    从X->Y->Z轴的顺序,分别分析坐标转换矩阵的形式。

    沿X轴方向旋转α角度时对应的关系图

    根据图中关系可以得到第一次转换后的坐标,由于沿X轴旋转,所以新坐标中X信息不变。根据以上基础问题的讨论可以得到:

     

    沿Y轴方向旋转β角度时对应的关系图

    根据图中关系可以得到第二次转换后的坐标,由于沿Y轴旋转,所以新坐标中Y信息不变。根据以上基础问题的讨论可以得到:

     

    注:沿Y的旋转矩阵与沿X轴的旋转矩阵形式出现不同,原因在于,当沿X轴旋转时,沿正旋转角度的第一条边为Y轴,即Y值变大。而沿Y轴进行旋转时,第一条边Z轴的对应值变大,而在向量摆放时Z值放在最下方,因此利用基础问题三中的等号右边最后向量重现摆放时需要整体变换,变换结果为以上所示。

     

    沿Z轴方向旋转γ角度时对应的关系图

    根据图中关系可以得到第三次转换后的坐标,由于沿Z轴旋转,所以新坐标中Z信息不变。根据以上基础问题的讨论可以得到:

     

    注:沿Z轴与沿X轴的旋转矩阵类似,因为这两种情况下按旋转方向得到的坐标轴顺序与XYZ顺序一致,因此不需要进行顺序重排,而沿Y轴旋转时,Z轴在X轴前面,因此需要重排顺序,重排后,矩阵形式发生变化。从另一个角度说,当沿Z轴和X轴旋转时,坐标变大的分别为X值和Y值,因此其对应的矩阵行都为正,沿Y轴旋转时,坐标变大的为Z值,因此Z坐标对应的行矩阵系数为正。

     

    如果知道原坐标系通过沿X、Y、Z轴的顺序进行旋转到新坐标系,则新坐标系下坐标为:

    基础五 三维空间直角坐标系的逆转换问题

    若已知从原坐标系到新坐标系的角度旋转关系,如原坐标系首先沿X轴旋转α,然后沿Y轴旋转β,最后沿Z轴旋转γ。则坐标正转换时(即)的公式:

     

    进行三维坐标逆转换时,一致新坐标系下坐标,以及新旧坐标系的角度旋转顺序和信息。

    则由以上信息可推测坐标逆转换为:

     

    R(α)与R’(α),R(β)与R’(β),R(γ)与R’(γ)互为逆矩阵。旋转顺序为沿Z轴、Y轴和X轴进行转换。

    1.首先从Z轴转换:

    定义的沿Z轴逆时针旋转时角度为正,此时进行的坐标转换为从红色坐标系到原坐标系的旋转,即旋转角度为(-γ)。针对从新坐标系(0-X’Y’Z’)到原坐标系的逆转换有两种方式:

    (1)    采用原坐标系到新坐标系的旋转角度正负定义获取坐标转换公式,然后将(-γ)代入公式即可:

    根据前面所讲,确定旋转矩阵时,根据旋转角θ正方向和第一个坐标轴X’可快速确定旋转公式: 

    将实际旋转角度(-γ)代入得:

     

    (2)    不考虑整个系统定义的角度正负(此时适应条件中只给出两坐标系间的相差的角度,没有正负定义时),按给出的角度(数值应为一个正值)和两坐标系的实际旋转关系确定旋转矩阵。此时,由新坐标系(0-X’Y’Z’)顺时针方向旋转角度γ得到原坐标系下坐标,则在沿旋转方向中第一条坐标轴为Y轴(即数值变大轴):

    方法(1)和方法(2)的结果完全相同。但是方法(1)存在角度的正负定义问题,并且前后连贯一致,多在测绘中的姿态仪中出现,对于姿态仪中给出的姿态角度可以用一套公式表示(如方法1中结果的第一种表达方法),而方法(2)只存在一种结果形式,因此不适用存在整体性角度正负定义的问题。

    则沿Z轴的旋转矩阵

    2.沿Y轴转换

    沿Y轴方向旋转角度时对应的关系图

    根据图中关系可以得到沿Y轴顺时针旋转β角度到原坐标系下,从定义的沿Y轴逆时针方向旋转角度为正的角度确定旋转角度为(-β)。在该图中沿正旋转角度时,第一个坐标轴为Z轴,所以得到的基本旋转矩阵为: 

    3.沿X轴旋转

    沿X轴方向旋转α角度时对应的关系图

    由于沿X轴旋转,所以新坐标中X信息不变。沿X轴顺时针旋转角度α得到原坐标系下坐标。根据定义的角度旋转正负关系,定义逆时针旋转角度为正,因此旋转的角度为(-α)。沿X轴逆时针正旋转时,第一个坐标轴为Y轴,因此基本公式为:

     

    综上,经过沿Z-Y-X轴的坐标你旋转,将在新坐标系下坐标转回到原坐标系下:

     

    总结:从一个坐标系转到新坐标系,一般需要定义旋转角度的正负,一旦正负的方向定义后,从原坐标系到新坐标系的旋转和从新坐标系到原坐标系的旋转都可用这一个方向定义,此时需要考虑的是操作中出现了从原坐标系到新坐标的正转换和新坐标系到原坐标系的逆转换,逆转换时须将采集的原坐标系到新坐标系的旋转角度取反代入同一套公式。

    另一种方法,对于只使用从原坐标系到新坐标系或者只使用新坐标系到原坐标系的旋转过程时,可以单独对旋转过程定义一套旋转角度正负使用问题,比如姿态中的横摇一般定义为右舷下降为正值,那么假设当前横摇值为+10°,要从姿态传感器坐标系到水平坐标系,在XOZ平面,认为顺时针方向旋转为正值,则此时X轴坐标值应为旋转变大方,因此系数组合为Xcos+Zsin模式,旋转矩阵也就确定下来了。该例子中,旋转矩阵的确定存在一下2个条件:(1)直接使用了姿态仪给出的数值;(2)定义了顺时针方向为正方向(只有这样定义,才能直接用姿态仪给出的数值,否则要取反使用).

     

    展开全文
  • 由于工作需要,编写了大地测量方面坐标转换的程序,主要实现以下功能: 投影正反算 布尔沙七参数计算 七参数坐标转换 投影换带 大地坐标系、投影坐标系、空间直角坐标系的任意互转 程序特点: 支持任意...

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

    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报告:
    在这里插入图片描述
    包含七参数的值,以及三个方向的误差,以及按照七参数将源数据进行转换,和转换后的数据进行比较,很直观看出来点位的精度和偏差。

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

    展开全文
  • 最新2000坐标转换转换功能强大,坐标转换,54坐标系、80坐标系、2000坐标系,相互转换,免费
  • 坐标转换原理

    千次阅读 2019-04-30 17:06:00
    一、坐标转换描述 坐标转换是空间实体的位置描述,是从一种坐标系统变换到另一种坐标系统的过程。通过建立两个坐标系统之间一一对应关系来实现。通常坐标转换有平移、缩放、旋转三个方面的转换。本文只详细讲述关于...

    一、坐标转换描述

    坐标转换是空间实体的位置描述,是从一种坐标系统变换到另一种坐标系统的过程。通过建立两个坐标系统之间一一对应关系来实现。通常坐标转换有平移、缩放、旋转三个方面的转换。本文只详细讲述关于旋转部分的内容。

    二、二维坐标旋转

    一个二维坐标系O-XY绕原点O旋转$\varphi $后变为另一个坐标系O-X'Y'。假设有一点PO-XY坐标系下的坐标为(x,y),经旋转后在O-X'Y'坐标系下的坐标为(x',y'),则两套坐标系下的坐标的对应关系为

     $\left\{\begin{matrix} x^{'}=xcos\varphi-ysin\varphi\\y^{'}=xsin\varphi+ycos\varphi \end{matrix}\right.$

    将其写成矩阵形式为

    $\begin{bmatrix}x^{'}\\ y^{'}\end{bmatrix}=\begin{bmatrix}cos\varphi & -sin\varphi\\ sin\varphi & cos\varphi \end{bmatrix}\begin{bmatrix}x\\ y\end{bmatrix}$ 

    三、三维坐标旋转

    三维坐标转换主要分为右手系(笛卡尔坐标系)和左手系(测量坐标系)两种,其分别绕Z、Y、X顺时针旋转$\kappa,\omega,\varphi $角度。现在来看一看各轴旋转后坐标的变化。

    1、绕Z轴旋转

                  

    右:$\begin{bmatrix}x^{'}\\ y^{'}\\ z^{'}\end{bmatrix}=\begin{bmatrix} cos\kappa&sin\kappa&0\\-sin\kappa&cos\kappa&0\\0&0&1\\ \end{bmatrix}\begin{bmatrix}x\\ y\\ z\end{bmatrix}$ 左:$\begin{bmatrix}x^{'}\\ y^{'}\\ z^{'}\end{bmatrix}=\begin{bmatrix} cos\kappa  & -sin\kappa  & 0\\sin\kappa  & cos\kappa & 0\\ 0 & 0 &1\\ \end{bmatrix}\begin{bmatrix}x\\ y\\ z\end{bmatrix}$ 

    2、绕Y轴旋转

              

    右:$\begin{bmatrix}x^{''}\\ y^{''}\\ z^{''}\end{bmatrix}=\begin{bmatrix} cos\omega &0&-sin\omega \\0&1&0\\sin\omega&0 &cos\omega \\ \end{bmatrix}\begin{bmatrix}x^{'}\\ y^{'}\\ z^{'}\end{bmatrix}$ 左:$\begin{bmatrix}x^{''}\\ y^{''}\\ z^{''}\end{bmatrix}=\begin{bmatrix} cos\omega &0&sin\omega \\0&1&0\\-sin\omega&0 &cos\omega\end{bmatrix}\begin{bmatrix}x^{'}\\ y^{'}\\ z^{'}\end{bmatrix}$

    3、绕X轴旋转

              

     右:$\begin{bmatrix}x^{'''}\\ y^{'''}\\ z^{'''}\end{bmatrix}=\begin{bmatrix}1 & 0 & 0\\ 0 & cos\varphi  & sin\varphi\\0 & -sin\varphi & cos\varphi\\ \end{bmatrix}\begin{bmatrix}x^{''}\\ y^{''}\\ z^{''}\end{bmatrix}$左:$\begin{bmatrix}x^{'''}\\ y^{'''}\\ z^{'''}\end{bmatrix}=\begin{bmatrix}1 & 0 & 0\\ 0 & cos\varphi  & -sin\varphi\\0 & sin\varphi & cos\varphi\\ \end{bmatrix}\begin{bmatrix}x^{''}\\ y^{''}\\ z^{''}\end{bmatrix}$

    4、旋转矩阵融合

    将三轴的旋转融合为一个旋转矩阵R

    右:$\begin{bmatrix}x^{'''}\\ y^{'''}\\ z^{'''}\end{bmatrix}=\begin{bmatrix}1 & 0 & 0\\ 0 & cos\varphi  & sin\varphi\\0 & -sin\varphi & cos\varphi\\ \end{bmatrix}\begin{bmatrix} cos\omega &0&-sin\omega \\0&1&0\\sin\omega&0 &cos\omega \\ \end{bmatrix}\begin{bmatrix} cos\kappa&sin\kappa&0\\-sin\kappa&cos\kappa&0\\0&0&1\\ \end{bmatrix}\begin{bmatrix}x\\ y\\ z\end{bmatrix}=\begin{bmatrix}r_{11} & r_{12} & r_{13}\\ r_{21} & r_{22} & r_{23}\\ r_{31} & r_{32} & r_{33}\end{bmatrix}\begin{bmatrix}x\\ y\\ z\end{bmatrix}$

    左:$\begin{bmatrix}x^{'''}\\ y^{'''}\\ z^{'''}\end{bmatrix}=\begin{bmatrix}1 & 0 & 0\\ 0 & cos\varphi  & -sin\varphi\\0 & sin\varphi & cos\varphi\\ \end{bmatrix}\begin{bmatrix} cos\omega &0&sin\omega \\0&1&0\\-sin\omega&0 &cos\omega\end{bmatrix}\begin{bmatrix} cos\kappa  & -sin\kappa  & 0\\sin\kappa  & cos\kappa & 0\\ 0 & 0 &1\\ \end{bmatrix}\begin{bmatrix}x\\ y\\ z\end{bmatrix}=\begin{bmatrix}r_{11} & r_{12} & r_{13}\\ r_{21} & r_{22} & r_{23}\\ r_{31} & r_{32} & r_{33}\end{bmatrix}\begin{bmatrix}x\\ y\\ z\end{bmatrix}$

     右手坐标系得旋转矩阵R的各个元素为

    $\left\{\begin{matrix}r_{11}=cos\omega cos\kappa &r_{12}=cos\omega sin\kappa &r_{13}=-sin\omega \\ r_{21}=-cos\varphi sin\kappa +sin\varphi sin\omega cos\kappa & r_{22}=cos\varphi cos\kappa +sin\varphi sin\omega sin\kappa &r_{23}=sin\varphi cos\omega \\ r_{31}=sin\varphi sin\kappa +cos\varphi sin\omega cos\kappa&r_{32}=-sin\varphi cos\kappa +cos\varphi sin\omega sin\kappa&r_{33}=cos\varphi cos\omega \end{matrix}\right.$

     左手坐标系得旋转矩阵R的各个元素为

    $\left\{\begin{matrix}r_{11}=cos\omega cos\kappa &r_{12}=-cos\omega sin\kappa &r_{13}=sin\omega \\ r_{21}=cos\varphi sin\kappa +sin\varphi sin\omega cos\kappa & r_{22}=cos\varphi cos\kappa -sin\varphi sin\omega sin\kappa &r_{23}=-sin\varphi cos\omega \\ r_{31}=sin\varphi sin\kappa -cos\varphi sin\omega cos\kappa&r_{32}=sin\varphi cos\kappa +cos\varphi sin\omega sin\kappa&r_{33}=cos\varphi cos\omega \end{matrix}\right.$

    转载于:https://www.cnblogs.com/ambition921009/p/10794413.html

    展开全文
  • 西安80坐标系和国家2000坐标系之间的转换是两种不同的椭球参数之间的转换,一般而言比较严密的是用七参数布尔莎模型,即X平移,Y平移,Z平移,X旋转(WX),Y旋转(WY),Z旋转(WY),尺度变化(DM)。每个地区的七...

           西安80坐标系和国家2000坐标系之间的转换是两种不同的椭球参数之间的转换,一般而言比较严密的是用七参数布尔莎模型,即X平移,Y平移,Z平移,X旋转(WX),Y旋转(WY),Z旋转(WY),尺度变化(DM)。每个地区的七参数是不一样的,想得到七参数需要在一个地区提供3个以上的公共点坐标对(即西安80坐标系下x、y、z和国家2000坐标下x、y、z),可以向地方测绘局获取。

    方法/步骤

    1. 软件下载与安装

      登录软件官网:www.gissaas.com   下载并安装 GIS数据转换器。注册会员即可免费使用。

       

      2. 添加待转换的文件

      点击”添加“按钮,选择一个或多个待转换的文件,软件支持批量转换。

      软件支持DWG、DXF、SHP、MDB、KML、KMZ、GPX、GeoJson、EXCEL、TXT、CSV、GeoTiff、Image(img)、Bitmap(bmp)、Png格式的数据文件。

      3. 选择导出格式,设置源坐标系和目标坐标系

      (1)在”导出格式“下拉框中选择一种要导出的格式,可以选择与待转换文件相同的格式,也可以选择其他数据格式。软件支持坐标转换的同时,进行数据格式转换。

      (2)在”源坐标系“下拉框中选择”西安80坐标系(平面)“,在”目标坐标系“下拉框中选择”2000国家大地坐标系(平面)“(或WGS-84坐标系)。

      (3)用户也可以根据需要选择其它坐标系的转换,软件支持国家2000、西安80、北京54、WGS84、火星坐标、百度坐标、墨卡托坐标的转换。

      4. 设置转换参数

      (1)点击”参数设置“按钮,在弹出框中进行转换参数的设置;

      (2)在”公共点坐标“中添加用于七参数计算的公共点坐标对,添加后点击“计算七参数”按钮,软件会根据公共点坐标对计算出用于坐标转换的参数;

      (3)在“投影参数”中设置源坐标系和目标坐标系的分带类型和中央经线,以及设置“坐标是否包含带号”;

      (4)设置完成后,点击“确定”按钮;

      (5)如果本次参数设置以后还会用到,可以点击右上角的“保存”按钮,将本次设置保存成一个方案,下次转换直接选择此方案即可,不用再手工设置。

      5. 选择输出路径

      点击“选择输出路径”按钮,选择转换后的目标文件要保存的路径;

      6. 执行转换

      点击”转换“按钮,软件就开始执行转换操作,转换完成后会提示。如果对本次转换有疑问,可以点击”查看日志“,查看本次转换的详细执行情况。

    展开全文
  • 坐标系的基本概念 坐标系分为地理坐标系和投影坐标系,以下是对这两种坐标系的解释: 地理坐标系:为球面坐标。...地理坐标转换到投影坐标的过程可理解为投影(投影:将不规则的地球曲面转换为平面) 常见的...
  • 坐标转换工具

    2017-10-23 20:26:29
    可以在大地坐标经纬度和平面坐标XYH之间转换,并且有很多转换模式,资源来源于其他网站下载,只提供给大家分享使用,不得用于其他商业行经。
  • 机器人坐标转换

    万次阅读 2018-09-18 15:17:13
    坐标系标识统一: 我们使用右手坐标系,ROS里面用的也是右手坐标系. 左:左手坐标系,右:右手坐标系. 记忆:大拇指是z轴,食指是x轴(右手指往内转动).我们说旋转多少度时,都以右手手指往内攥的方向为正方向. 颜色:...
  • 坐标转换

    2019-10-01 05:52:38
    总体来说坐标系分为:参心坐标系和地心坐标系 参心坐标系:与局部大地水准面作为密切的椭球作为参考椭球,其原点位于参考椭球的中心,Z轴和椭球的旋转轴平行,X轴是大地子午面和赤道交点,Y轴垂直于XOZ平面构成的...
  • 坐标转换系统

    千次阅读 2018-06-05 17:23:41
    在测绘工作中,涉及到各种坐标转换时人们用得最多的软件是武大的科傻软件,但是科傻软件任然存在许多不足的地方,比如科傻的软件不具有高斯投影换带计算以及大转角三维坐标基准转换的功能等。为了开发出一款功能比科...
  • 但网上只有不同椭球基准坐标系之间转换的片段资料或代码,本文将尽量展示出更多的核心代码(涉及变换的整个流程),供大家参考。 四参数计算 四参数变换模式主要用于范围较小平面坐标变换,四参数计算需要两个...
  • 坐标变换

    2019-05-19 22:50:28
    同一坐标系下的点旋转变换(如图1所示)和不同坐标系之间的旋转变换(如图2所示),一直困扰着我,它们是两个不同的概念,但形式上有很相似,以二维空间为例做了下推导,加深理解。 同一坐标系下的点旋转变换,...
  • 坐标转换工具:GPS工具箱

    热门讨论 2013-06-19 14:54:21
    非常好用的坐标转换工具,可以单点转换,还可以批量转换,支持多种坐标系,精度比Coord要高。
  • Arcgis 空间数据坐标转换工具 1.0

    热门讨论 2009-06-26 15:45:26
    对空间数据(目前支持:ArcGIS的SHP和Personal GeoDataBase,即Accees的MDB文件),实现单个文件或则多个文件批量转换,主要地理坐标(即经纬度坐标)和投影坐标(直角坐标系统)的相互转换(如西安80转经纬度,经纬度转...
  • 主要有三大功能:地理编码查询,坐标转换,POI查询,可以实现一般地理分析功能。ps:部分功能需注册
  • 火星坐标转换工具,支持批量转换

    热门讨论 2011-06-22 21:22:23
    火星坐标转换到地球坐标 地球坐标转换到火星坐标 批量转换工具 欢迎捐赠: 1HDTGpzYCK4BBvA3ik8gX7M1f3oDkX8Aax
  • 北京54坐标转换工具

    2018-09-26 12:49:31
    54坐标转换, 测量必备工具,亲测可用,简单易用,
  • gis矢量坐标转换工具

    2018-11-12 10:57:25
    矢量数据坐标转换,北京84、西安54、WGS84坐标投影之间的转换工具,还支持南海七参数转换
  • 地理、投影坐标转换工具

    热门讨论 2010-05-02 11:03:35
    坐标转换工具,能够进行地理坐标和各种投影之间的良好转换,可以一个一个转化,并支持批量转换。
  • 各地图坐标转换工具

    千次阅读 2020-01-19 16:54:15
    * 坐标转换工具类 * WGS84坐标系:即地球坐标系,国际上通用的坐标系。Earth (GPS坐标系) * GCJ02坐标系:即火星坐标系,WGS84坐标系经加密后的坐标系。Mars (谷歌地图(中国)、高德地图、腾讯地图) * BD09坐标系...

空空如也

1 2 3 4 5 ... 20
收藏数 222,588
精华内容 89,035
关键字:

坐标转换