【代码】WGS84坐标转UTM坐标

通用横轴墨卡托(UTM)是一种地图投影方法,它提供了一种为地球上的位置指定坐标的方式。像传统的经纬度系统一样,UTM也是一种水平位置表示法,这意味着它忽略了高度信息,而将地球表面视为一个理想的椭球体。然而,UTM与经纬度系统的主要区别在于,它将地球分割为60个区域,并将每个区域投影到一个平面上,作为坐标的基础。在这个系统中,位置的指定需要明确其所在的UTM区域以及在该区域内的x和y坐标。从椭球体到UTM区域的投影基于横向墨卡托投影的一系列参数,这些参数可能会因国家、地区或地图系统的不同而有所差异。

UTM系统将地球划分为60个区域,每个区域的经度跨度为6°。第一区覆盖了从西经180°到174°的地区,然后区域编号向东递增,直到第60区,覆盖东经174°到180°的地区。值得注意的是,南纬80°以南和北纬84°以北的极地区域并未纳入这个系统中。

undefined

随着接近UTM区域的边界,尺度的失真会逐渐增大。然而,在实际操作中,我们常常需要在两个相邻的区域内对一系列位置进行测量,这时使用单一的网格进行测量就显得尤为方便和必要。在大比例尺地图(如1:100,000或更大)的边界区域,制图者通常会在距离区域边界40公里的范围内标注出两个相邻UTM区域的坐标。理想情况下,我们应该在位置所在的区域网格上测量其坐标,但由于在靠近区域边界的地方,比例因子仍然相对较小,因此在必要时,我们可以将测量结果适当地延伸到相邻区域的一定范围内。

WGS84与UTM的区别

  1. WGS84:这是一种全球定位系统使用的坐标系统,它使用经度和纬度来表示地理位置。WGS84是一个基于地心的坐标系统,即它的原点是地球的质心。
  2. UTM:这是一种使用二维笛卡尔坐标系统表示地理位置的系统,它将地球表面(除了近北极和南极的地区)划分为多个区域,每个区域都使用自己的平面直角坐标系。UTM是一个基于地表的坐标系统,即它的原点是地球表面的某一点。

简单点来说,WGS84是球面坐标,包括经纬度,单位是度。UTM是平面坐标,包括x和y坐标,单位是米。

怎么把WGS84转为UTM

在python有一个库叫做utm,别人已经帮我们写好了。

安装:

pip install utm

使用例子:

import utm

def latlon_to_utm(lat, lon):
    """
    将经纬度转换为UTM坐标
    """
    utm_result = utm.from_latlon(lat, lon)
    return utm_result

# 测试代码
lat = 48.633
lon = -93.9667

utm_result = latlon_to_utm(lat, lon)
print(f"UTM coordinates: ({utm_result[0]}, {utm_result[1]})")
print(f"UTM zone: {utm_result[2]}{utm_result[3]}")

image-20240415151911015

是不是很简单?我们觉得简单是因为我们直接使用别人给我们写好的接口。

WGS84转UTM的原理和细节是很难的,不信你看一眼下面的公式。

image-20240415152203624

这里就不细嗦了,建议感兴趣的小伙伴一边细看python的utm库的源码,一边去看相关的资源。