使用R Leaflet放大状态以查看ZipCode

use*_*712 6 r geojson leaflet

我正在使用R leaftlet包创建一个美国互​​动的等值线

在线有几个教程,我可以创建带弹出窗口和缩放的交互式州级地图.此外,我还能够使用弹出窗口再次创建单独的邮政编码级别地图.

我想在一个地图本身的两个视图,但在我放大状态或双击状态时使邮政编码可见.如果我双击纽约,纽约邮政编码就会打开.R中有包/功能可以帮我这么做吗?

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

小智 5

我同意Yehoshapat Schellekens的说法,在R中,可能没有网络编程语言的灵活性.但很少R不够灵活,无法获得花哨的结果!:)在这里,您将了解一个基本需要的"香草"示例.您可以使用一些JS自定义Windows弹出窗口.

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)
    })  
  })
})
Run Code Online (Sandbox Code Playgroud)

注意:示例中使用的数据集似乎具有不同的精度(对于州和县而言不是完美重叠).因此,空间匹配占了比预期更多的县(那些内部加上与州界相交的那些).使用名称作为ID来实现完美匹配.


Yeh*_*ens 2

您无法通过 R 创建它,您需要通过旧的 java 脚本(特别是传单)来运行它。

请记住,R 不运行地图,它所做的只是创建 HTML 文件的 java 脚本模板,您的 Web 浏览器运行其余部分(不是 R 解释器)

您正在寻找的专业词是“事件绑定”,只需单击一下即可触发放大您的原始美国地图,并打开一个带有邮政编码的州的新地图。

一般说明(这都是 java 脚本,没有 R!):

访问http://leafletjs.com/reference.html并找到事件,您需要dblclick事件。

然后您需要创建一个打开新地图的函数。

请记住,如果您想做复杂的事情,R 将为您提供非常有限的解决方案,所以我的建议是,当您需要漂亮的 Java 脚本可视化时,只需直接访问源代码:)