使用pyproj进行WGS 1984和UTM的转换

本文介绍了如何使用Python的pyproj库进行地理坐标到UTM投影坐标的转换。通过示例展示了计算UTM区域的方法,并提供了坐标转换的代码。同时,解释了UTM投影的原理和带号计算规则,以及中国地区的UTM投影带号。对于进行地理信息系统(GIS)处理和遥感数据分析的读者,这篇内容提供了实用的指导。

计算所在utm区域

116/6 = 19.333333333333332
19+31 = 50

from pyproj import Transformer
transformer = Transformer.from_crs("epsg:4326", "epsg:32650")

lat = 40.0691643333333

lon = 116.242161333333
x3, y3 = transformer.transform(lat, lon)
transformer.transform(lat, lon)
(435376.10572293965, 4435708.949468517)

如果对自己需要进行转换的坐标系的WKID不了解,可以从以下两个网站进行查询:

地理坐标系WKID:https://developers.arcgis.com/javascript/3/jshelp/gcs.htm

投影坐标系WKID:https://developers.arcgis.com/javascript/3/jshelp/pcs.htm

 

32648WGS_1984_UTM_Zone_48N
PROJCS["WGS_1984_UTM_Zone_48N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",105.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
 
32649WGS_1984_UTM_Zone_49N
PROJCS["WGS_1984_UTM_Zone_49N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",111.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
 
32650WGS_1984_UTM_Zone_50N
PROJCS["WGS_1984_UTM_Zone_50N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",117.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
32651WGS_1984_UTM_Zone_51N
PROJCS["WGS_1984_UTM_Zone_51N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",123.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
 
32652WGS_1984_UTM_Zone_52N
PROJCS["WGS_1984_UTM_Zone_52N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",129.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]

UTM 投影(Universal Transverse Mercator,通用横轴墨卡托投影)是由美国军方在1947提出的,美国本土采用Clarke 1866椭球体以外,UTM在世界其他地方都采用WGS 1984。

        UTM 投影是一种等角横轴割圆柱投影,圆柱割地球于南纬80度、北纬84度两条等高圈,被许多国家用作地形图的数学基础,如中国采用的高斯-克吕格投影就是UTM投影的一种变形,很多遥感数据,如Landsat和Aster数据都应用UTM投影发布的。

        UTM投影将北纬84度和南纬80度之间的地球表面积按经度6度划分为南北纵带(投影带)。从180度经线开始向东将这些投影带编号,从1编至60(北京处于第50带) ,因此1带的中央经线为-177(-180 -(-6)),而0度经线为30带和31带的分界,这两带的分界分别是-3和3度。

        每个带再划分为纬差8度的四边形,从80S到84N共20个纬度带(X带多4度),分别用C到X的字母来表示。为了避免和数字混淆,I和O没有采用。两条标准纬线距中央经线为180KM左右,中央经线比例系数为0.9996。     UTM北半球投影北伪偏移为零,南半球则为10000公里。

        中国UTM投影带号中国国境所跨UTM带号为43-534。UTM投影带号计算

        如WGS_1984_UTM_Zone_49N,这个49的计算方法:    49:从180度经度向东,每6度为一投影带,第49个投影带    49=(114+180)/6,这个114为49投影带的最大经线。如图所示:

        北半球地区,选择最后字母为“N”的带,

       带数=(经度整数位/6)的整数部分+31

       如:广州市经度范围112.95-113.98,带数=113/6+31=49,选49N,即WGS 1984 UTM ZONE 49N

 

利用Python中的的pyproj库实现地理坐标向投影坐标转换  https://blog.csdn.net/hqs_09/article/details/100624829

pyproj库使用简介

1.Python中安装pyproj库

直接pip安装就好

pip install pyproj
  • 2.初始化坐标参考系统(CRS)

pyproj库提供了四种初始化参考坐标的方式,括号里面的数字是地图坐标系统在epsg中的代号,每一种地图坐标系统在epsg中都有一个唯一的数值与之对应,例如,4326对应的就是WGS84地理坐标系统,对应代码坐标系统的详细信息可以在https://epsg.io/查询。

from  pyproj  import  CRS
crs=CRS.from_epsg(4326)
crs = CRS.from_string("epsg:4326")
crs = CRS.from_proj4("+proj=latlon")
crs = CRS.from_user_input(4326)

3.检查坐标参考系统信息

直接输入刚才构造的crs对象,即可查看当前坐标系统的详细信息,在进行坐标转换之前,首先要检查坐标转换的范围和轴向信息,比如这里的wgs84地理坐标系的轴向信息是(纬度,经度),在后面输入经纬度坐标的时候切记是先纬度,后经度的顺序,不然整个坐标系统就完全乱了,转换出来的坐标可能会出现无穷大的错误值。
wgs84地理坐标洗描述
投影坐标洗描述

4.转换坐标

在转换坐标前,首先构造一个转换对象,确定是从哪个地理坐标向哪个投影坐标进行转换

transformer = Transformer.from_crs(crs,crs_cs)
# crs是wgs84坐标参考系统
# crs_cs是湖南省长沙市所在地区UTM投影坐标系(这里代号为49带)

读入需要转换的经纬度数据

import   pandas   as  pd
data=pd.read_csv('ex.csv')
'''测试数据
          lon        lat
0  112.901623  27.984723
1  112.891346  27.999936
2  112.902052  28.001706
3  112.907937  28.006145
4  112.911574  28.006142
5  112.911833  28.007062
'''
lon=data.lon.values
lat =data.lat.values

坐标转换

切记经纬度的输入顺序,输出的即是UTM坐标系统的xy系统坐标

transformer.transform(lat,lon)
'''
(array([687018.1260865 , 685980.99577337, 687030.93355121, 687602.0694474 ,
        687959.70480738, 687983.63799872]),
 array([3096966.74417735, 3098636.7189627 , 3098849.23596314,
        3099350.09742483, 3099355.45537758, 3099457.7973657 ]))
'''

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值