geom_raster 图中的网格点伪影

Gridded dot artifacts in geom_raster plot

我正在尝试制作数字高程模型(光栅)的高分辨率图形,但我的地块似乎有一些扭曲的特征。这是一个可重现的例子:

library(elevatr)
library(raster)
library(tidyverse)
library(sp)

ext <- extent(-864434.2, -771071.7, 4019064, 4054974) %>%
  as("SpatialPolygons") %>%
  spsample(100, "regular")

crs(ext) <- "+proj=utm +zone=19 +ellps=GRS80 +datum=NAD83"

alt <- get_elev_raster(ext, 
                       prj = crs(ext), 
                       z = 11) %>%
  crop(ext)
names(alt) <- "alt"

ggplot() + 
  geom_raster(data = as.data.frame(alt, xy = T), aes(x = x, y = y, fill = alt)) +
  scale_fill_gradientn("Elevation (m)", colors = terrain.colors(256), na.value = NA) +
  theme(legend.position = "none")
ggsave("gg_gsmnp_alt_test.jpeg", width = 8, height = 4, units = "in", dpi = 600)

随着分辨率的提高,伪像变得更加普遍(如果我将 z 参数设置为更高的分辨率,例如 1112,伪像会更加丰富)。

计算山体阴影层会加剧这些伪像:

hs <- hillShade(terrain(alt, opt = "slope"),
                terrain(alt, opt = "aspect"))

ggplot() + 
  geom_raster(data = as.data.frame(alt, xy = T), aes(x = x, y = y, fill = alt)) +
  geom_raster(data = as.data.frame(hs, xy = T), aes(x = x, y = y, alpha = 1 - layer), fill = "gray20") +
  scale_fill_gradientn("Elevation (m)", colors = terrain.colors(256), na.value = NA) +
  scale_alpha(guide = FALSE, range = c(0,1))
ggsave("gg_gsmnp_alt_hs_test.jpeg", width = 8, height = 4, units = "in", dpi = 600)

此外,如果我使用双线性插值聚合图层,则伪像可以预见地消失:

alt_agg <- alt %>%
   aggregate(fact = 2)
hs_agg <- hs %>%
  aggregate(fact = 2)

ggplot() + 
  geom_raster(data = as.data.frame(alt_agg, xy = T), aes(x = x, y = y, fill = alt)) +
  geom_raster(data = as.data.frame(hs_agg, xy = T), aes(x = x, y = y, alpha = 1 - layer), fill = "gray20") +
  scale_fill_gradientn("Elevation (m)", colors = terrain.colors(256), na.value = NA) +
  scale_alpha(guide = FALSE, range = c(0,1)) +
  theme(legend.position = "none")
ggsave("gg_gsmnp_alt_hs_agg_test.jpeg", width = 8, height = 4, units = "in", dpi = 600)

虽然图形问题很小,但我很好奇这些伪像是否会导致从栅格中提取的数据出现异常。例如,如果我在这些位置使用 raster::extract 提取数据,我会收到虚假值吗?

任何建议或答案将不胜感激。

最佳,

-亚历克斯。 (he/him/his)

迟到总比不到好...抱歉。

根本原因是当我尝试同时进行变换和马赛克时 GDAL 变形。我现在用两步,马赛克,然后变换。 https://github.com/jhollist/elevatr 的版本有修复。我正在开发 CRAN 版本。希望这对您有所帮助,再次表示歉意。