gpt4 book ai didi

r - `sp::over()` 相当于 `terra`

转载 作者:行者123 更新时间:2023-12-01 23:06:38 25 4
gpt4 key购买 nike

terra 中是否有等价于 sp::over() 的东西?要获取显示 SpatVector 的哪些几何形状覆盖另一个 SpatVector 的哪些几何形状的数据框——像这样,但仅使用 terra:

# get a polygons map:
library(terra)
lux <- vect(system.file("ex/lux.shp", package="terra"))
plot(lux)
text(lux, lux$NAME_2)

# get points that overlay some of those polygons:
pts <- vect(cbind(c(5.8, 6, 6.2), c(49.85, 49.5, 49.6)), crs = crs(lux))
plot(pts, col = "blue", add = TRUE)

# find which points overlay which polygons:
library(sp); library(raster)
over(as(pts, "Spatial"), as(lux, "Spatial"))

# ID_1 NAME_1 ID_2 NAME_2 AREA POP
# 1 1 Diekirch 3 Redange 259 18664
# 2 3 Luxembourg 9 Esch-sur-Alzette 251 176820
# 3 3 Luxembourg 10 Luxembourg 237 182607

enter image description here

最佳答案

您的示例数据

library(terra)
lux <- vect(system.file("ex/lux.shp", package="terra"))
pts <- vect(cbind(c(5.8, 6, 6.2), c(49.85, 49.5, 49.6)), crs = crs(lux))

您可以使用extract(也在raster中)

extract(lux, pts)[,-1]
# ID_1 NAME_1 ID_2 NAME_2 AREA POP
#1 1 Diekirch 3 Redange 259 18664
#2 3 Luxembourg 9 Esch-sur-Alzette 251 176820
#3 3 Luxembourg 10 Luxembourg 237 182607

或者你可以这样做(通过 lovalery 解决方案的变体)

i <- relate(pts, lux, "within") |> apply(2, any)
lux[i,] |> data.frame()
# ID_1 NAME_1 ID_2 NAME_2 AREA POP
#1 1 Diekirch 3 Redange 259 18664
#2 3 Luxembourg 9 Esch-sur-Alzette 251 176820
#3 3 Luxembourg 10 Luxembourg 237 182607

或者只是这样

i <- is.related(lux, pts, "intersects")
lux[i,] |> data.frame()
# ID_1 NAME_1 ID_2 NAME_2 AREA POP
#1 1 Diekirch 3 Redange 259 18664
#2 3 Luxembourg 9 Esch-sur-Alzette 251 176820
#3 3 Luxembourg 10 Luxembourg 237 182607

关于r - `sp::over()` 相当于 `terra`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70746682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com