【问题标题】:Plotting sf-type object in leaflet [r]在传单 [r] 中绘制 sf 类型的对象
【发布时间】:2020-08-14 13:25:22
【问题描述】:

我想问一下如何在leaflet package 的传单中绘制sf 对象我知道mapview package 可以绘制它,但是我更喜欢使用 lealfet 包。

我在下面提供了示例:

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")

我需要从传单中的第 15 行重现情节,我在这里找到了一些想法:https://gis.stackexchange.com/questions/239118/r-convert-sf-object-back-to-spatialpolygonsdataframe

但是使用这种方法是行不通的。

【问题讨论】:

    标签: leaflet maps sf r-leaflet


    【解决方案1】:

    您只是忘记在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 日创建

    【讨论】:

    • 有没有办法在没有提供者磁贴的情况下做到这一点?我不想在我拥有的数据之外看到地图的所有其他部分。
    • 我认为您只需要在运行leaflet 函数之前从sf 对象中删除CRS。例如,运行:CE.sf = st_set_crs(CE.sf, NA),然后运行与之前相同的代码。
    • 因此产生了同样的结果,但是我认为我错误地陈述了我希望做的事情。我想只保留多边形下的提供者图块。
    • 我不知道该怎么做,抱歉。
    猜你喜欢
    • 2021-06-02
    • 2018-09-12
    • 2013-10-22
    • 1970-01-01
    • 2022-11-19
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多