You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中快速筛选0.25分辨率全球点矢量的陆地区域点?

更快提取陆地区域点的实用方法

针对0.25度全球规则点的陆地筛选,terra::extract效率偏低的问题,试试这几个更高效的方案:

1. 用terra::intersect直接替代extract

如果你只需要保留落在陆地上的点,intersect是更直接的选择——它直接计算点和面的空间交集,返回落在陆地区域内的点要素,比extract的属性提取逻辑更轻量化,速度快很多。

# 假设你的点矢量是points,世界面要素是world
land_points <- terra::intersect(points, world)

如果不需要保留面要素的属性,后续可以用terra::select(land_points, names(points))只保留点的原始字段。

2. 先简化世界面要素

rnaturalearth的世界面包含大量细碎岛屿,会大幅增加空间计算的复杂度。先简化面要素的顶点数,完全不影响0.25度分辨率的点匹配,却能显著提速:

# 用0.1度的容差简化(可根据需求调整,容差越大简化程度越高)
world_simplified <- terra::simplifyGeom(world, tolerance = 0.1)
land_points <- terra::intersect(points, world_simplified)

3. 栅格掩码筛选(规则格点最优解)

因为你的点是规则的0.25度栅格点,用栅格掩码的方式效率最高,避免了矢量交集的复杂计算:

# 创建和点同范围、同分辨率的空栅格
r <- terra::rast(points, res = 0.25)
# 将世界面转为陆地掩码栅格(陆地标记为1,海洋为NA)
land_mask <- terra::rasterize(world, r, field = 1)
# 筛选出掩码中不为NA的点(即陆地点)
land_points <- points[!is.na(terra::extract(land_mask, points)[, 1]), ]

4. 确认使用经纬度投影

确保点和面都使用WGS84(EPSG:4326)经纬度投影,这是全球数据最适合的投影,避免非经纬度投影带来的变形和计算损耗:

points <- terra::project(points, "EPSG:4326")
world <- terra::project(world, "EPSG:4326")

内容的提问来源于stack exchange,提问作者89_Simple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:57:40