在R中创建给定栅格的范围和边界的多边形


13

我想创建两个多边形。

  1. 一是我的栅格的矩形范围。我知道我可以使用来获得栅格的范围 r <- raster("band5.tif") e <- extent(r) plot(e)在此处输入图片说明

  2. 如何创建栅格边界的一个多边形,如下所示?

这是我的栅格的样子:栅格(“ band5.tif”)

Answers:


23

这是一个例子。

library(raster)
# example data
x <- raster(system.file("external/test.grd", package="raster"))

获取矩形范围

e <- extent(x)
# coerce to a SpatialPolygons object
p <- as(e, 'SpatialPolygons')  

获取包围非NA单元的多边形

# make all values the same. Either do
r <- x > -Inf
# or alternatively
# r <- reclassify(x, cbind(-Inf, Inf, 1))

# convert to polygons (you need to have package 'rgeos' installed for this to work)
pp <- rasterToPolygons(r, dissolve=TRUE)

# look at the results
plot(x)
plot(p, lwd=5, border='red', add=TRUE)
plot(pp, lwd=3, border='blue', add=TRUE)

我似乎找不到该r <- r > -Inf部分的文档。它到底在做什么?以及与values(r)[!is.na(values(r))] <- 1(将r中非NA的所有位置都设为1)有什么不同。
csheth '16

3
r > -Inf是基本的R。做c(1,NA,3,NA) > -Inf看看它是如何工作的。我添加了一个替代(reclassify)。您的替代方法可行,但对于大型对象而言不是一个好方法。
罗伯特·希曼斯

我只是在等待我的计算机处理rasterToPolygons()零件,然后我将评估您的答案。感谢您的帮助,-Inf它将非常有用!
csheth '16

对于很大的栅格,这将需要一段时间,甚至可能失败。在这种情况下,您可以考虑先使用,aggregate因为无论如何您都不会看到差异。
罗伯特·希曼斯

aggregate()在r上运行后,即使只有100个单元,也没有处理(配备16 GB RAM的计算机)。问题是我需要尽可能地保持边界,因为需要从生成的多边形中提取DEM。如果我进一步对栅格进行下采样,我将失去该边界。有没有解决的办法?
csheth '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.