大地坐标高斯/UTM投影计算工具

    今天要跟大家分享的软件是一款坐标投影计算小工具,提供北京54、西安80、WGS84和CGCS2000坐标系进行高斯投影和UTM投影正反算计算(投影坐标与地理坐标相互转换),提供地理坐标度分秒格式与十进制度度格式的相互转换。本软件不提供坐标系之间的相互转换!!!


    坐标系和投影是测绘和GIS专业比较基础但也比较容易弄晕乎的知识点,因此在介绍该软件功能之前,先给大家普及下坐标系和投影的相关知识,讲的不对的地方,欢迎拍砖。

1、坐标系和投影

1)坐标系  

    测绘里的坐标系包括大地坐标系(全球的)和地方坐标系(局部的),地方坐标系相对复杂(参数保密),本文仅讨论大地坐标系。我国常用的大地坐标系包括北京54、西安80、WGS84和CGCS2000坐标系。

    大地坐标系是大地测量中以参考椭球面为基准面建立起来的坐标系,大地坐标系分为参心坐标系和地心坐标系2种。参心坐标系是以参考椭球的几何中心为原点的大地坐标系,比如我国的北京54坐标系和西

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
高斯/UTM投影是地图制图中常用的投影方式,它通过将地球表面分成若干个椭球体投影带来将地球表面坐标转换成直角坐标坐标或将直角坐标坐标转换成地球表面坐标的功能。正向转换指将地球表面坐标转换为直角坐标坐标,反向转换则指将直角坐标坐标转换为地球表面坐标。 正反算代码包含以下主要步骤: 1. 读取投影带号,确定投影系统和椭球体参数; 2. 对经纬度进行基准面转换,将大地坐标转换为空间直角坐标; 3. 计算投影带宽度,确定中央经线; 4. 计算投影坐标系原点; 5. 根据直角坐标坐标和椭球体参数计算高斯倍带投影坐标; 6. 根据投影坐标和椭球体参数计算经纬度坐标。 正向转换的代码示例如下: ```python import math def LLtoUTM(lat, lon): # 读取UTM带号以及椭球体参数 zone = math.floor((lon + 180) / 6) + 1 a = 6378137 f = 1/298.257223563 k0 = 0.9996 # 基准面转换 e2 = f * (2 - f) n = f / (2 - f) rho = a * (1 - e2) / pow(1 - e2 * pow(math.sin(lat), 2), 1.5) nu = a / pow(1 - e2 * pow(math.sin(lat), 2), 0.5) psi = nu / rho sin_t = math.sin(lat) cos_t = math.cos(lat) eta2 = e2 * pow(cos_t, 2) # 计算投影带宽度 lon0 = (zone - 1) * 6 - 180 + 3 x0 = 500000 y0 = 0 # 计算投影坐标系原点 m = a * ((1 - e2 / 4 - 3 * e2 * e2 / 64 - 5 * e2 * e2 * e2 / 256) * lat - (3 * e2 / 8 + 3 * e2 * e2 / 32 + 45 * e2 * e2 * e2 / 1024) * math.sin(2 * lat) + (15 * e2 * e2 / 256 + 45 * e2 * e2 * e2 / 1024) * math.sin(4 * lat) - (35 * e2 * e2 * e2 / 3072) * math.sin(6 * lat)) y = k0 * (m - y0) + k0 * nu * sin_t * ((lon - lon0) * math.pi / 180 + (1 - eta2) * math.sin(2 * lat) / 2 + (5 - 18 * eta2 + eta2 * eta2 + 72 * eta2 * eta2 * eta2) * math.sin(4 * lat) / 24 + (61 - 58 * eta2 + eta2 * eta2 + 600 * eta2 * eta2 * eta2) * math.sin(6 * lat) / 720) x = k0 * nu * cos_t * ((lon - lon0) * math.pi / 180 + (math.sin(lat) / cos_t) * (eta2 / 2 + (5 - eta2 + 9 * eta2 * eta2 + 4 * eta2 * eta2 * eta2) * pow(math.sin(lat), 2) / 24 + (61 - 58 * eta2 + eta2 * eta2 + 600 * eta2 * eta2 * eta2) * pow(math.sin(lat), 4) / 720)) return x, y ``` 反向转换的代码示例如下: ```python def UTMtoLL(x, y): # 读取UTM带号以及椭球体参数 a = 6378137 f = 1/298.257223563 k0 = 0.9996 e2 = f * (2 - f) n = f / (2 - f) rho = a * (1 - e2) / pow(1 - e2 * pow(math.sin(lat), 2), 1.5) nu = a / pow(1 - e2 * pow(math.sin(lat), 2), 0.5) psi = nu / rho # 计算投影带宽度 w = y / k0 z = (w / a / psi + 5 * (1 - n + 9 * n * n / 4 - 61 * n * n * n / 64) * math.sin(2 * lat) / 16 + (61 * n * n / 32 - 90 * n * n * n / 64) * math.sin(4 * lat) / 32 + (495 * n * n * n / 512) * math.sin(6 * lat)) / math.cos(lat) lat = (w / a - psi * z * math.sin(lat) * (1 + z * z / 6 + (5 - 18 * z * z + z * z * z * z + 72 * z * z * z * z * z *z) / 120)) * 180 / math.pi lon = (zone - 1) * 6 - 180 + 3 + z * math.fmod(1, 400000) / (k0 * nu * math.cos(lat) * math.pi / 180) return lat, lon ``` 以上是高斯/UTM投影坐标正反算代码的简单示例。需要注意的是,以上代码并不是完整的实现代码,仅供参考,实际应用仍需要根据具体情况进行适当的修改和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值