Javascript 地理定位可以在笔记本电脑上使用,但不能在智能手机上使用
我创建了一个闪亮的应用程序,用户可以从他们希望在地图上显示的地址列表(第一个选项卡)中进行选择(第二个选项卡)。为了让他们更容易,我还尝试获取他们的地理位置,并将其显示在地图上。这适用于笔记本电脑,但不适用于移动设备。当我在笔记本电脑上启动应用程序时,浏览器会要求我(弹出窗口)共享我的位置。在智能手机上,这种情况不会发生。你知道为什么吗 这是我的代码:Javascript 地理定位可以在笔记本电脑上使用,但不能在智能手机上使用,javascript,r,shiny,leaflet,Javascript,R,Shiny,Leaflet,我创建了一个闪亮的应用程序,用户可以从他们希望在地图上显示的地址列表(第一个选项卡)中进行选择(第二个选项卡)。为了让他们更容易,我还尝试获取他们的地理位置,并将其显示在地图上。这适用于笔记本电脑,但不适用于移动设备。当我在笔记本电脑上启动应用程序时,浏览器会要求我(弹出窗口)共享我的位置。在智能手机上,这种情况不会发生。你知道为什么吗 这是我的代码: 地理位置部分在UI中的“#从用户获取地理位置”下,在服务器中的“#添加设备位置”下 库(闪亮) 图书馆(shinyjs) 图书馆(单张) 图书馆
地理位置部分在UI中的“#从用户获取地理位置”下,在服务器中的“#添加设备位置”下
库(闪亮)
图书馆(shinyjs)
图书馆(单张)
图书馆(dplyr)
图书馆(sp)
#####################################################################################################
##服务器#####
#####################################################################################################
服务器您是否使用https://
URL从智能手机访问应用程序?否。两次都是http://
URL。使用https://
似乎根本不起作用您可以在检查浏览器设置时检查应用程序,可能会因默认情况而拒绝在浏览器设置中启用地理位置。其他人使用地理定位的应用程序没有问题。它也不适用于其他人的手机。
library(shiny)
library(shinyjs)
library(leaflet)
library(dplyr)
library(sp)
#####################################################################################################
## Server #####
#####################################################################################################
server <- function(input, output) {
## data frame (normally a bigger data frame) ##
df <- data.frame(lng = c(9.615772, 9.53677), lat = c(47.78331, 47.15224), label = c("Adress 1", "Adress 2"))
## render map ##
output$mymap <- renderLeaflet({
# join input #
df_coord <- right_join(df, data.frame(label= input$address),
by="label"
)
# add device location #
if(!is.null(input$devicelat)){
you <- data.frame(lng=input$devicelong, lat=input$devicelat, label="that's you")
df_coord <- bind_rows(df_coord, you)
}
# convert to spacial points #
data <- SpatialPointsDataFrame(coords=df_coord[1:2], data = df_coord)
# create map #
mymap <- leaflet(data=data) %>%
addTiles() %>%
addMarkers(lng= ~lng,
lat= ~lat,
popup= ~label
)
mymap
})
}
#####################################################################################################
## User Interface #####
#####################################################################################################
ui <- navbarPage(title = "amazing map",
## TAB CHOOSE ADDRESS ##
tabPanel(title= "choose address",
# get geolocation from user #
tags$script('
$(document).ready(function () {
navigator.geolocation.getCurrentPosition(onSuccess, onError);
function onError (err) {
Shiny.onInputChange("geolocation", false);
}
function onSuccess (position) {
setTimeout(function () {
var coords = position.coords;
console.log(coords.latitude + ", " + coords.longitude);
Shiny.onInputChange("geolocation", true);
Shiny.onInputChange("devicelat", coords.latitude);
Shiny.onInputChange("devicelong", coords.longitude);
}, 1100)
}
});
'),
fluidRow(
column(6,
offset = 3,
wellPanel(
checkboxGroupInput("address",
label = h3("Choose address to display"),
choiceNames = as.character(df$label),
choiceValues = df$label
)
)
)
)
),
## TAB MAP ##
tabPanel(title= "see the address",
tags$head(tags$style(HTML("#mymap {height: calc(100vh - 81px) !important;}")
)),
fluidRow(leafletOutput("mymap", width = "100%"))
)
)
shinyApp(ui = ui, server = server)