在r中更好地控制传单弹出窗口

时间:2017-02-18 04:04:55

标签: r leaflet

我正在尝试使用leaflet包在R中更好地控制leaflet弹出窗口。 MWE的代码如下:

library(dplyr)
library(magrittr)
library(leaflet)

download.file(
  url = "http://biogeo.ucdavis.edu/data/gadm2.8/rds/GBR_adm1.rds", 
  destfile = "GBR_adm1.rds", 
  method = "curl"
)

shp_gbr <- readRDS("GBR_adm1.rds")

# get centroids for placing popups in second map
shp_gbr_centers <- 
  rgeos::gCentroid(shp_gbr, byid = TRUE) %>% 
  sp::SpatialPointsDataFrame(shp_gbr@data, match.ID = FALSE)

shp_gbr@data %<>% 
  left_join(shp_gbr_centers[1], by = 'OBJECTID', copy = TRUE) %>% 
  rename(lat = y, lng = x) %>% 
  select(NAME_1, lat, lng) %>% 
  mutate(text = ProgGUIinR::LoremIpsum)

popup <- paste("<b><h3>", shp_gbr$NAME_1, "</h3></b>", shp_gbr$text)

shp_gbr %>% 
  leaflet() %>% 
  addPolygons(popup = ~popup)

这提供了一个漂亮的地图,其中弹出窗口在4个国家/地区的区域内点击时显示,但在这种情况下,文本太多,弹出窗口处理得不好:

enter image description here

我想要的是通过popupOptions函数访问一些addPopups,在这种情况下,可以使弹出窗口更宽,并有一个滚动条。下面是一个例子:

shp_gbr %>% 
  leaflet() %>% 
  addPolygons() %>%
  addPopups(
    data = shp_gbr@data,
    popup = ~popup,
    options =
      popupOptions(
        maxWidth = 600,
        maxHeight = 100
      )
  )

但是,弹出窗口现在设置为在启动时打开,而不是在边界内单击时出现,并且一旦关闭就不会重新打开:

enter image description here

我的问题是如何组合这些元素,以便你可以在地图中输入太多文本的滚动条,例如第一个示例,弹出窗口默认关闭,但在点击时打开。

1 个答案:

答案 0 :(得分:1)

您可以使用此功能创建弹出窗口:

popup <- paste("<div class='leaflet-popup-scrolled' style='max-width:600px;max-height:100px'><b><h3>", shp_gbr$NAME_1, "</h3></b>", shp_gbr$text,"</div>")

它将弹出窗口包含在div的{​​{1}}类中,以添加滚动条和内嵌CSS来设置leaflet-popup-scrolledmax-width