2017-03-07 9 views
1

私は、ユーザーがDrawToolbarを介してリーフレットマップ上に新しいポイントを作成できる光沢のあるアプリを持っています。新しいマーカーが設定されるたびに、座標がdata.frameに追加されます。これらの座標を新しく追加されたマーカーのポップアップとして表示したいと思います。これは、新しいマーカーをドラッグまたは削除する可能性を失うことなく可能ですか?DrawToolbarによって追加されたマーカーにポップアップをリーフレットで追加します

library(shiny) 
library(leaflet) 
library(leaflet.extras) 

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

data <- data.frame(lat = c(), lon = c()) 

server <- function(input, output, session) { 

    output$map <- renderLeaflet({ 
    leaflet() %>% addTiles() %>% 
     addDrawToolbar(
     targetGroup = "new_points", 
     polylineOptions = FALSE, 
     polygonOptions = FALSE, 
     rectangleOptions = FALSE, 
     circleOptions = FALSE, 
     editOptions = editToolbarOptions(selectedPathOptions = selectedPathOptions())) 
    }) 

    observeEvent(input$map_draw_new_feature, { 
    click_lat <- input$map_draw_new_feature$geometry$coordinates[[2]] 
    click_lon <- input$map_draw_new_feature$geometry$coordinates[[1]] 
    data <- rbind(data, cbind(click_lat, click_lon)) 
    print(data) 
    }) 

} 


shinyApp(ui, server) 

答えて

1

あなたはそれが(ポップアップですべてのマーカーを追加)マップを再プロットし、新しいマーカーを格納する代わりに、グローバル変数のreactiveValuesを使用することができますあなたが追加するたびに1:

library(shiny) 
library(leaflet) 
library(leaflet.extras) 

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

server <- function(input, output, session) { 
    data <- reactiveValues(lat = NULL, lon = NULL) 
    output$map <- renderLeaflet({ 
    # Get setView parameters 
    new_zoom <- 2 
    if(!is.null(input$map_zoom)) new_zoom <- input$map_zoom 
    new_lat <- 0 
    if(!is.null(input$map_center$lat)) new_lat <- input$map_center$lat 
    new_lon <- 0 
    if(!is.null(input$map_center$lng)) new_lon <- input$map_center$lng 

    leaflet() %>% addTiles() %>% 
     setView(new_lon,new_lat,zoom = new_zoom) %>% 
     addDrawToolbar(
     targetGroup = "new_points", 
     polylineOptions = FALSE, 
     polygonOptions = FALSE, 
     rectangleOptions = FALSE, 
     circleOptions = FALSE, 
     editOptions = editToolbarOptions(
      selectedPathOptions = selectedPathOptions()))-> map 

    if (!is.null(data$lat)) { 
     addMarkers(map, lng=data$lon, lat=data$lat, 
      popup=paste("lat=", data$lat, ", lon=", data$lon))} 
    else map 
    }) 

    observeEvent(input$map_draw_new_feature, { 
    click_lat <- input$map_draw_new_feature$geometry$coordinates[[2]] 
    click_lon <- input$map_draw_new_feature$geometry$coordinates[[1]] 
    data$lat <- c(data$lat,click_lat) 
    data$lon <- c(data$lon,click_lon) 
    }) 
} 

shinyApp(ui, server) 

お知らせsetViewあなたが追加する最初のマーカーへのズームを避けるための呼び出し

+0

マーカーをドラッグまたは削除する可能性を失うことなくこれを行う方法はありますか?私の場合、ポップアップが選択に役立つはずですが、どのマーカーが間違って追加されているので、ドラッグや削除が可能です。私はこれを明確にするために私の質問を更新します。 – needRhelp

関連する問題