繁体   English   中英

在R中的陆地区域上选择点

[英]select points over land area in R

我有一个分辨率为 0.25 度的整个地球的点向量。

library(terra)
library(rnaturalearth)

# create point data 
ref_grid <- terra::ext(-180, 180, -90, 90)
ref_grid <- terra::rast(ref_grid)
res(ref_grid)<- 0.25
values(ref_grid)<-1 #dummy values

projections <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"
crs(ref_grid) <- projections
pts <- terra::as.points(ref_grid, values=TRUE, na.rm=TRUE)  

# download world shapefile
world_shp <- rnaturalearth::ne_countries()
world_shp <- terra::vect(world_shp)
world_shp <- terra::project(world_shp, projections)

我想提取那些落在陆地上的点,即删除所有在海洋中的点。 所以我这样做了:

e <- terra::extract(world_shp, pts)

但是现在已经两个小时了,它仍在运行。 有没有更快的方法来做到这一点?

如果您想要提高效率,则不应将栅格数据转换为矢量数据。 在这种情况下,您可以在一秒钟左右执行以下操作:

library(terra)
library(rnaturalearth)
ref_grid <- terra::rast(res=0.25)
world_shp <- rnaturalearth::ne_countries(returnclass="sf") |> vect()

ref_grid <- rasterize(world_shp, ref_grid)
p <- as.points(ref_grid)

(但也许,取决于你下一步做什么,最后一步也应该避免)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM