使用g包含并检查点是否在poligon /国家/地区内。 R

问题描述 投票:0回答:2

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

现在调用代码时,它会检查每个值,但是如果在国家/地区之外只有一个坐标,则列表中所有点的状态均为'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)))))
r loops gis raster rgeo-shapefile
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

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)
© www.soinside.com 2019 - 2024. All rights reserved.