gpt4 book ai didi

r - 使用 R Leaflet 放大 State 以查看 ZipCode

转载 作者:行者123 更新时间:2023-12-04 13:59:14 24 4
gpt4 key购买 nike

我正在使用 R 传单包来创建美国的交互式 choropleth

网上有几个教程,我能够创建具有弹出窗口和缩放功能的交互式状态级别 map 。此外,我还能够使用弹出窗口再次创建单独的邮政编码级别 map 。

我希望在一张 map 中同时显示两个 View ,但在放大某个状态或双击某个状态时使邮政编码可见。就像如果我双击纽约,纽约邮政编码就会打开。 R 中是否有包/函数可以帮助我做到这一点?

这是两者的静态屏幕截图,以明确我计划集成的内容。



最佳答案

我同意 Yehoshapat Schellekens 的观点,即在 R 中可能没有 Web 编程语言的灵活性。但很少有 R 不够灵活,无法实现奇特的结果! :) 在这里,您可以使用您基本需要的“ Vanilla ”示例。您可以使用一些 JS 自定义窗口弹出窗口。

library(shiny)
library(leaflet)
library(maps)
library(maptools)
library(sp)
library(rgeos)

mapStates = map("state", fill = TRUE, plot = FALSE)
mapCounty = map("county", fill = TRUE, plot = FALSE)

shinyApp(
ui = fluidPage(leafletOutput('myMap'),
br(),
leafletOutput('myMap2')),

server <- function(input, output, session) {
output$myMap <- renderLeaflet({
leaflet() %>%
addProviderTiles("Stamen.TonerLite",
options = providerTileOptions(noWrap = TRUE)) %>%
addPolygons(lng = mapStates$x,
lat = mapStates$y,
fillColor = topo.colors(10, alpha = NULL),
stroke = FALSE)
})

observeEvent(input$myMap_shape_click, {
click <- input$myMap_shape_click
if(is.null(click))
return()

lat <- click$lat
lon <- click$lng

coords <- as.data.frame(cbind(lon, lat))
point <- SpatialPoints(coords)
mapStates_sp <- map2SpatialPolygons(mapStates, IDs = mapStates$names)
i <- point [mapStates_sp, ]
selected <- mapStates_sp [i]
mapCounty_sp <- map2SpatialPolygons(mapCounty, IDs = mapCounty$names)
z <- over(mapCounty_sp, selected)
r <- mapCounty_sp[(!is.na(z))]

output$myMap2 <- renderLeaflet({
leaflet() %>%
addProviderTiles("Stamen.TonerLite",
options = providerTileOptions(noWrap = TRUE)) %>%
addPolygons(data=r,
fillColor = topo.colors(10, alpha = NULL),
stroke = FALSE)
})
})
})

注意:示例中使用的数据集似乎具有不同的准确度(州和县的重叠并不完美)。因此,空间匹配占的县比预期的多(内部加上与州边界相交的县)。使用名称作为 ID 来实现完美匹配。

关于r - 使用 R Leaflet 放大 State 以查看 ZipCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32216819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com