利用regionmask模块和shp文件进行区域掩码时的误区

地理数据分析中经常需要根据研究区域的shp文件对数据进行裁剪,在Python中常利用regionmask的掩码功能来实现。最近使用时发现自己对这一掩码的结果的理解上存在误区,导致不能得到想要的结果。

原本的代码如下:

mask_table = regionmask.mask_geopandas(shp_file, lon, lat) #lon,lat 为同样大小的二维数组
var_masked = np.ma.array(var, mask=mask_table) #var 是掩码前的数据,var_masked是掩码后的数据

使用的shp_file文件是包含全国所有省份边界的文件,每个省份对应一个编号及相应的多边形数据,实际使用中仅使用其中一个省份,如“湖北”对应编号为12。

问题:如果regionmask得到的结果mask_table是关于每个格点是否在区域内的布尔型值(即True、False),那么上述语句就应该能够将研究区域的数据裁剪出来,但实际的结果是没有数据被裁剪出来(也就是没有格点落在区域内)。

原因:经过两天追查,发现问题在于:regionmask的结果mask_table并不是我以为的布尔型值,而是:区域外为nan,区域内则为区域的编号(对于“湖北”就是12)。当用这一mask_table进行np.ma.array掩码时,自动将数值转化为True或False,而nan和12都为非0值,因此都被当成了True,也就全部被掩码覆盖了。

解决办法:将regionmask结果mask_table的nan转换为True(要被掩盖的区域),将有效编号数值转换为False(不要被掩盖的区域),再代入np.ma.array进行掩码,如下:

mask_table = regionmask.mask_geopandas(shp_file, lon, lat) #lon,lat 为同样大小的二维数组
mask_table_2 = ~ (np.array(masked_table)>=0)
var_masked = np.ma.array(var, mask=mask_table_2) #var 是掩码前的数据,var_masked是掩码后的数据
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值