如何实现点击标记点时迷你地图居中至对应经纬度坐标
解决Shiny Leaflet点击标记点后迷你地图居中更新的问题
你当前的代码存在的问题是:每次点击标记点都会新增一个迷你地图,旧的迷你地图不会被移除,导致视觉上看起来位置没有变化。要实现每次点击标记点时,迷你地图都居中到对应坐标,需要先移除已有的迷你地图控件,再添加新的迷你地图。
修改后的完整代码如下:
library(shiny) library(leaflet) library(tidyverse) ui <- fluidPage( leafletOutput('map') ) server <- function(input, output, session) { output$map <- renderLeaflet({ latitude <- c(53.380909, 53.371566) longitude <- c(-1.486197, -1.577604) placeNames <- c("Hicks Building", "The Sportsman") leaflet(options=leafletOptions(zoomControl = FALSE)) %>% setView(lng = -1.525, lat = 53.38, zoom =12) %>% addProviderTiles(provider = leaflet.providers::providers_default()$providers$Esri.WorldStreetMap) %>% addMarkers(lat = latitude, lng = longitude, popup = placeNames) }) observeEvent(input$map_marker_click, { click <- input$map_marker_click leafletProxy('map') %>% # 移除已有的所有控件(此处仅迷你地图) clearControls() %>% # 添加新的迷你地图,居中到点击的标记点坐标 addMiniMap(zoomLevelFixed = 14, centerFixed = c(click$lat, click$lng), id = "mini_map") # 给迷你地图设置唯一ID,便于精准移除(如果有其他控件时可用) }) } shinyApp(ui, server)
关键说明:
clearControls():用于移除地图上已有的所有控件,由于你的场景中只有迷你地图这一个额外控件,使用这个方法最简单直接。- 如果你的地图还有其他需要保留的控件,可以替换为
removeControl("mini_map"),前提是给addMiniMap指定了id参数,这样只会移除迷你地图控件,不会影响其他控件。 - 每次点击标记点时,先清除旧的迷你地图,再添加以点击坐标为中心的新迷你地图,即可实现迷你地图的位置更新。
内容的提问来源于stack exchange,提问作者Working dollar
相关产品推荐
相关产品推荐

