第一章坐标转换之坐标转换概述

最近接触到一些坐标转换的项目,其实之前也总接触到坐标转换的项目,但是由于我办公室有一个坐标转换大神,不会了就去问他,他都会细心解答,人非常的nice。最近回想起来,发现不能总依赖于别人,自己得把大学的知识总结和回顾一下,至少做到心中有数,不能给大学老师丢脸呀,遂准备写一写关于大地坐标转换的知识,与诸君共勉。
今天首先了解一下坐标系的概念:什么是坐标系?重点看加粗部分
1、我的理解:人们为了描述某个位置而在空间建立起来的一个基准(并不准确,具体的可以看一看物理书)。测绘里边我们通常会听到天球坐标系和地球坐标系,我们这里主要了解一下地球坐标系,它是用某种确定的方式联系到地球的坐标系。确定地球参考系时,必须定义它 的原点、尺度、定向。这些通常采用国际协议一致的方式来决定(IERS规范)。不能随意定义。
2、大地坐标系,通常大地坐标系分为参心坐标系和地心坐标系。
参心坐标系:是按参考椭球与局部区域的大地水准面最佳拟合的原则而建立的坐标系,所以原点会偏离地球质心。例如我们通常所说的西安80和北京54都属于参心坐标系。
地心坐标系:是指坐标系原点位于地球质心而建立起来的坐标系,通过卫星大地测量的手段建立的。由空间的三维网和速度实现。例如我国的CGCS2000坐标系。
无论的参心坐标系还是地心坐标系都包含地球椭球参数。因为都是建立在地球这个大椭圆的基础上的。椭球参数包含:长半轴、短半轴、扁率、第一偏心率、第二偏心率等。其中最为重要的是前三个参数。因为他们三个定了,基本就确定了这个椭球。在这里插入图片描述
3、我国自2008年7月1日开始启动2000国家大地坐标系,就是CGCS2000坐标系。到2018年7月1日止要求所有数据必须完成向2000坐标系转换的任务。 国家不再接受非2000坐标系上报的项目。
现在我们来了解一下CGCS2000坐标系,就是对准ITRF97框架,参考历元是2000.0。
什么是ITRF97? 它是全球分布1千多个有可靠坐标和速度的观测站,通过下载其GNSS观测数据可与测量点组成同步观测网。
年积日:从当年1月1日开始到当前累计日期,例如1月1日的年积日为1,7月1日的年积日为182。
历元:这个是很重要的概念,历指历法,元指首。就是历法之元,是古代历法的起始时刻。我们也可以通俗的理解为时刻的意思,例如GNSS观测时,观测10个历元的数据,就是观测10个时刻的数据。
我国2000坐标系的参考历元是2000.0,整数部分是年份,就是2000年,小数部分是年积日除以365(平年)或366(闰年),那么2000.0历元就是2000年1月1日。
因为我们CGCS2000坐标系的参考历元是2000.0,所以采用这个名字,而不是CGCS1980或者其他名字。
4、我们常说的地球上的坐标实际上分为静态坐标和动态坐标。这里的静态和动态是相对于起算点来说的。
4.1静态坐标:传统大地测量的坐标是没有考虑地球板块运动的。例如我们的西安80坐标系,因为他的坐标是通过大地原点引出的坐标,所以虽然客观上存在地球板块的运动,但是我们认为板块的运动地刚性的平移运动,因此点与点间的相对位置认为是不变的,在我们低精度的应用中,这样的坐标完全满足我们的应用。
4.2动态坐标:现代我们的测量技术都是空间定位技术,原点在地球的质心,或者说相对于动态框架点的坐标。因此这种高精度的地心坐标必须要考虑到板块运动的影响。我国大陆的地心坐标每年大约有3-4cm的变化。那么动态坐标的描述就必须分成两部分:点位在某个瞬时历元的坐标+点位的运动速度。如果知道某点的某个历元的坐标和速度,就可以算出任意历元的坐标。那么以2000坐标系为例,知道某点在2000历元下的瞬时坐标,然后用全国的速度场模型算出该点的速度,就可以得到该点CGCS坐标任意历元下的坐标。
特别注意:一个空间测量技术实现的地心坐标,必须注明其历元,这样才能归算到CGCS2000坐标系下。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在 macOS 中,有多种方式进行坐标转换。以下是其中两种常见的方法: 1. 使用坐标转换函数 在 macOS 中,可以使用以下函数将一个坐标点从一个坐标转换到另一个坐标系: ```objc NSPoint NSConvertPoint(NSPoint aPoint, NSRect fromRect, NSRect toRect); ``` 其中,`aPoint` 是需要转换坐标点,`fromRect` 是源坐标系(通常是屏幕坐标系),`toRect` 是目标坐标系(通常是视图坐标系)。例如,要将屏幕上的坐标转换为视图上的坐标点,可以这样写: ```objc NSPoint screenPoint = {100, 100}; // 屏幕坐标系 NSRect viewFrame = [self.view frame]; // 视图坐标系 NSPoint viewPoint = NSConvertPoint(screenPoint, nil, viewFrame); // 转换坐标 ``` 2. 使用坐标转换矩阵 另一种常见的方式是使用坐标转换矩阵。在 macOS 中,可以使用以下方法创建一个坐标转换矩阵: ```objc NSAffineTransform *transform = [NSAffineTransform transform]; [transform scaleXBy:scaleX yBy:scaleY]; [transform rotateByDegrees:rotation]; [transform translateXBy:translateX yBy:translateY]; ``` 其中,`scaleX` 和 `scaleY` 是缩放因子,`rotation` 是旋转角度,`translateX` 和 `translateY` 是平移量。例如,要将屏幕上的坐标转换为视图上的坐标点,可以这样写: ```objc NSAffineTransform *transform = [NSAffineTransform transform]; [transform translateXBy:-viewFrame.origin.x yBy:-viewFrame.origin.y]; // 将视图坐标系移到原点 [transform concat]; // 应用坐标转换矩阵 NSPoint screenPoint = {100, 100}; // 屏幕坐标系 NSPoint viewPoint = [self.view convertPoint:screenPoint fromView:nil]; // 转换坐标 ``` 这里使用了 `NSView` 类的 `convertPoint:fromView:` 方法,将屏幕上的坐标转换为视图上的坐标点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能量鸣新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值