首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从纬度和经度数组创建一个陆地掩码

从纬度和经度数组创建一个陆地掩码
EN

Stack Overflow用户
提问于 2022-11-27 20:05:59
回答 1查看 44关注 0票数 1

给定纬度和经度数组,我尝试生成一个land_mask,一个大小相同的数组,用于判断坐标是否为陆地。

代码语言:javascript
运行
复制
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值的数组生成陆地掩码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-27 21:10:49

因此,globe.is_land(y,x)似乎没有蒙面数组。一个公平的解决方案是在您的域中使用coord (如果可能的话)。所以:

代码语言:javascript
运行
复制
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)

或者,您可以在传递值之前屏蔽它们:

代码语言:javascript
运行
复制
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数组,但不要求您在域外查找区域。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74593424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档