文章目录
- proj用法简介
- UTM投影系统
proj用法简介
pyproj
是proj为python提供的接口,用于地理信息的坐标转换。
安装十分常规
pip install pyproj
下面以北京的经纬度为例,将其从WGS84转为UTM投影坐标
from pyproj import Transformer# 参数1:WGS84地理坐标系统 对应 4326
# 参数2:北京所在区域 WGS_1984_UTM_Zone_49N 对应 32649
tf = Transformer.from_crs("epsg:4326", "epsg:32649") lat = 39.906
lon = 116.425
x, y = tf.transform(lat, lon)
print("x:", x, "y:", y)
# x: 963834.1116911535 y: 4431434.613170416
其中地理坐标与投影坐标转换所用到的EPSG
代码可在下面两个网址中找到
投影坐标系统💎地理坐标系统
所谓EPSG,即欧洲石油调查组(European Petroleum Survey Group),可能是由于精确的地理位置对石油调查至关重要,所以他们编辑并推广了EPSG大地参数测量集,也就是pyproj
中用到的EPSG代码的来源。
WGS84是GPS采用的地理坐标系统,为右手系,以地球质心为坐标系原点,也就是说,GPS得到的经纬高度信息就是基于这种坐标系统。
UTM投影系统
UTM则为通用横墨卡托(Universal Transverse Mercator)格网系统,由美国军方在1947提出,除在美国本土采用Clarke 1866椭球体以外,在世界其他地方都采用WGS84坐标。
所谓墨卡托投影,可以理解为把地球表面这个三维球面映射到平面直角坐标。但众所周知,直接投影会将极地放大而赤道附近变小,一个直观的后果就是使得印度变得特别小。为了解决这个问题,要对地球进行分区处理,在不同的区域,采取不同的平面坐标原点,从而尽可能满足局部经度。
由于UTM是美国制定的,为了保证美国本土处于0-30带内,故而起始分带并不在本初子午线,而是从东经(西经)180度起算,自西向东,采用6度分带,故而1带的中央经线为-177,范围是-174~-180。
从而其分带号为
N = ⌊ L / 6 ⌋ + 31 N=\lfloor L/6 \rfloor+31 N=⌊L/6⌋+31
其中 L L L为经度,即经度除以6之后向下取整,在加31。
然后北半球地区,在带号后面加个N
,即为UTM分度带的序号,其中中国所在区域的带号如下
带号 | 中央经度 | 经度范围 |
---|---|---|
43 | 75E | 72E-78E |
44 | 81E | 78E-84E |
45 | 87E | 84E-90E |
46 | 93E | 90E-96E |
47 | 99E | 96E-102E |
48 | 105E | 102E-108E |
49 | 111E | 108E-114E |
50 | 117E | 114E-120E |
51 | 123E | 120E-126E |
52 | 129E | 126E-132E |
53 | 135E | 132E-138E |
可见北京的带号是49N,故而,在投影坐标系统网站中,搜索WGS_1984_UTM_Zone_49N
,便能看到EPSG
的序号为32649。