我正在尝试创建一张美国各州的地图,随着时间的推移比较两个变量。我想让这个基于网络的和交互的。我已经成功地结合了 R、leaflet 和 Shiny。但是,它真的很慢:
datadrivers.shinyapps.io/opioid_map/
我已按照 R 传单说明使用 leafletProxy 更新我感兴趣的图层,而不是重绘整个地图。我还尝试限制地图边界,希望它不必渲染尽可能多的数据。当滑块移动时,更新仍然需要 4-5 秒。那太慢了。
我已经通过 rMaps 和 googleVis 查看了其他一些不错的网络地图,但据我所知,它们一次只允许一个地图图层 - 我需要提供两个变量。例如,使用 googleVis,我可以使用 gvisGeoChart 来放置标记或多边形,但不能同时放置在同一张地图上。
我的最后一个选择是简单地在 maptools 之类的东西中创建一个静态地图,我想这会更快,但它们不是交互式的,所以我宁愿尽可能避免这条路线。
我很感激有关优化进一步传单的任何指导,或者利用另一个允许我覆盖多个变量的包(我可能不完全理解如何以这种方式利用 rMaps 或 googleVis)。
仅供参考,这是我来自 Shiny 应用程序的服务器代码。不幸的是,我不能给你这个数据:
server <- function(input, output, session) {
output$mymap<-renderLeaflet({
pal <- colorNumeric(
palette = "Blues",
domain = us_state@data$death_rate_2014
)
leaflet(us_state) %>% addTiles() %>%
setView(lng = -96, lat = 38, zoom = 3) %>%
addLegend(position = "topright",
pal = pal, values = ~death_rate_2014,
title = "Deaths by Drug Poisoning, per 100,000",
opacity = 1) %>%
setMaxBounds(-72, 40, -70, 43)
})
observe({
pal <- colorNumeric(
palette = "Blues",
domain = get(paste0("death_rate_",input$timeSlider),us_state@data)
)
leafletProxy("mymap",data=us_state) %>%
#clearShapes %>% #Commented this step out-clearing the map each time adds a step and confuses the user
addPolygons(stroke=FALSE,smoothFactor=.2,fillOpacity=.5,
color=~pal(get(paste0("death_rate_",input$timeSlider),us_state@data)),
popup=~get(paste0("death_rate_",input$timeSlider),us_state@data)) %>%
addCircles(data=state.centroids2,lat=~Y,lng=~X,
radius=~get(paste0("kids_rate_",input$timeSlider),state.centroids2)*250,
weight=1,color="red",popup=
paste("Foster Care Caseload:",
as.character(round(get(paste0("kids_rate_",input$timeSlider),state.centroids2))),
"per 100,000"))
})
}