googleway包多边形ID定义及Shiny编辑事件无响应问题求助
问题:Shiny中googleway可编辑多边形的observeEvent无响应
问题详情
当前调试的Shiny服务器代码如下:
vertices <- structure(list(lat = c(20.99, 20.99, 21.01, 21.01, 20.99), lng = c(83.99, 84.01, 84.01, 83.99, 83.99)), class = "data.frame", row.names = c(NA, -5L)) server <- function(input, output, session) { output$map <- renderGoogle_map({ google_map(key = apikey, map_type = "satellite", location = c(21.92, 85.43), zoom = 14 ) %>% add_polygons(vertices,lat = "lat", lon = "lng",editable = T) }) observeEvent(input$map_polygon_edited, { edited_data <- input$map_polygon_edited print(edited_data) }) }
目前地图能正常显示卫星视图和可拖拽顶点的矩形,但observeEvent(input$map_polygon_edited)完全无响应。尝试在add_polygons()中添加id参数,但根据googleway文档,id需要传入列名,不清楚观察者事件中对应的标识该如何匹配。
解决方案
- 触发多边形编辑事件的核心前提:必须通过
id参数为多边形绑定数据框中的唯一标识列,哪怕只有一个多边形也需要设置。 - 具体步骤:
- 给顶点数据框新增一个唯一标识列,比如
poly_id:vertices$poly_id <- 1 # 单个多边形时设置固定值即可 - 在
add_polygons中指定id = "poly_id",将多边形与标识列绑定:add_polygons(vertices, lat = "lat", lon = "lng", editable = T, id = "poly_id") - 保持
observeEvent(input$map_polygon_edited)的监听逻辑,此时编辑多边形后该事件会正常触发。
- 给顶点数据框新增一个唯一标识列,比如
修改后的完整代码
vertices <- structure(list(lat = c(20.99, 20.99, 21.01, 21.01, 20.99), lng = c(83.99, 84.01, 84.01, 83.99, 83.99)), class = "data.frame", row.names = c(NA, -5L)) # 添加唯一标识列 vertices$poly_id <- 1 server <- function(input, output, session) { output$map <- renderGoogle_map({ google_map(key = apikey, map_type = "satellite", location = c(21.92, 85.43), zoom = 14 ) %>% add_polygons(vertices, lat = "lat", lon = "lng", editable = T, id = "poly_id") }) observeEvent(input$map_polygon_edited, { edited_data <- input$map_polygon_edited print(edited_data) # 可在此处进一步处理编辑后的顶点数据 }) }
补充说明
编辑触发后,input$map_polygon_edited会返回一个列表,包含修改后的多边形顶点坐标(coordinates字段)以及对应的id值,你可以根据业务需求提取和处理这些数据。
内容的提问来源于stack exchange,提问作者Lazarus Thurston
相关产品推荐
相关产品推荐

