首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使传单层可点击或不可点击,无需重新排序

问使传单层可点击或不可点击,无需重新排序
EN

Stack Overflow用户
提问于 2016-09-08 20:28:32
回答 1查看 2.3K关注 0票数 4

在SO或Google中找不到答案,然后我自己成功地找到了解决方案,我决定同时提出问题和答案。

可重复的代码可以在下面的“答案”中找到。

问题

默认情况下,所有层都是“可点击的”。因此,当使用多个层时,特别是在覆盖另一个层(例如标记和多边形)时,您的层的顺序决定了什么是可点击的。标记与多边形覆盖将保持不可点击,即使没有标签弹出是伴随多边形。

我发现关于这个问题的唯一一篇文章是:Leaflet Map - second Polygon makes the first layer unclickable

天真的解决方案是确保标记是最后分层的。不幸的是,如果您使用像addLayersControl()这样的函数,启用/禁用一个层会将该层移动到前面。因此,虽然层顺序最初很重要,但它并不能真正“解决”这个问题。

EN

回答 1

Stack Overflow用户

发布于 2016-09-08 20:28:32

解决方案

相应地使用函数pathOptions()、markerOptions()和labelOptions()。

在我的例子中,是多边形层导致了这个问题。通过执行addPolygons(..., options = pathOptions(clickable = FALSE)),这些都是“不可点击的”。

示例

代码语言:javascript
复制
library(rgdal) # for spatial data
library(leaflet)
library(dplyr)
library(magrittr)

# download and load state border data
url <- "http://www2.census.gov/geo/tiger/GENZ2015/shp/cb_2015_us_state_5m.zip"
temp <- tempfile(fileext = '.zip')
download.file(url, temp)
unzip(temp, exdir = dirname(temp))
states <- rgdal::readOGR(file.path(dirname(temp), "cb_2015_us_state_5m.shp"),
  layer = "cb_2015_us_state_5m", verbose = FALSE)
unlink(temp)

# code adopted from https://rstudio.github.io/leaflet/shapes.html
neStates <- subset(states, states$STUSPS %in% c(
  "CT","ME","MA","NH","RI","VT","NY","NJ","PA"
))

cities <- read.csv(textConnection("
City,Lat,Long,Pop
Boston,42.3601,-71.0589,645966
Hartford,41.7627,-72.6743,125017
New York City,40.7127,-74.0059,8406000
Philadelphia,39.9500,-75.1667,1553000
Pittsburgh,40.4397,-79.9764,305841
Providence,41.8236,-71.4222,177994
"))


# (1) polygon layer added last; cannot click cities/circles
map_1 <- leaflet(neStates) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addCircles(data = cities, lng = ~Long, lat = ~Lat, weight = 1,
    radius = ~sqrt(Pop) * 30, popup = ~City,
    group = "Cities") %>%
  addPolygons(
    stroke = FALSE, fillOpacity = 0.2, smoothFactor = 0.5,
    color = ~colorQuantile("YlOrRd", states$AWATER)(AWATER),
    group = "States") %>%
  addLayersControl(overlayGroups = c('Cities', 'States'),
    options = layersControlOptions(collapsed = FALSE))


# (2) polygon layer made 'unclickable' (clickable = FALSE)
map_2 <- leaflet(neStates) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addCircles(data = cities, lng = ~Long, lat = ~Lat, weight = 1,
    radius = ~sqrt(Pop) * 30, popup = ~City,
    group = "Cities") %>%
  addPolygons(
    stroke = FALSE, fillOpacity = 0.2, smoothFactor = 0.5,
    color = ~colorQuantile("YlOrRd", states$AWATER)(AWATER),
    group = "States",
    options = pathOptions(clickable = FALSE)) %>% # DISABLE 'clickable'
  addLayersControl(overlayGroups = c('Cities', 'States'),
    options = layersControlOptions(collapsed = FALSE))


map_1 # even if polygon layer is put last, disable/enable layer puts it in front again
map_2 # disable/enabling any layer has no impact!
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39399656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档