我有一个美国众议院区多边形,这是该住宅区的简单轮廓。这是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”),没有插槽
我的问题是什么是更好的方法?
答案 0 :(得分:0)
以下是使用sf
包和北卡罗来纳州包含的nc
数据集的方法。这显然与您的问题的规模不同,但前提应该是相同的。我们可以建立一个覆盖北卡罗来纳州一些县的大广场“区”,然后使用filter
和st_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。