admin管理员组文章数量:1516870
代码实战
代码实战 | 基于 global-land-mask 的陆地掩膜气象可视化
温馨提示
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
前言
在全球气象数据分析中,判断一个经纬度点是否在陆地上是一个常见的需求。为了满足这一需求,global-land-mask Python 模块应运而生。它利用 GLOBE 数据集,以 1 公里分辨率对地球进行采样,并提取“无效”值来构建陆地掩码。该模块提供了快速、高效的globe.is_land()函数,可以帮助你轻松判断点的位置。
项目目标
提供一个快速判断经纬度点是否在陆地上的方法。
构建一个紧凑、易于使用的全球陆地掩码数据包。
替换 Basemap 库中较慢的is_land()函数。
安装依赖
代码语言:javascript代码运行次数:0运行复制!pip install global-land-mask -i /
代码语言:javascript代码运行次数:0运行复制Looking in indexes: /
Collecting global-land-mask
Downloading .0.0-py3-none-any.whl (1.8 MB)
[K |████████████████████████████████| 1.8 MB 2.6 MB/s eta 0:00:01
[?25hInstalling collected packages: global-land-mask
Successfully installed global-land-mask-1.0.0
代码示例
代码语言:javascript代码运行次数:0运行复制import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from global_land_mask import globe
# 定义经纬度范围
lat = np.linspace(10, 90, 1000)
lon = np.linspace(60, 140, 1002)
# 创建经纬度网格
lon_grid, lat_grid = np.meshgrid(lon, lat)
# 判断每个点是否在陆地上
z = globe.is_land(lat_grid, lon_grid)
实际应用
代码语言:javascript代码运行次数:0运行复制import xarray as xr
ds = xr.open_dataset("/home/mw/input/ERA5_Lekima4742/ERA5_Lekima.nc")
ds
代码语言:javascript代码运行次数:0运行复制<xarray.Dataset> Dimensions: (longitude: 401, latitude: 321, level: 7, time: 72) Coordinates:
longitude (longitude) float32 60.0 60.25 60.5 60.75 ... 159.5 159.8 160.0latitude (latitude) float32 80.0 79.75 79.5 79.25 ... 0.75 0.5 0.25 0.0level (level) int32 250 500 600 700 850 925 1000time (time) datetime64[ns] 2019-08-08 ... 2019-08-10T23:00:00 Data variables: z (time, level, latitude, longitude) float32 ... r (time, level, latitude, longitude) float32 ... q (time, level, latitude, longitude) float32 ... t (time, level, latitude, longitude) float32 ... u (time, level, latitude, longitude) float32 ... v (time, level, latitude, longitude) float32 ... w (time, level, latitude, longitude) float32 ... Attributes: Conventions: CF-1.6 history: 2023-05-29 04:40:37 GMT by grib_to_netcdf-2.25.1: 洋面掩膜
代码语言:javascript代码运行次数:0运行复制from global_land_mask import globe
import xarray as xr
lat = ds.latitude
lon = ds.longitude
lon_grid, lat_grid = np.meshgrid(lon,lat)
# 使用 global-land-mask 生成掩码
is_land = globe.is_land(lat_grid, lon_grid)
# 3. 应用掩码
u = ds.u[0,0]
# 将海洋上的 u 数据设置为 NaN
u_masked =u.where(is_land, np.nan)
# 打开样例数据
u_masked.plot()
代码语言:javascript代码运行次数:0运行复制<matplotlib.collections.QuadMesh at 0x7f94f0a296a0>
陆面掩膜
代码语言:javascript代码运行次数:0运行复制u_masked2 =u.where(~is_land)
# 打开样例数据
u_masked2.plot()
代码语言:javascript代码运行次数:0运行复制<matplotlib.collections.QuadMesh at 0x7f94ef179640>
细化绘图
小结
本项目旨在利用 Python 的 global-land-mask 库来判断给定的经纬度点是否位于陆地上,并对其进行可视化分析。
项目展示了如何结合多种工具进行数据处理和可视化,以实现科学分析的可视化表达。
你有什么感兴趣的题材,欢迎在评论区提出想法
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-01-10,如有侵权请联系 cloudcommunity@tencent 删除数据globalmask函数可视化本文标签: 代码实战
版权声明:本文标题:代码实战 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/shuma/1753150182a3120134.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论