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

计算所在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 ]))
'''

 

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Python 的 pyproj 库来实现将 WGS84 坐标系转换UTM 坐标系并进行偏移的操作。 首先,需要使用 pyproj 库中的 `Proj` 类来创建一个投影对象,其中包含了将 WGS84 坐标系转换UTM 坐标系所需的参数。例如: ```python import pyproj # 创建投影对象,用于将 WGS84 坐标系转换UTM 坐标系 proj = pyproj.Proj(proj='utm', zone=51, ellps='WGS84') ``` 然后,可以使用该投影对象的 `transform` 方法来将经纬度坐标转换UTM 坐标。例如: ```python # 将经纬度坐标 (121.473701, 31.230416) 转换UTM 坐标 x, y = proj(121.473701, 31.230416) print(x, y) # 输出 UTM 坐标 ``` 最后,可以对转换后的 UTM 坐标进行偏移。例如,将 UTM 坐标向右平移 1000 个单位,向上平移 2000 个单位: ```python # 对 UTM 坐标进行偏移 x_offset = x + 1000 y_offset = y + 2000 print(x_offset, y_offset) # 输出偏移后的 UTM 坐标 ``` 请注意,在进行坐标转换时需要确保输入的经纬度坐标是有效的,否则可能会得到错误的结果。 ### 回答2: 利用proj参数WGS84坐标系转换UTM坐标系后,可以对转换后的坐标进行进一步的偏移操作。UTM坐标系是一种投影坐标系,将地球表面划分为多个6度宽的投影带,在每个投影带内使用横轴为东西方向、纵轴为南北方向的直角坐标系来表示地球上的点。 在进行转换时,可以通过proj参数来指定投影的方法和具体的投影带。例如,使用proj参数"+proj=utm +zone=50 +ellps=WGS84"可以将WGS84坐标系转换UTM坐标系中50号投影带。在得到UTM坐标系中的结果后,如果需要进行偏移操作,可以通过改变转换后的东北坐标的数值来实现。例如,对于东北坐标分别为x和y的点进行偏移,可以将x坐标加上一个常量dx,将y坐标加上一个常量dy,从而得到偏移后的坐标。 需要注意的是,进行坐标偏移时,应该根据具体的应用场景确定偏移量的数值。如果是对整个坐标系进行整体平移,可以通过计算所有点的平均值,得到平移的偏移量。如果是对某个点进行局部偏移,可以根据具体需求进行调整。 总而言之,利用proj参数WGS84转换UTM坐标后,可以通过改变转换后的东北坐标的数值来实现偏移操作,实现对坐标的平移、旋转等变换。具体的偏移量应该根据实际应用场景来确定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值