0

以下代码检查坐标对是否属于特定多边形。我需要使用循环或其他东西检查更多坐标数据。

现在当它调用代码时,它会检查每个值,但如果在国外只有一个坐标,则列表中所有点的状态都是'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)))))
4

2 回答 2

0

我没有你的样本数据。因此,我在这里提供的内容将在某些方面对您有所帮助。如果您需要针对您的具体情况的帮助,请提供下次的示例数据。这有助于 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
于 2020-05-12T13:50:28.430 回答
0

您需要使用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)
于 2020-05-13T00:08:10.827 回答