由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
在全球气象数据分析中,判断一个经纬度点是否在陆地上是一个常见的需求。为了满足这一需求,global-land-mask Python 模块应运而生。它利用 GLOBE 数据集,以 1 公里分辨率对地球进行采样,并提取“无效”值来构建陆地掩码。该模块提供了快速、高效的globe.is_land()函数,可以帮助你轻松判断点的位置。
提供一个快速判断经纬度点是否在陆地上的方法。
构建一个紧凑、易于使用的全球陆地掩码数据包。
替换 Basemap 库中较慢的is_land()函数。
!pip install global-land-mask -i https://pypi.mirrors.ustc.edu.cn/simple/
Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/
Collecting global-land-mask
Downloading https://mirrors.ustc.edu.cn/pypi/packages/e6/e9/eaac67e39b68f64828a164f8dbfcf13baccd7382704ea120152af475f520/global_land_mask-1.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
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)
import xarray as xr
ds = xr.open_dataset("/home/mw/input/ERA5_Lekima4742/ERA5_Lekima.nc")
ds
<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: 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()
<matplotlib.collections.QuadMesh at 0x7f94f0a296a0>

u_masked2 =u.where(~is_land)
# 打开样例数据
u_masked2.plot()
<matplotlib.collections.QuadMesh at 0x7f94ef179640>


本项目旨在利用 Python 的 global-land-mask 库来判断给定的经纬度点是否位于陆地上,并对其进行可视化分析。
项目展示了如何结合多种工具进行数据处理和可视化,以实现科学分析的可视化表达。
你有什么感兴趣的题材,欢迎在评论区提出想法