记录GIS上的坐标转化(简单版)

0 为什么要坐标转化?

        因为RTK测到的是经纬度坐标,如果需要正常的测量面积、测量长度,那么必须换到局部投影坐标系下来。

1 GIS用到的坐标系简介

        1.1 大地坐标系

        就是用经纬度表示的,比如说西安80、bj54、WGS84都是这个

        表示了不同的椭球体!其实都是椭球体!我们的CGCS2000就是更拟合中国局部地图的椭球体。

        1.2 投影坐标系

        就是用XYZ表示的,是局部投影的。

        每一个大地坐标系都有投影坐标系。但是当然,由于椭球拟合的不准确,投影坐标系自然也是不准确的。

        总之,如果我们需要转化,那么就还是选择CGCS2000的投影坐标系,我们称之为高斯-克吕格投影坐标系。

2 从WGS84到CGCS2000投影

        高斯克吕格是按带分的,也就是经纬度不同,高斯克吕格坐标系是不一致的。

坐标系对应EPSG代号、经度范围、中央经线 - 豆丁网 (docin.com)

        可以从这查带号,然后原有的WGS84的EPSG代号是4326.

        然后用pyproj的库来解决就可以了,接入了高精度的坐标换算程序。

from pyproj import CRS, Transformer

# 定义 WGS84 地理坐标系统和高斯-克吕格投影坐标系统

wgs_crs = CRS('epsg:4326')  # WGS84 地理坐标系统
local_crs = CRS('epsg:4547')  # 高斯-克吕格投影,以东经114度3度带为例

# 创建坐标转换器
transformer = Transformer.from_crs(wgs_crs, local_crs, always_xy=True)

# 原始 CGCS2000 坐标点 (经度, 纬度, 高度)
longitude, latitude, height = 114.14810697, 32.14617873, 86.0410000000  # 示例:信阳

# 进行坐标转换(包括高度)
x_proj, y_proj, z_proj = transformer.transform(longitude, latitude, height)

print(x_proj, y_proj, z_proj)

        我们会发现!高程不会在坐标系转换中改变!因为坐标系本身不涉及高程改变,很多时候是自己设置了高程的基准面!

3 从CGCS2000投影到局部坐标系

        如果我们不更改X和Y,(工程上基本上也是按CGCS2000来放样的)

        可以直接选择局部坐标基准点,做个简单的算法加减。

from pyproj import CRS, Transformer


# 设定一个局部原点,比如一个具体建筑物或地标的坐标
local_origin = (114.14747527, 32.14612994, 86.0410000000)  # 假设这是局部原点的经纬度和高度
x_origin, y_origin, z_origin = transformer.transform(*local_origin)

# 计算局部坐标
x_local = x_proj - x_origin
y_local = y_proj - y_origin
z_local = z_proj - z_origin

print(f"局部坐标系下的坐标: X={x_local}, Y={y_local}, Z={z_local}")

        事实上,需要精准的进一步测量再去调整误差,如果直接这么转换,3度带还是不准的!但是基本上误差在1cm内,也就不在乎这个了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值