89_Simple
89_Simple

Reputation: 3805

select points over land area in R

I have a point vector for the entire globe at 0.25 degree resolution.

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)

I want to extract those points that fall within a landmass i.e. remove all those points that are in the ocean. So I did this:

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

But it's been two hours now and this is still running. Is there any faster way to do this?

Upvotes: 1

Views: 203

Answers (1)

Robert Hijmans
Robert Hijmans

Reputation: 47071

You should not transform raster data to vector data if you want efficiency. In this case, you can do the following in a second or so:

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)

(but perhaps, depending on what you do next, the last step should also be avoided)

Upvotes: 1

Related Questions