R闪亮地图搜索输入框

时间:2018-11-17 01:51:43

标签: r autocomplete shiny r-leaflet googleway

在Google Maps中,搜索输入框会在用户输入时自动完成地址。在R Shiny中是否有办法通过访问自动完成值来与映射包一起使用?

enter image description here

有一个JavaScript方法here。我尝试在下面的代码中的R Shiny中使用此方法。 SymbolixAU指出使用google_map( search_box = TRUE )是一个简单的解决方案。不幸的是,它在我的代码中不起作用,也因为我希望搜索框与地图分开。

以下尝试在页面上按此顺序输入了文本输入my_address,文本输出copy_of_address和googleway地图my_map

预期的行为是用户将文本输入到文本输入my_address中,使其自动完成并带有地址(此方法有效),该地址将被复制到文本输出copy_of_address中(仅显示输入的内容,而不是自动完成的版本),最后,地图将以该地址为中心。

The shiny app

看到输入框具有自动完成地址,但是地址和地图的副本仅使用用户输入的文本。

在下面的代码中,将MyKey替换为您的google api键(有时可以使用空字符串)。

library(shiny)
library(googleway)

key <- "MyKey"
set_key(key = key)
google_keys()

ui <- shiny::basicPage(

  div(
    textInput(inputId = "my_address", label = "")    
    ,textOutput(outputId = "copy_of_address")
    ,HTML(paste0("
          <script>
            function initAutocomplete() {
            new google.maps.places.Autocomplete(
            (document.getElementById('my_address')),
            {types: ['geocode']}
            );
            }
            </script>
            <script src='https://maps.googleapis.com/maps/api/js?key=", key,"&libraries=places&callback=initAutocomplete'
            async defer></script>
    "))
    ,google_mapOutput(outputId = "my_map")
  )

)

server <- function(input, output) {

  my_address <- reactive({
    input$my_address
  })

  output$copy_of_address <- renderText({
    my_address()
  })

  output$my_map <- renderGoogle_map({
    my_address <- my_address()
    validate(
      need(my_address, "Address not available")
    )

    df <- google_geocode(address = my_address)
    my_coords <- geocode_coordinates(df)
    my_coords <- c(my_coords$lat[1], my_coords$lng[1])

    google_map(
      location = my_coords,
      zoom = 12,
      map_type_control = FALSE,
      zoom_control = FALSE,
      street_view_control = FALSE
    )
  })

}

shinyApp(ui, server)

0 个答案:

没有答案