【问题标题】:Using gContains and checking if the points is inside the polygon/country. R使用 gContains 并检查点是否在多边形/国家内。 R
【发布时间】:2020-05-11 10:45:09
【问题描述】:

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

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


    【解决方案1】:

    我没有您的示例数据。因此,我在这里提供的内容将在某些方面对您有所帮助。如果您需要针对您的具体情况的帮助,请提供下次的示例数据。这有助于 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
    

    【讨论】:

      【解决方案2】:

      您需要使用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)
      

      【讨论】:

        猜你喜欢
        • 2014-04-26
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 2013-12-03
        • 1970-01-01
        相关资源
        最近更新 更多