R: Как извлечь значения из смежных растровых ячеек, которые не затрагиваются SpatialLines?
Я пытался извлечь значения из одного атрибута растра (площадь, в м2), который перекрывается со строками (то есть.shp SpatialLines).
Проблема в том, что по этим направлениям мой растр иногда проходит от одной до нескольких смежных ячеек во всех направлениях. Используя функцию извлечения, извлекаются только значения из ячеек, которых касаются линии. Таким образом, когда я складываю извлеченные значения из всех строк, значительная часть площади (м2) теряется из-за ячеек, которые не были затронуты линией, и поэтому значения не были извлечены.
Я попытался обойти это:
Шаг 1 - сначала агрегирование моего растра с более низким разрешением (т.е. увеличение аргумента факта), а затем Шаг 2 - растеризация линий с использованием этого агрегированного растра (созданного на шаге 1) в качестве матрицы, чтобы убедиться, что растеризованные линии станут достаточно толстыми, чтобы покрыть горизонтальное распространение ячеек в моем исходном растре разрешения. Шаг 3 - Затем я повторно сэмплирую растеризованные линии (созданные на шаге 2) обратно в исходное разрешение, с которого я начал. Шаг 4 - Наконец, извлекаются значения из преобразованных растровых линий (созданных на шаге 3).
Однако это не сработало, так как теперь общая площадь (м2) меняется в зависимости от значения fact="", которое я использую при первой агрегации растра (на шаге 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)
Спасибо!
Andre