В картах Google поле ввода поиска автоматически заполняет адреса при вводе пользователем.Есть ли способ сделать это в R Shiny с доступом к значению автозаполнения для использования с пакетом сопоставления?
Существует JavaScriptметод здесь .Я пытался использовать этот метод в R Shiny в коде ниже.SymbolixAU указал на использование google_map( search_box = TRUE )
, что является простым решением.К сожалению, это не работает в моем коде, а также потому, что я хотел бы, чтобы окно поиска было отделено от карты.
В приведенной ниже попытке есть текстовый ввод my_address
, текстовый вывод copy_of_address
и googleway.map my_map
в указанном порядке на странице.
Предполагаемое поведение для пользователя - вводить текст в текстовый ввод my_address
, иметь автозаполнение с адресом (это работает), адрес будет скопированв текстовый вывод copy_of_address
(это показывает только то, что было напечатано, а не автозаполненную версию) и, наконец, карта должна быть центрирована по этому адресу.
Убедитесь, что в поле ввода есть адрес автозаполнения, однако в копии адреса и карты используется только текст, введенный пользователем.
В приведенном ниже коде замените MyKey
на ваш ключ API Google (иногдаработает пустая строка).
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)