当前位置: 首页 > 知识库问答 >
问题:

传单地图在闪亮,不渲染时,放大;保持静止

葛景龙
2023-03-14

如前所述,我使用的是闪亮的仪表板。传单地图在放大时不呈现。代码是这样的。它在给定的lat,long上绘制标记。当放大时,它不工作。并且在放大时看起来是静态的,不进行渲染。需要尽快帮助。

server.r

 mapPlot <- function(searchTerm, maxTweets, lang, lat, long, rad){


    mapTweets <- searchTwitter(searchString =  searchTerm, n = maxTweets, lang = "en", geocode = paste(lat,long,paste0(rad, "mi"),sep=","))

    mapTweets.df <- twListToDF(mapTweets)

    return(mapTweets.df)
  }

  entity13 <- eventReactive(input$mapit,{

    progress <- shiny::Progress$new(session, min=1, max=15)
    on.exit(progress$close())

    progress$set(message = 'Rendering the leaflet map to visualize')

    for (i in 1:15) {
      progress$set(value = i)
      Sys.sleep(0.5)
    }

    print("Calling..")
    entity13 <- mapPlot(input$k, input$n, lang = "en", input$lat, input$long, input$rad)
    entity13
      })


  output$mymap <- renderLeaflet({

    m <- leaflet(entity13()) %>% addTiles() %>%

    addMarkers(entity13()$longitude, entity13()$latitude, popup = entity13()$screenName) 

    m %>% setView(entity13()$longitude, entity13()$latitude, zoom = 4)

    m
})

UI.R(只是一段很重要的代码)

    column(width = 9,
   box(width = NULL, solidHeader = TRUE,
     leafletOutput("mymap", height = 500)
             ))

共有1个答案

柯星华
2023-03-14

我认为是lat/long列中的na导致了这个问题。尝试在绘制之前删除这些代码-请参见output$mymap中的我的行。请注意,twitter不会自动为其所有tweet包含地理代码,有时它们是空白/na。

下面是一个您可以运行的示例(使用您自己的Twitter授权密钥等)。

注意,在你的问题中,你应该让它是可复制的,这样某人就可以复制和粘贴你的代码,它就可以运行,而不必对你的意思进行重大的编辑或猜测

library(shiny)
library(shinydashboard)
library(leaflet)
library(twitteR)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(column(width = 9,
                       box(width = NULL, solidHeader = TRUE,
                           leafletOutput("mymap", height = 500)
                       )))
)

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

  # consumerKey <- "...xxx..."
  # consumerSecret <- "...xxx..."
  # accessToken <- "...xxx..."
  # accessSecret <- "...xxx..."

  searchTerm <- "twitter"
  maxTweets <- 50
  lat <- -37.8278185
  long <- 144.9666907
  rad <- 100

  mapPlot <- function(searchTerm, maxTweets, lang, lat, long, rad){

    # setup_twitter_oauth(consumer_key = consumerKey, consumer_secret = consumerSecret,
    #                     access_token = accessToken, access_secret = accessSecret)

    mapTweets <- searchTwitteR(searchString =  searchTerm, 
                               n = maxTweets, 
                               lang = "en", 
                               geocode = paste(lat, long, paste0(rad, "mi"),sep=","))

    mapTweets.df <- twListToDF(mapTweets)

    return(mapTweets.df)
  }

  output$mymap <- renderLeaflet({

    entity13 <- mapPlot(searchTerm, maxTweets, lang = "en", lat, long, rad)
    ## Remove NAs
    entity13 <- entity13[!is.na(entity13$longitude), ]

    leaflet() %>% 
      addTiles() %>%
      addMarkers(data = entity13, lng = entity13$longitude, lat = entity13$latitude, popup = entity13$screenName) %>%
      setView(lng = long, lat = lat, zoom = 4)

  })
})

shinyApp(ui = ui, server = server)

为了让自己相信这一点,考虑一下:

df <- structure(list(longitude = c("145.21366882", "144.97520704", 
NA, NA, "144.929263"), latitude = c("-37.951828", "-37.7963", 
NA, NA, "-37.78712")), .Names = c("longitude", "latitude"), row.names = c(1L, 
2L, 5L, 6L, 7L), class = "data.frame")

## rows 5 & 6 have NA
df
#      longitude   latitude
# 1 145.21366882 -37.951828
# 2 144.97520704   -37.7963
# 5         <NA>       <NA>
# 6         <NA>       <NA>
# 7   144.929263  -37.78712

lat <- -37.8278185
long <- 144.9666907

## plotting all rows - zoom doesn't work and only first two markers shown
leaflet(data = df) %>% 
  addTiles() %>%
  addMarkers(lng = ~longitude, lat = ~latitude) %>%
  setView(lng = long, lat = lat, zoom = 4)


## only include non-NA rows - works as desired
leaflet(data = df[c(1,2,5),]) %>% 
  addTiles() %>%
  addMarkers(lng = ~longitude, lat = ~latitude) %>%
  setView(lng = long, lat = lat, zoom = 4)
 类似资料:
  • 使用在R中的闪亮,我试图创建一个传单地图,允许用户点击任何标记来生成一个相应的图,代表该特定地点的信息(温度)。 我结合了这个问题的代码(点击传单地图中的点作为shiny中一个情节的输入)和这个博客上的第二个技巧(https://www.r-bloggers.com/4-tricks-for-working-with-r-faillet-and-shiny/),但似乎仍然不能成功地在shiny中注

  • 问题内容: 我的下拉列表中有很多复选框,因此此容器具有滚动功能。但是,当我单击任何复选框时,它会自行选择\取消选择,然后更改状态。 因此,问题在于重新渲染后,此容器又回到了顶部。是否可以在渲染后保持容器的滚动而不将其保存到状态? 问题答案: 您可以在提交阶段之前保存滚动位置的“快照”。 getSnapshotBeforeUpdate()显示您正在寻找的种类。 该文档示例将当前滚动位置保存在生命周期

  • 我有一个标题,我想显示一个图像在它的右边,当鼠标在标题上。 > 我正在将变量editMode的状态设置为true/false 然后我使用onMouseOver和onMouse事件有条件地呈现图像。 现在,当我悬停在标题上时,编辑模式设置为true,图像显示出来,当我将光标移出标题时,editMode设置为false,图像消失。 我正在维护一个变量editMode的状态,该状态被设置为true/fa

  • 我们当前的任务要求我们在openGL中使用较旧的固定管道方法。我们使用的是LWJGL 2.9.3。下面的代码显示一个三角形。问题是,它会疯狂地闪烁。显示器。swapBuffers()方法不会引发异常,并且无论是否包含它都没有任何区别。我根据这个问题创建了这个示例: gluPerspective、GluViewport、gluLookAt以及GL_投影和GL_MODELVIEW矩阵 编辑 还有一件事

  • 其思想是用户选择一个输入,并且对应于该输入的标记(将从对应输入的数据集中提取的lat/long)显示在传单地图中(具有放大/缩小功能)。任何帮助/建议将不胜感激! (示例数据文件上载于此):