首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >代码实战 | 基于 global-land-mask 的陆地掩膜气象可视化

代码实战 | 基于 global-land-mask 的陆地掩膜气象可视化

作者头像
用户11172986
发布2025-01-11 21:23:24
发布2025-01-11 21:23:24
4650
举报
文章被收录于专栏:气python风雨气python风雨

代码实战 | 基于 global-land-mask 的陆地掩膜气象可视化

温馨提示

由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可

前言

在全球气象数据分析中,判断一个经纬度点是否在陆地上是一个常见的需求。为了满足这一需求,global-land-mask Python 模块应运而生。它利用 GLOBE 数据集,以 1 公里分辨率对地球进行采样,并提取“无效”值来构建陆地掩码。该模块提供了快速、高效的globe.is_land()函数,可以帮助你轻松判断点的位置。

项目目标

提供一个快速判断经纬度点是否在陆地上的方法。

构建一个紧凑、易于使用的全球陆地掩码数据包。

替换 Basemap 库中较慢的is_land()函数。

安装依赖

代码语言:javascript
复制
!pip install global-land-mask -i https://pypi.mirrors.ustc.edu.cn/simple/
代码语言:javascript
复制
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

代码示例

代码语言:javascript
复制
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
复制
import xarray as xr
ds = xr.open_dataset("/home/mw/input/ERA5_Lekima4742/ERA5_Lekima.nc")
ds
代码语言:javascript
复制
<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
复制
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
复制
<matplotlib.collections.QuadMesh at 0x7f94f0a296a0>

陆面掩膜

代码语言:javascript
复制
u_masked2 =u.where(~is_land)
# 打开样例数据
u_masked2.plot()
代码语言:javascript
复制
<matplotlib.collections.QuadMesh at 0x7f94ef179640>

细化绘图

小结

本项目旨在利用 Python 的 global-land-mask 库来判断给定的经纬度点是否位于陆地上,并对其进行可视化分析。

项目展示了如何结合多种工具进行数据处理和可视化,以实现科学分析的可视化表达。

你有什么感兴趣的题材,欢迎在评论区提出想法

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码实战 | 基于 global-land-mask 的陆地掩膜气象可视化
    • 温馨提示
    • 前言
    • 项目目标
    • 安装依赖
    • 代码示例
    • 实际应用
    • 洋面掩膜
    • 陆面掩膜
    • 细化绘图
    • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档