我有两个多边形的shapefile,我想要一个接一个地剪辑。我在谷歌搜索,但我发现只能通过边界框剪切或多边形剪切点,而这不是我需要的。 除了R(http://rosettacode.org/wiki/Sutherland-Hodgman_polygon_clipping#Python)之外,我还在其他编程语言中找到了一些东西。 你能帮帮我吗?
由于 蒂亚戈
答案 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 [的东西海岸和海湾的另一个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)
的图片
我在这里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