R在空间多边形内找到空间多边形

时间:2018-05-11 17:22:23

标签: r

我有一个美国众议院区多边形,这是该住宅区的简单轮廓。这是SpatialPolygonsDataFrame

CRS("+proj=longlat +datum=WGS84"))

接下来,我有一个州(德克萨斯州)人口普查区SpatialPolygonsDataFrame

CRS("+proj=longlat +datum=WGS84")

我的目标是找到适合美国众议院区的人口普查区块组。

我的方法似乎存在严重缺陷。

mysp <- raster::aggregate(rbind(SUBBLOCK_ALL.shp, CD32.shp))
  

as(x,“SpatialPolygons”)出错:没有方法或默认值   强制“NULL”到“SpatialPolygons”

mysp <- rgeos::gIntersection(CD32.shp,SUBBLOCK_ALL.shp,byid = TRUE)
  

RGEOSBinTopoFunc中的错误(spgeom1,spgeom2,byid,id,drop_lower_td,   unaryUnion_if_byid_false,:尝试从中获取插槽“proj4string”   基本类的对象(“NULL”),没有插槽

mysp <- rgeos::gIntersection(CD32.shp,SUBBLOCK_ALL.shp,byid = TRUE)
  

RGEOSBinTopoFunc中的错误(spgeom1,spgeom2,byid,id,drop_lower_td,   unaryUnion_if_byid_false,:尝试从中获取插槽“proj4string”   基本类的对象(“NULL”),没有插槽

我的问题是什么是更好的方法?

1 个答案:

答案 0 :(得分:0)

以下是使用sf包和北卡罗来纳州包含的nc数据集的方法。这显然与您的问题的规模不同,但前提应该是相同的。我们可以建立一个覆盖北卡罗来纳州一些县的大广场“区”,然后使用filterst_within来保留那些在边界内的区域。您可以使用其他谓词,例如st_intersects,具体取决于您想要对边界上的那些做什么。这对于更多区域也是通用的,因为sf几何谓词实际上比较了它们的两个参数中的所有几何。

library(tidyverse)
library(sf)
#> Linking to GEOS 3.6.1, GDAL 2.2.3, proj.4 4.9.3
nc <- system.file("shape", "nc.shp", package = "sf") %>%
  read_sf() %>%
  st_transform(3857)

district <- st_polygon(list(matrix(
  data = c(-9000000, 4000000, -8500000, 4000000, -8500000, 4500000, -9000000, 4500000, -9000000, 4000000),
  ncol = 2,
  byrow = TRUE
  ))) %>%
  st_sfc(crs = 3857)

contained <- nc %>%
  filter(st_within(., district, sparse = FALSE))

plot(nc$geometry)
plot(district, add = TRUE)
plot(contained$geometry, add = TRUE, col = "red")

reprex package(v0.2.0)创建于2018-05-11。