【问题标题】:Using terra SpatRaster as ggmap base map使用 terra SpatRaster 作为 ggmap 底图
【发布时间】:2021-06-26 06:21:19
【问题描述】:

总结:如何使用 SpatRaster 对象作为 ggmap 的底图?

嗨,我正在使用 ggplot 在 R 中绘制地图。我想要一张来自 OpenStreetMaps 的底图,然后我想在上面绘制多边形等。

ggmap 包曾经非常适合这个,但是现在使用谷歌地图太复杂了,OpenStreetMaps 根本不起作用。

我遇到过ggspatial::annotation_map_tile(),但它不允许那么多地图类型,而且速度也非常慢,所以如果可以的话,我想避免它。

我也遇到过maptiles::get_tiles(),它有更多选择,而且看起来速度更快。 ????

问题在于它返回的 SpatRaster 对象(来自 terra 包)不会自动用作 ggmap 的基本地图。 有没有办法转换它?

通过查看 ggmap 的get_stamenmap() 中发生的情况,我已经设法找到了一部分,但地图显示为绿色。我认为这是因为 raster::raster()raster::as.raster() 不能像我希望的那样在这种对象类型上工作,但我对这些类一无所知,所以我不知道下一步该去哪里。

library(dplyr)
library(ggmap)
library(sf)
library(maptiles)

nc <- st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
nc_osm <- get_tiles(nc, crop = TRUE)

# This is what it should look like
plot_tiles(nc_osm)

# I don't know these data types I'm trying to convert to
nc_ggmap <- nc_osm %>%
  raster::raster() %>%
  raster::as.raster()

# Set attributes manually, like in get_stamenmap()
class(nc_ggmap) <- c("ggmap", "raster")
attr(nc_ggmap, "bb") <- data.frame(ll.lat = 33.8,
                                   ll.lon = -84.3,
                                   ur.lat = 36.5,
                                   ur.lon = -75.4)
attr(nc_ggmap, "source") <- ""

# Try to map it... green ????
nc_ggmap %>%
  ggmap()

顺便说一句,我已经设法使用 ggplot 绘制对象,通过计算每个像素的颜色并将它们用于fill 美学,但我需要稍后将这种美学用于我的多边形,这就是为什么我非常热衷于使用 ggmap 方法。

nc_osm %>%
  terra::as.data.frame(xy = TRUE) %>%
  as_tibble() %>%
  mutate(hex = rgb(lyr.1, lyr.2, lyr.3, maxColorValue = 255)) %>%
  ggplot(aes(x, y, fill = hex)) +
  geom_tile() +
  scale_fill_identity() +
  coord_fixed() +
  theme_void()

【问题讨论】:

    标签: r ggmap r-raster


    【解决方案1】:

    我不太明白你的问题,因为在我看来你要求一些东西,然后你写到你设法找到了解决你一开始提出的问题的方法。

    也就是说,如果您只需要一种以上的填充美学,您可以使用ggnewscale 包,here。 通过这种方式,您可以为每个图层绘制具有不同填充(或颜色,如果需要)美学的多个图层。

    【讨论】:

    • 呵呵,我不知道ggnewscale。我想我还是更喜欢 ggmap 路线,因为 ggnewscale 的自述文件“这是非常实验性的,所以使用风险自负!”让我有点停顿。但如果它足够稳定,这可能是一个不错的选择。谢谢!
    猜你喜欢
    • 2021-10-07
    • 2021-09-08
    • 2021-11-15
    • 2021-09-08
    • 1970-01-01
    • 2022-01-23
    • 2021-06-06
    • 2016-05-11
    • 2021-10-14
    相关资源
    最近更新 更多