【问题标题】:Adjusting bounds in Leaflet (R) with sf column使用 sf 列调整 Leaflet (R) 中的边界
【发布时间】:2017-09-21 20:21:05
【问题描述】:

我正在 Shiny 中制作一个小应用程序,其中包含国家和地区的数据,用户可以在其中选择一个地区。然后我的想法是我在应用程序中的传单地图将放大并专注于所选区域(即用户单击“欧洲”并且地图会放大欧洲)。

我不知道应该如何使用简单的 featuresgeometry 列作为传单地图的过滤器。这是一个简单的例子(不是在 Shiny 中,但我想这个问题与 Shiny 无关)。

library(rnaturalearth) 
library(dplyr)
library(leaflet)

# sf data:
earth <- ne_countries(returnclass = "sf") %>% 
  select(Region = region_un, geometry)

# little dataset:
df <- data_frame(
  Region = c("Europe", "Africa", "Asia", "Oceania", "Americas"),
  Score = c(0.85, 0.77, 0.81, 0.93, 0.79)
)
# join:
df <- full_join(df, earth)

# simulate what I'm doing in Shiny:
input <- list()
input$region <- "Europe"

df2 <- filter(df, Region == input$region)

leaflet(df2) %>% addTiles()

这会产生:

这与我使用df(未过滤的数据框)相同。关于如何解决这个问题的任何想法?我在 Shiny/leaflet 文档中找不到它。

【问题讨论】:

    标签: r shiny leaflet sf


    【解决方案1】:

    我们可以使用sf::st_coordinatesdf2$geometry 中提取值,获取平均纬度和经度,然后使用leaflet::setView() 关注我们感兴趣的区域:

    library(sf)
    coords <- st_coordinates(df2$geometry)
    lng <- mean(coords[,1])
    lat <- mean(coords[,2])
    
    leaflet(df2) %>% addTiles() %>%
        setView(lng, lat, zoom = 3) # 3 for "continent" level
    

    有一些特殊的方法可以在闪亮的设置中更新leaflet 地图,主要是leafletProxy(),这些在docs 中有很好的描述。

    【讨论】:

    • 完美运行,谢谢!我不知道st_coordinates() 函数,非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2021-10-09
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2017-08-29
    相关资源
    最近更新 更多