坐标转换问题

    坐标转换对测量很重要。

    首先,弄清楚几种坐标表示方法经度纬度和高度,空间直角坐标,平面坐标和高程。我们通常所说的WGS84坐标是经纬度高程这一种,北京54是平面坐标和高程这一种。

    其次,转换的严密性问题,在同一个椭球中的转换都是严密的,不存在精度损失,都是严格的计算公式。而在不同的椭球之间的转换时不严密的,也就是说在不同椭球体之间进行参数转换,不存在任何一套转换参数是全国通用的,在每个地方都会不一样,因为他们是两个不同的椭球基准。

    那么,不同椭球体之间的坐标转换是怎么样的呢?一般而言,比较严密的是7参数法(包括布尔沙模型,一步法模型,海尔曼特等),即X平移、Y平移、Z平移、X旋转、Y旋转、Z旋转、尺度变换K。求7参数需要至少3个已知点,如果区域范围不大,最远点间距不大于30km(经验值)。还可以用三参数,三参数是7参数的一种特例(后四个都是0)。

    在同一个椭球的不同坐标系中转换可能会用到平面转换,现阶段一般分为4参数和平面网格拟合两种方法。举个例子,在深圳既有北京54坐标,又有深圳坐标,在这两种坐标之间转换就用到4参数,计算4参数需要2个已知点。更精确的可以提供网格拟合数据,笑脸软件提供计算和应用4参数的功能,也提供网格拟合功能。

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

    最后,笑脸软件还提供ITRF框架转换方法,涉及到ITRF2000和ITRF96,、ITRF93之间的转换。

举个例子

    在珠江有个测区,需要完成WGS84坐标到珠江坐标系(54椭球)的坐标转换,整个转换过程是:

 

实例一

转换要求

    用户在一个佛山测区内使用RTK GPS接收机接受了一些点的WGS-84坐标。现在希望将其转换为北京54和佛山坐标下的坐标。用户有佛山测区的一些控制点,这些控制点有WGS84坐标,也有北京-54坐标,也有佛山坐标。

分析

    WGS-84坐标和北京-54坐标是两个椭球的坐标转换,得求7参数或3参数,而北京-54和佛山坐标都是同一个椭球,所以他们质检的转换是地方坐标转换,需要求地方转换4参数,因为要求得到北京54坐标是平面坐标,所以需要设置投影参数。

步骤

    1. 新建坐标转换文件,便于下次使用转换而不用重新输入,直接打开即可。

    新建坐标转换文件过程如下:打开笑脸,设置源坐标类型,坐标转换方式和目标坐标类型,还有椭球基准,单击文件,选择保存。弹出保存窗口,命名坐标转换文件,设置国家,单击保存,新建坐标转换文件成功。单击文件,选择打开,选择刚才新建的坐标转换文件,就可以看到笑脸界面的标题栏显示了新建坐标转换文件的名称。

    2.设置投影参数。单击设置,选择投影设置,选择投影方式,设置中央子午线,单击确定

    3.用一个已知点(WGS-84坐标和北京-54坐标),计算不同椭球转换的7/3参数。单击设置,选择计算3参数

    4.确认转换参数。计算3参数完成后,接着弹出椭球转换参数,单击确定即可。

    5.打开7参数转换,完成WGS84到北京54的转换。

    6.利用多个已知点(北京54和佛山坐标),计算同一个椭球的地方坐标转换(四参数)。

    7.确定转换参数。

    8.同时打开7参数和平面转换,完成WGS84-佛山的转换。

 

实例二

转换要求

    用户在一个测区内有一些北京54的点坐标,现在希望将其转换为国家80坐标,用户有测区内的一些控制点,这些控制点既有北京54坐标 又有国家80坐标。

文件转换

    用户如果需要转换的是一个文件里的所有点,可以用文件转换来完成。

    1.确定转换关系。按实例一1-8的步骤,这样就确立了转换关系,也就是说文件里所有的点都按照上面确定的转换关系来完成转换。注意转换文件坐标点都是建立在确定转换坐标关系的基础上,也就是说,没有前面的这些计算,就没有确定的公式来转换文件坐标。

    2.确定转换格式。在主界面选择文件转换,单击格式按钮。

    自定义新格式:在名称、扩展名后输入相应的内容,然后自己选择数据列表中的内容并添加到新格式中,如果列表中没有合适的字段,就用其他来表示,完成后单击完成新建。

    选择格式:新建完成后,在格式列表中选择新建格式文件。

    文件转换方式:转换后的文件有三种命名方式,可以根据自己的需求设置。

    3.设置完格式后,浏览按钮就可用了,单击浏览,选择需要转换的文件,然后单击转换箭头,文件即可转换为目标坐标系统文件,双击文件列表中的文件,可以打开查看文件内容。

实例三

转换要求

    用户在番禹工作,要求完成从WGS84到国家80的转换,由于测区范围较大,需要进行7参数转换。注意,这个例子同样适合与直接从WGS84转换到地方坐标。

分析

    首先分析坐标,7参数转换模型的特点,要求转换的坐标不能相差太大。

    WGS-84的坐标为:023:09:33.6274   112:55:41.2119    62.536

    国家80的坐标为:562589.8110     290115.8140      70.3590

    用WGS84不加任何参数转换为平面坐标为:2562588.851341      390232.479605

    可以看到X的大数差-2000000,Y的大数差-100000

    所以改变投影参数里的X,Y常数改正为:X常数:0-2000000=-2000000   Y常数:500000-100000=400000

步骤

    1.设置投影参数。

    2.计算7参数。

    选择坐标转换菜单下的计算7参数,打开对话框。

    设置好源坐标和目标坐标的数据类型,椭球基准,输入源坐标和目标坐标,单击增加,就会将输入的坐标增加到计算列表中去,同样的方法,至少添加3个已知同名点坐标,单击计算,就可以在计算结果中看到结果。同时在RMS中会显示使用这套参数计算每个点的坐标中误差,如果发现误差太大,可能坐标中存在输入是错误,这时可以在列表中选择不同的站点计算,知道满意为止,完成后单击确定

    3.设置7参数。设置完成后,单击确定

    4.完成转换。

    选择7参数转换,打上√,就可以完成了,完成后单击保存,下一次就可以使用同样的参数。

    注意:上述方法同样适用于WGS84直接转换为地方坐标,关键是确定好投影参数的X,Y常数。

实例四

转换要求

    将WGS84坐标一步转换为天津港坐标,适用上述的第三种方法,发现不能够实现。误差较大,在笑脸的4.5版后,增加了一步转换的方法。

步骤

    1.设置投影参数,只设置中央子午线即可。

    2.计算7参数,直接输入WGS84坐标和当地坐标,方法如上。

    如果PRMS(平面误差)和HRMS(高程误差)都在允许范围之内,就可以单击确定。如果有误差,注意检查投影参数是否是当地坐标的参数。

    3.设置一步参数,界面和原有的7参数是一样的,就是左下角多了一个一步转换参数,打上√,(原有的WGS84到北京54的7参数不用打钩),单击确定

    4.选择7参数,检查计算结果。

    坐标反算,只要交换一下目标坐标和椭球基准选择就可以了,参数不用修改。

 

转载于:https://www.cnblogs.com/ashincaiyuan/p/7151483.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本软件是“测量计算工具包软件”的全面升级版。升级后的软件强化了坐标转换的功能,精简了其他不大使用的功能,软件名称更改为“坐标转换”,2013是全面升级后的第一个版本。 为适应国家测绘局地理信息办公室《2000国家大地坐标系推广使用技术指南》(以下简称《指南》)和《大地测量控制点坐标转换技术规程》(以下简称《规程》)的要求,坐标转换2013除保留原有的布尔沙模型和二维四参数模型外,增加了三维七参数、二维七参数、三维四参数和多项式拟合模型。另外,在转换参数的表达形式上也进行了调正,将“尺度比”改为“尺度变化”,与《指南》和《规程》保持一致。 升级后的坐标转换软件对程序界面和代码也进行了优化,参数的数值表示方式由固定宽度改为科学表示方式,使得其计算精度更高。 升级前的“椭球间的坐标转换”对应于升级后的“布尔沙模型”,升级前的“多公共点相似变换”对应于升级后的“二维四参数模型”。这两种模型升级前的转换参数完全可以用于升级后的软件,仅需将将“尺度比”换算为“尺度变化”即可,换算公式为:尺度变化D=尺度比K-1。 如果用户拥有转换区域的公共点(《指南》和《规程》叫“重合点”)的话,建议用升级后的软件重新计算转换参数。 必须说明的是,不同的转换模型,转换参数是不能互换的。 本软件的所有转换模型的计算公式都来源于《指南》和《规程》,仅对“多项式拟合”公式的表达形式进行了格式上的统一。 坐标转换2014版增加了GPS高程拟合和墨卡托投影正反算转换
四参数坐标转换是指将一个坐标系中的坐标转换到另一个坐标系中的过程。在C++中实现四参数坐标转换,需要先了解四参数坐标转换的原理和公式,然后编写相应的代码实现。 四参数坐标转换的原理是通过四个参数(平移量和旋转角度)来描述两个坐标系之间的关系,然后利用这些参数将一个坐标系中的坐标转换到另一个坐标系中。具体的转换公式可以参考相关文献或者网上资料。 在C++中实现四参数坐标转换,可以先定义一个坐标类,用来表示坐标系中的点。然后定义一个转换类,用来存储四个参数和实现坐标转换的方法。在坐标转换的方法中,根据四个参数计算出变换矩阵,然后将要转换坐标点与变换矩阵相乘,得到转换后的坐标点。 以下是一个简单的C++代码示例,供您参考: ```c++ #include <iostream> #include <cmath> using namespace std; // 坐标类 class Point { public: double x, y; Point(double x = 0, double y = 0) : x(x), y(y) {} void print() { cout << "(" << x << ", " << y << ")" << endl; } }; // 转换类 class Transform { public: double dx, dy, angle, scale; Transform(double dx = 0, double dy = 0, double angle = 0, double scale = 1) : dx(dx), dy(dy), angle(angle), scale(scale) {} Point transform(Point p) { double radians = angle * M_PI / 180; double cosA = cos(radians); double sinA = sin(radians); double x = p.x * cosA - p.y * sinA; double y = p.x * sinA + p.y * cosA; x = x * scale + dx; y = y * scale + dy; return Point(x, y); } }; int main() { Point p(1, 1); Transform t(1, 1, 45, 2); Point q = t.transform(p); q.print(); return 0; } ``` 以上代码中,我们定义了一个Point类和一个Transform类。Point类表示一个坐标点,Transform类表示一个坐标系的转换。在Transform类中,我们定义了四个参数:dx和dy表示平移量,angle表示旋转角度,scale表示缩放比例。transform()方法用来实现坐标转换,其中首先将角度转换为弧度,然后根据旋转角度计算出变换矩阵,最后将要转换坐标点与变换矩阵相乘,得到转换后的坐标点。 在main()函数中,我们定义了一个坐标点p(1, 1)和一个转换t(1, 1, 45, 2),然后调用transform()方法将坐标点p转换坐标点q,并输出q的坐标值。 希望这个示例能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值