gpt4 book ai didi

r - 使用 terra SpatRaster 作为 ggmap basemap

转载 作者:行者123 更新时间:2023-12-05 06:48:13 26 4
gpt4 key购买 nike

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

您好,我正在使用 ggplot 在 R 中绘制 map 。我想要 OpenStreetMaps 的 basemap ,然后我想在上面绘制多边形等。

ggmap 包曾经非常适合这个,但是现在使用 Google map 太复杂了,而且 OpenStreetMaps 根本不起作用。

我遇到过 ggspatial::annotation_map_tile(),但它不允许那么多 map 类型,而且速度也非常慢,所以我想尽可能避免使用它.

我也遇到过 maptiles::get_tiles(),它有更多的选项而且看起来更快。 👍

问题是它返回的 SpatRaster 对象(来自 terra 包)不会自动用作 ggmap 的 basemap 。 有办法转换吗?

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

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)

what the map should look like

# 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()

the map looks ok, but green

顺便说一句,我已经设法使用 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()

plotted with ggplot, but uses fill aesthetic

最佳答案

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

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

关于r - 使用 terra SpatRaster 作为 ggmap basemap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66867465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com