给定纬度和经度数组,我尝试生成一个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元素的数组上运行它,其中一些元素是蒙面的。
有什么更好的方法来为带有掩码/nan值的数组生成陆地掩码?
发布于 2022-11-27 21:10:49
因此,globe.is_land(y,x)
似乎没有蒙面数组。一个公平的解决方案是在您的域中使用coord (如果可能的话)。所以:
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)
第二种解决方案将更改(扁平化) lat/lon数组,但不要求您在域外查找区域。
https://stackoverflow.com/questions/74593424
复制相似问题