我正在 Shiny 中制作一个小应用程序,它保存国家和地区的数据,用户可以在其中选择一个区域。然后的想法是,我在应用程序中拥有的传单地图将放大并聚焦于所选区域(即用户单击“欧洲”,地图会放大到欧洲)。
我不知道应该如何使用这些简单的功能geometry
列作为传单地图的过滤器。这是一个简单的例子(不是在 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()
This produces:
这和我用过的一样df
(未过滤的数据框)。关于我如何解决这个问题有什么想法吗?我在 Shiny/传单文档中找不到它。
我们可以使用sf::st_coordinates
从中提取值df2$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 https://rstudio.github.io/leaflet/shiny.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)