R:如何从SpatialLines未触及的连续栅格单元格中提取值?

时间:2017-08-18 15:42:31

标签: r geospatial raster r-raster sp

我一直在尝试从与行重叠的单个属性栅格(区域,以m2为单位)中提取值(即.shp SpatialLines)。

问题在于,沿着这些方向,我的光栅有时会从一个方向到几个连续的单元格。使用提取函数,仅提取来自线条触摸的单元格的值。因此,当我将所有行中提取的值相加时,由于未被线触及的单元格而导致大量区域(m2)丢失,因此未提取值。

我试图通过以下方式解决这个问题:

步骤1 - 首先将我的光栅聚合到较低分辨率(即增加事实参数)然后 第2步 - 使用此聚合栅格(在步骤1中创建)将线条栅格化为模具,以确保栅格化线条足够厚,以覆盖原始分辨率栅格中单元格的水平扩散。 第3步 - 然后我重新采样光栅化线(在步骤2中创建)回到我开始的原始分辨率。 步骤4 - 最后,从重新采样的栅格化线(在步骤3中创建)中提取值。

然而,它并没有完全奏效,因为现在总面积(m2)根据事实而变化=""我在第一次聚合栅格时使用的值(在步骤1中)。

我真的很感激,如果有人已经处理过类似的问题,可以帮助我。以下是我试图让它发挥作用的代码:

# input raster file
g.025 <- raster("ras.asc")
g.1 <- aggregate(g.025, fact=2, fun=sum)

# input SpatialLines
Spline1 <- readOGR("/Users/xxxxx.shp")
Spline2 <- readOGR("/Users/xxxxx.shp")
Spline3 <- readOGR("/Users/xxxxx.shp")

# rasterizing using low resolution raster (aggregated)
c1 <- rasterize(Spline1, g.1, field=Spline1$type, fun=sum)
c2 <- rasterize(Spline2, g.1, field=Spline2$type, fun=sum)
c3 <- rasterize(Spline3, g.1, field=Spline3$type, fun=sum)

# resampling back to higher resolution
c1 <- resample(c1, g.025)
c2 <- resample(c2, g.025)
c3 <- resample(c3, g.025)

# preparing to extract area (m2) values from raster “g.025”
c1tab <- as.data.frame(c1, xy=T)
c2tab <- as.data.frame(c2, xy=T)
c3tab <- as.data.frame(c3, xy=T)
c1tab <- c1tab[which(is.na(c1tab$layer)!=T),]
c2tab <- c2tab[which(is.na(c2tab$layer)!=T),]
c3tab <- c3tab[which(is.na(c3tab$layer)!=T),]

# extracting area (m2) values from raster “g.025”
c1tab[,4] <- extract(g.025, c1tab[,1:2])
c2tab[,4] <- extract(g.025, c2tab[,1:2])
c3tab[,4] <- extract(g.025, c3tab[,1:2])
names(c1tab)[4] <- "area_m2"
names(c2tab)[4] <- "area_m2"
names(c3tab)[4] <- "area_m2"

# sum total area (m2)
c1_area <- sum(c1tab$area_m2)
c2_area <- sum(c2tab$area_m2)
c3_area <- sum(c3tab$area_m2)
tot_area <- sum(c1_area, c2_area, c3_area)

谢谢!

安德烈

0 个答案:

没有答案