鼠标掠过填充区域时高亮显示边框-传单-R

鼠标掠过填充区域时高亮显示边框-传单-R,r,leaflet,R,Leaflet,在@TimSalabim的指导下,我分离了我的邻域多边形的边界和填充,以便使用zIndex对它们进行适当的排序 如果我将highlightOptions()函数放在addPolygons(邻域填充)函数中,我不知道如何在鼠标悬停时增加多边形的边界 如果我将highlightOptions()函数放在addPolylines(邻域边界)函数中,我可以小心地将鼠标移到边界上,宽度会增加。这就是我想要的行为,当我用鼠标在附近的任何地方移动时 现在我已经分离了多边形的填充和边界,当我将鼠标移到填充区域

在@TimSalabim的指导下,我分离了我的邻域多边形的边界和填充,以便使用zIndex对它们进行适当的排序

如果我将
highlightOptions()
函数放在
addPolygons(邻域填充)
函数中,我不知道如何在鼠标悬停时增加多边形的边界

如果我将
highlightOptions()
函数放在
addPolylines(邻域边界)
函数中,我可以小心地将鼠标移到边界上,宽度会增加。这就是我想要的行为,当我用鼠标在附近的任何地方移动时

现在我已经分离了多边形的填充和边界,当我将鼠标移到填充区域上时,如何增加边界宽度

# Add hood borders
  addPolylines(data = borders, 
               color = "white",
               opacity = 1, 
               weight = 2,
               options = pathOptions(pane = "hood_borders")) %>% 

 # Add hood fill
  addPolygons(data = hood_shp,
              fillColor = ~pal(be_per_cap),
              fillOpacity = 1.0,
              color = NA,
              options = pathOptions(pane = "hoods",

              # Highlight neighbourhoods upon mouseover - NOT CORRECT
              highlight = highlightOptions(
                          stroke = 4),

              # Add label info when mouseover
              label = labels,
              labelOptions = labelOptions(
                style = list("font-weight" = "normal", padding = "3px 8px"),
                textsize = "15px",
                direction = "auto")))

按照世嘉的建议,我修改了代码。看见邻里之间的边界并不模糊,悬停时边界确实扩大了。但是,当鼠标离开时,边框不会恢复到其原始宽度。为什么呢

leaflet(options = leafletOptions(minZoom = 11, maxZoom = 16), width = "100%") %>% 
  addTiles() %>% 

  # Raster image surrounding Toronto
  addProviderTiles(providers$OpenStreetMap.BlackAndWhite) %>% 

#  Center map north of Toronto City Hall slightly zoomed in
  setView(map,
          lng = -79.384293,
          lat = 43.685, #43.653908,
          zoom = 12) %>%

  # Vector neighbourhoods
  addPolygons(data = hood_shp, 
              fillColor = ~pal(be_per_cap),
              color = NA,
              fillOpacity = 1,

              # Highlight neighbourhoods upon mouseover
              highlight = highlightOptions(
                weight = 3,
                fillOpacity = 0,
                color = "black",
                opacity = 1.0,
                bringToFront = TRUE,
                sendToBack = TRUE),  

              # # Add label info when mouseover
              label = labels,
              labelOptions = labelOptions(
              style = list("font-weight" = "normal", padding = "3px 8px"),
              textsize = "15px",
              direction = "auto")) %>%

  # Add highways
  addPolygons(data = xway,
              color = "sienna",
              weight = 1.0,
              opacity = 1.0,
              fillOpacity = 0.7) %>%

  # Add major arterial
  addPolygons(data = mart,
              color = "#737373",
              weight = 1.0,
              opacity = 1.0,
              fillOpacity = 1.0) %>%

  # Add parks
  addPolygons(data = parks,
              color = "green",
              weight = 1.0,
              opacity = 1.0,
              fillOpacity = 1.0,
              options = pathOptions(clickable = FALSE)) %>%

  # Add border
  addPolylines(data = hood_shp,
               color = "black",
               stroke = TRUE,
               opacity = 1, 
               weight = 1) %>% 

  # Add legend
  addLegend(data = hood_shp, 
            colors =c("#AA122E", "#F4AE7E", "#FEFDB7"),
            labels= c("More", "", "Less"),
            opacity = 1.0, 
            title = "B&Es",
            position = "bottomright") 

我不确定我是否正确理解了您的问题,但如果您只想增加带有传单的多边形的边界,则Highlight选项是正确的选择,但不应将其放置在pathOptions中

  • 以下示例使用带有高亮选项的
    addPolygons
    作为邻域。在这些模型中,您可以定义鼠标悬停时邻居的行为。使用
    weight
    参数定义边框大小
  • 公园也会进入
    添加多边形
    ,但带有
    选项=
    pathooptions(clickable=FALSE)
    您使它们不可读取,因此 不要与鼠标事件交互
  • 边框进入
    添加多段线
    ,无需任何进一步的修改 选项
下面的例子是您正在寻找的吗

library(sp)

Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
hood_shp = SpatialPolygons(list(Srs1,Srs2), 1:2)
hood_shp <- SpatialPolygonsDataFrame(hood_shp, data=data.frame(be_per_cap = 1:length(hood_shp)), match.ID = F)

parks = Polygon(cbind(c(2,3,3,1,2),c(1,2,4,3,1)))
parks = SpatialPolygons(list(Polygons(list(parks), "parks")))

xway = Polygon(cbind(c(1,5,5,1,3),c(3,5,5,3,1)))
xway = SpatialPolygons(list(Polygons(list(xway), "xway")))

library(shiny)
library(leaflet)
library(htmlwidgets)

ui <- fluidPage(
  leafletOutput("map")
)

server <- function(input, output) {
    output$map <- renderLeaflet({

      pal = colorBin("Blues", hood_shp$be_per_cap)

      leaflet(width = "100%") %>% 
      addTiles() %>% 

        # Raster image surrounding Toronto
        addProviderTiles(providers$OpenStreetMap.BlackAndWhite) %>% 

        # Vector neighbourhoods
        addPolygons(data = hood_shp, 
                    fillColor = ~pal(be_per_cap),
                    color = "transparent",
                    fillOpacity = 1,

                    # Highlight neighbourhoods upon mouseover
                    highlight = highlightOptions(
                      weight = 3,
                      fillOpacity = 0,
                      color = "black",
                      opacity = 1.0,
                      bringToFront = TRUE,
                      sendToBack = TRUE),  

                    # # Add label info when mouseover
                    label = "labels",
                    labelOptions = labelOptions(
                      style = list("font-weight" = "normal", padding = "3px 8px"),
                      textsize = "15px",
                      direction = "auto")) %>%

        # Add parks
        addPolygons(data = parks,
                    color = "green",
                    weight = 1.0,
                    opacity = 1.0,
                    fillOpacity = 1.0,
                    options = pathOptions(clickable = FALSE)) %>%

        # Add highways
        addPolygons(data = xway,
                    color = "sienna",
                    weight = 1.0,
                    opacity = 1.0,
                    fillOpacity = 0.7) %>%

        # Add border
        addPolylines(data = hood_shp,
                     color = "black",
                     stroke = TRUE,
                     opacity = 1, 
                     weight = 1) %>% 

        # Add legend
        addLegend(data = hood_shp, 
                  colors =c("#AA122E", "#F4AE7E", "#FEFDB7"),
                  labels= c("More", "", "Less"),
                  opacity = 1.0, 
                  title = "B&Es",
                  position = "bottomright")
    })
}

shinyApp(ui, server)
库(sp)
Sr1=多边形(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2=多边形(cbind(c(5,4,2,5),c(2,3,2,2)))
Srs1=多边形(列表(Sr1),“s1”)
Srs2=多边形(列表(Sr2),“s2”)
hood_shp=空间多边形(列表(Srs1,Srs2),1:2)
胡德_shp%
#增加公园
添加多边形(数据=公园,
color=“绿色”,
重量=1.0,
不透明度=1.0,
fillOpacity=1.0,
选项=选项(可点击=错误))%>%
#增加公路
添加多边形(数据=xway,
color=“sienna”,
重量=1.0,
不透明度=1.0,
填充不透明度=0.7)%>%
#添加边框
添加多段线(数据=发动机罩,
color=“黑色”,
笔划=真,
不透明度=1,
重量=1)%>%
#添加图例
addLegend(数据=发动机罩,
颜色=c(“#AA122E”、“#F4AE7E”、“#FEFDB7”),
标签=c(“更多”、“更少”),
不透明度=1.0,
title=“B&Es”,
position=“bottomright”)
})
}
shinyApp(用户界面、服务器)

如果您将一个小的可复制示例包含在一些虚拟数据中,解决它会更容易。如果不使用图层,我可以突出显示边框。请参阅:但是,我认为我需要使用图层,这样“公园”图层就不会模糊白色的邻里边界。这有意义吗?我编辑了我的答案。也许这就是你想要的?我试着以你为例并加以应用。我不清楚如何控制图层顺序。另外,我用我的修改修改了我原来的问题。我仍然有一个问题,就是鼠标离开后,边框不能恢复到原来的宽度。这对我很有效。在附近的高亮选项中尝试使用
weight=10
。你想要的行为是什么?什么是可点击的,什么是刚刚显示的?理想的行为是在悬停时加宽黑色边框,并在鼠标离开时将边框宽度恢复到其原始状态。我认为,当边界位于绿色公园上方时,这种方法非常有效。但是当边界没有在公园上方时,当我在盘旋后将鼠标移出时,它看起来就不同了。这有意义吗?无需单击。