R 用一个相当大的空间多边形数据框裁剪曲面多边形

R 用一个相当大的空间多边形数据框裁剪曲面多边形,r,leaflet,gis,polygon,R,Leaflet,Gis,Polygon,我遇到了一个棘手的问题 我正在尝试使用sp软件包执行一个简单的多边形剪辑,或者使用函数st_差分(st_union(x),st_union(y))(或者其中的一个变体)或者st_intersection函数,以最有效的为准 虽然使用两个曲面多边形很容易,但我需要将其剪辑到一个可怕的大下载的大空间多边形框架,它只是英国的一个形状文件,下载自: 形状文件如下所示(绘制在传单中): 我想将框(蓝色)剪切到英国,原因是在传单中呈现英国(以及法国)的形状文件需要太长时间 这样可能行吗 sf::st_i

我遇到了一个棘手的问题

我正在尝试使用
sp
软件包执行一个简单的多边形剪辑,或者使用函数
st_差分(st_union(x),st_union(y))
(或者其中的一个变体)或者
st_intersection
函数,以最有效的为准

虽然使用两个曲面多边形很容易,但我需要将其剪辑到一个可怕的大下载的大空间多边形框架,它只是英国的一个形状文件,下载自:

形状文件如下所示(绘制在
传单中):

我想将
(蓝色)剪切到
英国
,原因是在传单中呈现英国(以及法国)的形状文件需要太长时间

这样可能行吗

sf::st_intersection(UK, box)
完整代码

library(sf)

UK <- readRDS("./gadm36_GBR_0_sf.rds")

#create box since it was not provided in question
box <- c("POLYGON((-7.237 48,0 48,0 52,-7.237 52, -7.237 48))") %>% 
  st_as_sfc(crs = "+proj=longlat +datum=WGS84")

mapview::mapview(list(UK,box))

更新 如果您想使用英国的shapefile切割长方体,请使用
st_difference()

这可能行吗

sf::st_intersection(UK, box)
完整代码

library(sf)

UK <- readRDS("./gadm36_GBR_0_sf.rds")

#create box since it was not provided in question
box <- c("POLYGON((-7.237 48,0 48,0 52,-7.237 52, -7.237 48))") %>% 
  st_as_sfc(crs = "+proj=longlat +datum=WGS84")

mapview::mapview(list(UK,box))

更新 如果您想使用英国的shapefile切割长方体,请使用
st_difference()


太棒了!!感谢您的持续帮助(您已经回答了我的另一个问题)。虽然我实际上是要从另一个角度来裁剪它,但是要让盒子的sea部分保留下来!我相信我能弄明白,除非你有一个快速修复!再次感谢你,从你之前的评论中得到:哈哈!非常感谢并原谅我的懒惰……太棒了!!感谢您的持续帮助(您已经回答了我的另一个问题)。虽然我实际上是要从另一个角度来裁剪它,但是要让盒子的sea部分保留下来!我相信我能弄明白,除非你有一个快速修复!再次感谢你,从你之前的评论中得到:哈哈!非常感谢并原谅我的懒惰……你在
sp
sf
软件包之间有些混乱。开始于
st
的函数来自
sf
,而像
SpatialPolygonsDataFrame
这样的数据对象来自
sp
。因此,您的
来自
sf
,您的
uk
来自
sp
。如果没有一些转换,您通常无法使用一个包中的ops和另一个包中的数据…感谢您的贡献,我对这两个包都是新手,事实上,在这类应用程序中使用R,因此欢迎提供所有帮助和提示。这是我唯一的名单(以及
rgdal
haha)谢谢!您在
sp
sf
软件包之间有些混乱。开始于
st
的函数来自
sf
,而像
SpatialPolygonsDataFrame
这样的数据对象来自
sp
。因此,您的
来自
sf
,您的
uk
来自
sp
。如果没有一些转换,您通常无法使用一个包中的ops和另一个包中的数据…感谢您的贡献,我对这两个包都是新手,事实上,在这类应用程序中使用R,因此欢迎提供所有帮助和提示。这是我唯一的名单(以及
rgdal
haha)谢谢!
mapview::mapview( st_difference (box, UK) )