如何用R中的另一个多边形shapefile剪切多边形shapefile?

时间:2015-08-26 18:01:19

标签: r clipping clip polygons

我有两个多边形的shapefile,我想要一个接一个地剪辑。我在谷歌搜索,但我发现只能通过边界框剪切或多边形剪切点,而这不是我需要的。 除了R(http://rosettacode.org/wiki/Sutherland-Hodgman_polygon_clipping#Python)之外,我还在其他编程语言中找到了一些东西。 你能帮帮我吗?

由于 蒂亚戈

4 个答案:

答案 0 :(得分:0)

裁剪的另一种方法是选择"polygontoclip"["templatepolygon", ],选择点(http://robinlovelace.net/r/2014/07/29/clipping-with-r.html),但也适用于多边形。

答案 1 :(得分:0)

这不能回答您的问题,但是由于您提到了通过边界框进行裁剪,因此该帖子出现在搜索字符串中:

来自r-bloggers:由边界框剪切

setwd("../")
library(rgdal)  
zones <- readOGR("data", "london_sport")

制作一个边界框:

b <- bbox(zones)
b[1, ] <- (b[1, ] - mean(b[1, ])) * 0.5 + mean(b[1, ])
b[2, ] <- (b[2, ] - mean(b[2, ])) * 0.5 + mean(b[2, ])
b <- bbox(t(b))
plot(zones, xlim = b[1, ], ylim = b[2, ])

使用自定义功能:

library(raster)
library(rgeos)
## rgeos version: 0.3-5, (SVN revision 447)
##  GEOS runtime version: 3.4.2-CAPI-1.8.2 r3921 
##  Polygon checking: TRUE 
gClip <- function(shp, bb){
  if(class(bb) == "matrix") b_poly <- as(extent(as.vector(t(bb))), "SpatialPolygons")
  else b_poly <- as(extent(bb), "SpatialPolygons")
  gIntersection(shp, b_poly, byid = T)
}
zones_clipped <- gClip(zones, b)
## Warning: spgeom1 and  spgeom2 have different proj4 strings
plot(zones_clipped)

请注意,由于gClip主体中的if语句,它可以处理几乎所有空间数据输入,并且仍然可以正常工作。

westminster <- zones[grep("West", zones$name),]
zones_clipped_w <- gClip(zones, westminster)
## Warning: spgeom1 and spgeom2 have different proj4 strings
plot(zones_clipped_w); plot(westminster, col = "red", add = T)

答案 2 :(得分:0)

尽管,这个问题已经很久了,提供一个很好的答案可能会帮助将来的任何人登陆此页面。

我认为您想要做的很简单。为了说明,假设我对沙特阿拉伯(SA)的东部海岸线感兴趣,并且我有一个形状文件,该文件具有SA [SA[1]的东西海岸和海湾Gulf的另一个shapefile (SA东海岸的突出水体)。我们需要SF软件包来裁剪两个形状文件

加载SF包

library(sf)

然后加载两个shapefile

    ksa <- st_read("cropping_shape_file/ksa/saudi_arabia_coastline.shp")
gulf <- st_read("cropping_shape_file/gulf/ihoPolygon.shp")%>%
  st_transform(st_crs(ksa)) # The st_transform added to this file ensure that both files have same CRS ssstem otherwise it will be impossible to crop. 

您还可以检查其CRS是否相同

st_crs(ksa)==st_crs(gulf)

sf_read将shapefile信息输出到三个字段中,但我们仅对几何感兴趣

您可以

cropped<-st_crop( ksa$geometry, gulf$geometry)
plot(cropped)

您应该有一个像cropped

的图片

我在这里https://mega.nz/file/NnxHXajI#KOK_86gwVQGfjNs7X2HOAtvG2NOkIwcU5EhzQU5X6tg提供了两个形状文件,请注意,形状文件具有四个需要保持在一起的组件(.shp,.prj,.shx,.dbf)

答案 3 :(得分:0)

用另一个 shapefile 剪辑一个 shapefile

library(raster)
# library(rgdal) # if require
# library(rgeos) # if require

luxembourg <- shapefile(system.file("external/lux.shp", package="raster")) ### load a shape from raster package
plot(luxembourg) 

another_shape <- as(extent(6, 6.4, 49.75, 50), 'SpatialPolygons') ### draw a simple shape / load your own
plot(another_shape, add=T, border="red", lwd=3)

luxembourg_clip <- crop(luxembourg, another_shape) ### crop (SpatialPolygon) luxembourg with another_shape
plot(luxembourg_clip, add=T, col=4) ### plot on 
plot(luxembourg_clip, add=F, col=3) ### just plot

查看一些图片:MapClip

来源:https://rdrr.io/cran/raster/man/crop.html