在 R 中创建非矩形栅格
Creating a non-rectangular raster in R
在我的分析中,我必须遍历栅格的单元 ID(即单元编号),这是非可选的,并且是在我不熟悉的不同软件设置(BUGScode)中完成的。我的栅格必须完全适合一个 shapefile(我的研究区域),否则我会遍历我没有价值或兴趣的单元格编号,然后......好吧你知道会发生什么;)。
可重现的例子
### get a shapefile
GER<-getData("GADM", country="DEU",level=1,download=T,path=getwd())
### make a raster
raster<-raster(ext=extent(GER), vals=0, crs=crs(GER))
plot(raster);plot(GER, add=T)
### now make the raster fit exactly to the German borders
mask.raster<-mask(raster, GER)
plot(mask.raster) ### looks right, but WAIT
plot(mask.raster, colNA="black") ### the border cells were only set to NA, which is problematic if your raster contains NA in the first place, i.e. if you used rasterize to count points in the raster cells
trim.raster<-trim(raster, values=NA)
plot(trim.raster, colNA="black"); plot(GER, add=T) ### trim only trims complete rows/columns from the raster
crop.raster<-crop(raster, GER)
plot(crop.raster, colNA="black");plot(GER, add=T) ### crop only crops to extent
如何让我的栅格完全适合我的研究区域的轮廓,从而不是矩形?
在各种 GIS 软件中经常这样做,但我目前仅限于 R。
根据大多数定义和支持它们的文件格式,栅格是矩形的。你断言各种GIS软件都不是这种情况,但我认为那不是真的,你也没有提供任何证据。也许您正在考虑(类似光栅的)矩形多边形?
另外,我不知道然后会发生什么。大多数有能力的 R 软件会简单地跳过 NA
.
的栅格单元格
正如我最近发现的那样,R 中的 raster
表示某种投影矩阵,因此只能是矩形(或在特殊情况下是对角线),但实际上永远不适合形状。
至于当你只是简单地屏蔽光栅文件时会发生什么。
如果你循环说 cell in 1:ncell(raster)
你可能会遇到以下问题:
- 处理时间更长,因为您必须遍历可能更多的单元格。
- 合并总和等时的错误消息
- 在我的例子中,如果你使用
rasterize
来计算光栅中的一些点并且计数为 0(这被解释为 NA...没有什么可计算的)相同的 - =25=] 要跳过的研究区域内的单元格。通过将“计数”的栅格值设置为 empty=NA 为 0,然后屏蔽栅格,可以很容易地避免这种情况,但这是许多解决方案的情况...
在我的分析中,我必须遍历栅格的单元 ID(即单元编号),这是非可选的,并且是在我不熟悉的不同软件设置(BUGScode)中完成的。我的栅格必须完全适合一个 shapefile(我的研究区域),否则我会遍历我没有价值或兴趣的单元格编号,然后......好吧你知道会发生什么;)。
可重现的例子
### get a shapefile
GER<-getData("GADM", country="DEU",level=1,download=T,path=getwd())
### make a raster
raster<-raster(ext=extent(GER), vals=0, crs=crs(GER))
plot(raster);plot(GER, add=T)
### now make the raster fit exactly to the German borders
mask.raster<-mask(raster, GER)
plot(mask.raster) ### looks right, but WAIT
plot(mask.raster, colNA="black") ### the border cells were only set to NA, which is problematic if your raster contains NA in the first place, i.e. if you used rasterize to count points in the raster cells
trim.raster<-trim(raster, values=NA)
plot(trim.raster, colNA="black"); plot(GER, add=T) ### trim only trims complete rows/columns from the raster
crop.raster<-crop(raster, GER)
plot(crop.raster, colNA="black");plot(GER, add=T) ### crop only crops to extent
如何让我的栅格完全适合我的研究区域的轮廓,从而不是矩形?
在各种 GIS 软件中经常这样做,但我目前仅限于 R。
根据大多数定义和支持它们的文件格式,栅格是矩形的。你断言各种GIS软件都不是这种情况,但我认为那不是真的,你也没有提供任何证据。也许您正在考虑(类似光栅的)矩形多边形?
另外,我不知道然后会发生什么。大多数有能力的 R 软件会简单地跳过 NA
.
正如我最近发现的那样,R 中的 raster
表示某种投影矩阵,因此只能是矩形(或在特殊情况下是对角线),但实际上永远不适合形状。
至于当你只是简单地屏蔽光栅文件时会发生什么。
如果你循环说 cell in 1:ncell(raster)
你可能会遇到以下问题:
- 处理时间更长,因为您必须遍历可能更多的单元格。
- 合并总和等时的错误消息
- 在我的例子中,如果你使用
rasterize
来计算光栅中的一些点并且计数为 0(这被解释为 NA...没有什么可计算的)相同的 - =25=] 要跳过的研究区域内的单元格。通过将“计数”的栅格值设置为 empty=NA 为 0,然后屏蔽栅格,可以很容易地避免这种情况,但这是许多解决方案的情况...