以下代码检查一个坐标对是否属于特定的多边形。我需要使用循环或其他方法检查更多坐标数据。
现在调用代码时,它会检查每个值,但是如果在国家/地区之外只有一个坐标,则列表中所有点的状态均为'false'。
library(raster)
library(sp)
library(rgeos)
germany<- getData("GADM",country="Germany",level=0)
df1 <- data.frame(geolok)
ifgermany <-df1 %>%
rowwise() %>%
mutate(germany_area = gContains(germany,SpatialPoints(df1[,9:10],proj4string=CRS(proj4string(germany)))))
我没有您的样本数据。因此,我在这里提供的内容将在某些方面为您提供帮助。如果您需要具体情况的帮助,请提供下一次的示例数据。这有助于SO用户帮助您。
我选择俄勒冈州作为样本sf对象。多边形数据来自albersusa包。然后,我创建了随机点。如果绘制ggplot图形,则会看到点在哪里。 st_intersects()
检查每个数据点属于哪个多边形,并返回一个矩阵。在这种情况下,每一列代表一个县,每一行代表一个数据点。因此,您看到36列和20行。
library(sf)
library(albersusa)
mystate <- counties_sf() %>%
filter(state == "Oregon")
# This is a random data set
set.seed(111)
mysample <- st_sample(x = mystate, size = 20)
ggplot() +
geom_sf(data = mystate) +
geom_sf(data = mysample)
# Now I want to find data points in Washington states
check <- st_intersects(x = mysample,
y = mystate,
sparse = FALSE)
colnames(check) <- mystate$name
我在这里保留了矩阵的一部分。
Deschutes Jefferson Lake Polk Wheeler Benton Clackamas Coos Crook Gilliam Hood River Jackson Josephine
[1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[2,] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[5,] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
您需要使用byid=TRUE
,但不需要遍历点或多边形
library(raster)
library(rgeos)
germany <- getData("GADM",country="Germany",level=1)
# example points
r <- raster(extent(germany)+10)
values(r) <- 1:ncell(r)
set.seed(10)
xy <- sampleRandom(r, 50, sp=TRUE)
crs(xy) <- crs(germany)
a <- gContains(germany, xy, byid=TRUE)
#or
b <- gIntersects(germany, xy, byid=TRUE)