前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用shapefile文件创建mask筛选数据

利用shapefile文件创建mask筛选数据

作者头像
bugsuse
发布2022-09-23 14:19:19
1.3K0
发布2022-09-23 14:19:19
举报
文章被收录于专栏:气象杂货铺

最近在处理数据,需要筛选陆地、海洋还有特定区域的信息进行分析,主要还是利用shapefile文件创建mask文件,然后进行筛选。

创建mask文件

创建mask文件主要利用的是 regionmask 库,示例如下:

这里采用的是全球海岸线数据创建陆地和海洋mask文件,shape文件可以直接利用 cartopy 进行下载。

代码语言:javascript
复制
import numpy
import geopandas as gpd
import regionmask as rm

cnm = gpd.read_file('natural_earth/physical/ne_10m_land.shp')

lon = np.arange(80, 140, 0.05)
lat = np.arange(10, 60.05, 0.05)

lm = rm.mask_geopandas(cnm, lon, lat)
lm.data[lm.data >= 0] = 1
# 陆地为 1,海洋为 0 

lm.to_netcdf('mask_land_ocean.nc', engine='netcdf4', encoding={'region': {'dtype': np.int16}})

mask结果可视化

其实,这里创建了mask文件之后,可以直接在画图的时候进行白化,比如:

代码语言:javascript
复制
ds_mask = ((ds.tbb_13 - 273.15)
             .sortby('latitude')
             .isel(time=0)
             .sel(latitude=slice(10, lat.max()), 
                  longitude=slice(lon.min(), lon.max()),
                 )
             .where(lm.values >= 0)
             .plot(vmin=-105, vmax=60, cmap=summer))

mask文件白化结果

筛选数据

其实地图的白化也算是数据筛选了,这里提到的数据筛选主要是用来筛选站点数据。利用创建的不同mask文件来筛选指定区间的数据。

比如,这里我们将降水之类的站点数据读取到 ds 变量之中,其中包含了经纬度信息,那么我们就可以按照如下方式进行筛选了,下图是筛选站点分布:

代码语言:javascript
复制
import xarray as xr

mask = xr.open_dataset('mask_land_ocean.nc')

lat, lon = xr.DataArray(ds.latitude.values), xr.DataArray(ds.longitude.values)

# 选择距离这些观测站点经纬度最近的mask文件经纬度坐标
idx = mask.region.sel(lon=lon, lat=lat, method='nearest')

ocean_sta = ds[idx.data < 1]
land_sta = ds[idx.data > 0]

站点筛选可视化

当然也可以利用其它shapefile文件创建mask文件筛选数据,比如江苏省shapefile文件。此外,regionmask 官方文档还给出了任意形状的mask教程,感兴趣的可以查阅官方文档。

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

本文分享自 气象汇 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建mask文件
  • 筛选数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档