首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >geom_raster图中的网格点伪影

geom_raster图中的网格点伪影
EN

Stack Overflow用户
提问于 2021-06-04 15:22:44
回答 1查看 142关注 0票数 1

我试图制作一个高分辨率的数字高程模型(光栅),但我的情节似乎有一些扭曲的特征。下面是一个可重复的例子:

代码语言:javascript
复制
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,那么工件就会更加丰富)。

计算山荫层会加剧这些人工制品:

代码语言:javascript
复制
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)

此外,如果我使用双线性插值来聚合层,那么这些伪影就会消失:

代码语言:javascript
复制
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提取数据,我会收到虚假的值吗?

如有任何建议或回答,将不胜感激。

最好的

-Alex。(他/他/他)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-23 15:07:24

迟到总比没有好..。很抱歉。

造成这种情况的根本原因是,当我试图同时变换和镶嵌时,GDAL发生了扭曲。我现在使用两个步骤,马赛克,然后转换。https://github.com/jhollist/elevatr的版本已经修复了。我正在做一个CRAN版本的工作。希望这有帮助,并再次道歉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67839878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档