在{ggspatial}的annotation_spatial中使用WMS

问题描述 投票:0回答:1

我想使用 WMS 在 {ggspatial} 中添加底图。然而,我找不到路。我可以使用 {terra} 读取 WMS,但不能使用 {stars},但是,当传递到

annotation_spatial
时会引发错误。

library(ggspatial)
library(sf)
library(terra)
library(stars)
library(ggplot2)

points <- data.frame(
  id = 1:5, 
  x = (436:440)*1e3,
  y = (4670:4674)*1e3 
) |> 
  st_as_sf(coords = c("x", "y"), crs = 25831)

box <- st_bbox(points)

wms <- paste0("https://geoserveis.icgc.cat/servei/catalunya/orto-territorial/wms?REQUEST=GetMap&VERSION=1.3.0&SERVICE=WMS&CRS=EPSG:25831&BBOX=",box[1],",",box[2],",",box[3],",",box[4],"&WIDTH=520&HEIGHT=520&LAYERS=ortofoto_color_vigent&STYLES=&FORMAT=JPEG&BGCOLOR=0xFFFFFF&TRANSPARENT=TRUE&EXCEPTION=INIMAGE")

orto <- rast(wms)

plotRGB(orto) # This plots the ortophoto correctly

ggplot() +
  annotation_spatial(orto) +
  layer_spatial(points)

#> Error in `layer_spatial.SpatRaster()`:
#> ! Problem while converting geom to grob.
#> ℹ Error occurred in the 1st layer.
#> Caused by error:
#> ! vector::reserve
geospatial spatial terra r-stars ggspatial
1个回答
0
投票

您可以使用

terra::geom_spatraster_rgb()
代替。您还可以使用
geom_sf()
来表示 sf 对象。
tidyterra
的默认行为是简化/重新采样输出以加快绘图速度。您可以使用
maxcell =
调整分辨率。您可以设置
maxcell = Inf
返回所有单元格,但我没有在您的示例 SpatRaster 上进行测试,因为它为 1.152922e+18 个单元格!

library(ggspatial)
library(ggplot2)
library(tidyterra)

ggplot() +
  geom_spatraster_rgb(data = orto, maxcell = 1e6) +
  layer_spatial(points) +
  theme_minimal()

ggplot() +
  geom_spatraster_rgb(data = orto, maxcell = 1e6) +
  geom_sf(data = points) +
  theme_minimal()

1

© www.soinside.com 2019 - 2024. All rights reserved.