在 leaflet 中绘制 sf 类型对象 [R]

11
我想请教如何在leaflet包中绘制sf对象。我知道mapview包可以绘制它,但是我更喜欢使用leaflet包。下面是我的示例:
library(leaflet)
library(eurostat)
library(dplyr)
library(ggplot2)

options(readr.default_locale=readr::locale(tz="Europe/Berlin"))
df60 <- get_eurostat_geospatial(resolution = 60)

CE.sf <- df60 %>%   
  dplyr::filter(LEVL_CODE == 2 & CNTR_CODE %in% c("AT","CZ","DE","HU","PL","SK")) %>% 
  dplyr::select(NUTS_ID) 

plot(CE.sf)

CE.sf %>% 
  ggplot() +
  geom_sf(color = "black", size = 0.4)

CE = sf::as_Spatial(CE.sf)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data= CE, color = "green")

我需要在leaflet中重现第15行的图表,我在这里找到了一些想法:https://gis.stackexchange.com/questions/239118/r-convert-sf-object-back-to-spatialpolygonsdataframe。然而,使用这种方法并不起作用。
1个回答

12

您只是忘记在leaflet()函数中设置data参数。此外,您不需要将sf对象转换为sp格式:

# packages
library(leaflet)
library(eurostat)
library(dplyr)
library(ggplot2)

options(readr.default_locale=readr::locale(tz="Europe/Berlin"))
df60 <- get_eurostat_geospatial(resolution = 60)
#> sf at resolution 1:60 read from local file

CE.sf <- df60 %>%   
  filter(LEVL_CODE == 2 & CNTR_CODE %in% c("AT","CZ","DE","HU","PL","SK")) %>% 
  select(NUTS_ID) 

plot(CE.sf)

leaflet(CE.sf) %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(color = "green")

这段内容是由reprex package(v0.3.0)创建于2020年5月1日。


有没有不使用提供者瓦片的方法来做到这一点?我不想看到除了我拥有的数据之外的地图其他部分。 - jzadra
我认为你只需要在运行 leaflet 函数之前从 sf 对象中删除 CRS。例如,运行:CE.sf = st_set_crs(CE.sf, NA) 然后再运行之前的代码。 - agila
虽然这样做得到了相同的结果,但我认为我表述不清楚我的意图。我只想保留在多边形下面的提供者瓷砖。 - jzadra
我不知道如何做,抱歉。 - agila

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接