繁体   English   中英

创建一个空间多边形数据框,该框保留与另一个空间多边形数据框的重叠要素,但不裁剪多边形范围

[英]Create a spatial polygons data frame that preserves overlapping features with another spatial polygons data frame but does not clip polygon extent

我一直在使用R中的栅格数据包的intersect()函数将空间多边形数据框(HUC-4分水岭)裁剪到另一个空间多边形数据框(由科罗拉多州,爱达荷州,蒙大拿州,犹他州,和怀俄明州)。

我想保留与我要剪切到的空间数据框重叠的空间多边形的整个范围。 使用intersect()可以裁剪HUC-4分水岭,以便它们不会超出被裁剪状态的范围。

我正在使用的分水岭数据可以从以下位置下载: ftp : //rockyftp.cr.usgs.gov/vdelivery/Datasets/Staged/Hydrography/WBD/National/GDB/ (WBD_National_GDB.zip)。

涵盖科罗拉多州,犹他州,爱达荷州,怀俄明州和蒙大拿州的地区数据摘自可从以下县获得的县数据: https : //catalog.data.gov/dataset/tiger-line-shapefile-2017-nation-us-current-县级等效国家shapefile

我使用intersect()函数进行剪辑的代码如下:

library(raster)
library(dplyr)
library(spdplyr)
library(rgdal)
library(rgeos)

# albers equal area projection
proj <- CRS("+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs ")

counties <- readOGR(dsn = "./data/tl_2017_us_county/tl_2017_us_county.shp")

# filtering out only counties in our 5 states of interest
counties <- counties %>%
  filter(STATEFP %in% c("08", "16", "30", "49", "56"))

# transforming to albers projection
counties <- spTransform(counties, proj)

# create a region shapefile (to clip watersheds with)
region <- gUnaryUnion(counties)

# Make Region into a SpatialPolygonsDataFrame
row.names(region) <- as.character(1:length(region))
region_data <- c("West")
region_data <- as.data.frame(region_data)
colnames(region_data) <- "Region"

region <- SpatialPolygonsDataFrame(region, region_data)

file <- "./data/WBD_National_GDB/WBD_National_GDB.gdb"

# huc4 watersheds
huc4 <- readOGR(dsn = file, layer = "WBDHU4")

# transforming to albers projection
huc4 <- spTransform(huc4, proj)

# selecting only huc4 watersheds that intersect with our states of interest
huc4_clip <- raster::intersect(huc4, region)

# plot the result
plot(huc4_clip)

我想要一个输出文件,该文件不裁剪感兴趣区域边缘上的空间多边形的范围,但是不包括不与感兴趣区域直接重叠的任何空间多边形。 我还有其他可以使用的类似于intersect()函数,但是它们不会裁剪区域边界上的空间多边形的范围吗?

如果我对问题的理解正确,则可以使用函数gIntersects找出哪些分水岭与您的区域相交,然后仅从huc4数据集中提取那些分水岭。 实际上,类似这样的方法可能会起作用:

intersects <- which(gIntersects(huc4, region, byid = TRUE))
huc4_clip  <- huc4[intersects, ] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM