前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >数据处理 | 投影转换案例:将非经纬度坐标数据转换至WGS84坐标系

数据处理 | 投影转换案例:将非经纬度坐标数据转换至WGS84坐标系

作者头像
用户11172986
发布2025-01-13 12:29:25
发布2025-01-13 12:29:25
14500
代码可运行
举报
文章被收录于专栏:气python风雨气python风雨
运行总次数:0
代码可运行

投影转换案例:将非经纬度坐标数据转换至WGS84坐标系

摘要

作者:崔忠强

编辑:气ython风雨

很多文件带着一些投影信息,导致经纬度和实际对应不上,这里提供一个做投影转换的案例。本文展示了如何读取这样的文件,并将其转换为常用的WGS84坐标系下的经纬度,以便进行正确的可视化和分析。

数据读取与初步检查

使用xarray库读取一个包含中国相对湿度月平均值的数据集文件。发现文件内部没有直接提供经纬度信息,只有x和y坐标以及时间维度。

代码语言:javascript
代码运行次数:0
复制
import xarray as xr

ds = xr.open_dataset(r'path_to_file\HiTMC_Monthly_China_RH_201901_201912.nc')
print(ds)

获取投影信息并进行转换

代码语言:javascript
代码运行次数:0
复制
`Projected Coordinate System: Albers_Conic_Equal_Area 
Projection: Albers 
false_easting: 4000000.00000000 
false_northing: 0.00000000 
central_meridian: 105.00000000 
standard_parallel_1: 25.00000000 
standard_parallel_2: 47.00000000 
latitude_of_origin: 0.00000000 
Linear Unit: Meter 
Geographic Coordinate System: GCS_WGS_1984 
Datum: D_WGS_1984 
Angular Unit: Degree `

根据附带的数据说明文档得知,该数据集使用的是阿尔伯斯等面积圆锥投影。因此,我们需要利用cartopy库来定义这个投影,并将其转换到WGS84坐标系下。

代码语言:javascript
代码运行次数:0
复制
import cartopy.crs as ccrs
import numpy as np

# 构建网格
x, y = ds.x, ds.y
x_grid, y_grid = np.meshgrid(x.values, y.values)

# 定义源投影(阿尔伯斯)
albers_proj = ccrs.AlbersEqualArea(
    central_longitude=105.0,
    false_easting=4000000.0,
    false_northing=0.0,
    standard_parallels=(25.0, 47.0)
)

# 目标投影(WGS84)
wgs84 = ccrs.PlateCarree()

# 将格点化的x和y转换为一个个点坐标。
points = wgs84.transform_points(albers_proj, x_grid, y_grid)
lon, lat = points[:,:,0], points[:,:,1]
#这样我们就得到了所对应的经度和纬度了!
lon,lat

数据预处理

由于数据集中RH变量的单位是0.01%,需要进行适当的转换,并且替换掉异常值以确保数据的有效性。

代码语言:javascript
代码运行次数:0
复制
variable_data = ds.RH.values / 100  # 单位转换为百分比
variable_data = variable_data[0,:,:]  # 选择1月份的数据
variable_data[variable_data > 100] = 100  # 剔除高异常值
variable_data[variable_data < 0] = 0  # 剔除低异常值或默认空值
variable_data

数据可视化

完成坐标转换和数据预处理后,可以使用matplotlib结合cartopy来进行数据的可视化展示。

代码语言:javascript
代码运行次数:0
复制
import matplotlib.pyplot as plt
import cartopy.feature as cfeature

fig, ax = plt.subplots(subplot_kw={'projection': wgs84})
ax.add_feature(cfeature.COASTLINE)
ax.add_feature(cfeature.BORDERS)
ax.add_feature(cfeature.LAKES, alpha=0.5)
ax.add_feature(cfeature.RIVERS)
ax.add_feature(cfeature.STATES)

contour = ax.contourf(lon, lat, variable_data, transform=wgs84, cmap='rainbow', vmin=0, vmax=100)
cbar = plt.colorbar(contour, orientation='horizontal', pad=0.05)
cbar.set_label('Relative Humidity (%)')  # 设置颜色条标签

ax.set_title('January 2019 Relative Humidity in WGS84 Coordinates')
plt.show()

总结

  • 查找文档:对于带有特定投影信息的数据文件,优先查阅相关文档获取投影参数。
  • 投影转换:根据提供的投影参数,使用cartopy进行投影转换,将x和y坐标转换为WGS84下的经纬度。
  • 数据处理:对数据进行必要的预处理,包括单位转换、异常值处理等。
  • 可视化:利用转换后的经纬度数据,结合matplotlibcartopy进行可视化。

请注意,不同数据集的具体情况可能会有所不同,上述步骤应根据实际数据特性调整。此外,如果需要进一步匹配特定格点,则可能需要考虑插值运算。 如果需要匹配自己需要的格点,可能需要一些插值运算, 气python风雨23年12月有相关文章,就不再赘述了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 投影转换案例:将非经纬度坐标数据转换至WGS84坐标系
    • 摘要
    • 数据读取与初步检查
    • 获取投影信息并进行转换
    • 数据预处理
    • 数据可视化
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档