numpy 根据纬度和经度数组创建地面遮罩

cbeh67ev  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(186)

给定纬度和经度数组,我试图生成一个land_mask,一个同样大小的数组,它告诉我们一个坐标是否是陆地。

lon=np.random.uniform(0,150,size=[1000,1000])
lat=np.random.uniform(-90,90,size=[1000,1000])

from global_land_mask import globe
land_mask=globe.is_land(lat,lon)

如果定义了所有的值,这是一种非常有效的创建焊盘掩码的方法。但是如果lat或lon中的某些值被掩码或为nan值,则会引发错误。
我尝试过使用for循环来避免这个错误,但是运行它需要15-20分钟,我必须在一个有3000×3000个元素的数组上运行它,其中一些元素被屏蔽了。
为具有masked/nan值的阵列生成焊环掩码的更好方法是什么?

ddhy6vgd

ddhy6vgd1#

因此globe.is_land(y,x)似乎不接受掩码数组。合理的解决方案是使用域之外的坐标(如果可能)。因此:

lon[lon==327.67] = 170
lat[lat==327.67] = -90

from global_land_mask import globe
land_mask=globe.is_land(lat,lon)

masked = np.where((lat==-90)|(lon==170), False, land_mask)

或者,您可以在传入值之前先遮罩它们:

lat_mask = np.where(lat==326.67, np.nan, lat)
lon_mask = np.where(lon==326.67, np.nan, lon)

master_mask = np.where((lat_mask==np.nan)|(lon_mask==np.nan), False, True)

lat[master_mask]==True 
lon[master_mask]==True 

from global_land_mask import globe
land_mask=globe.is_land(lat,lon)

第二种解决方案将更改(展平)您的平面/平面数组,但不要求您查找域之外的区域

相关问题