自然地球のウェブサイトからダウンロードしたbusiness
という地図があります。ここでは、マップを表示する基本的なマップ出力を作成しています。ここでは主にadmin
(国の名前)とeconomy
の2つの列を使用しています。次に、uiの下にBusiness
というドロップダウンリストを追加しました。国のポリゴンをクリックすると、リストが更新され、クリックしている国が表示されます。 p <- input$Map_shape_click
shinyは、pがbusiness
オブジェクトであることを知っているので、列admin
があり、このadmin
IDを参照してBusiness
ドロップダウンリストを更新します。しかし、それは機能しません。リンクは私が見ているものを示しています-別の国をクリックしてもリストは更新されません。
server.r
country <- readOGR(dsn = tmp, layer = "ne_110m_admin_0_countries", encoding = "UTF-8")
business<-country[country@data$admin %in% c("Brazil","Colombia","Panama","Kazakhstan","Argentina","India","","Chile","Dominican Republic","United Kingdom","El Salvador","United States of America"),]
business@data$category <- factor(sample.int(20L, nrow(business@data), FALSE))
shinyServer(function(input, output,session) {
output$Map <- renderLeaflet({
factpal <- colorFactor(topo.colors(20), business@data$category)
state_popup <- paste0("<strong>Name of the country </strong>",
business$admin,
"<br><strong> information is </strong>",
business$economy)
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data=business,
layerId=~admin,
fillColor= ~factpal(category),
fillOpacity = 0.7,
color = "#BDBDC3",
weight = 1,
popup = state_popup,
highlight = highlightOptions(
weight = 5,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE))})
observeEvent(input$Map_shape_click, { # update the location selectInput on map clicks
p <- input$Map_shape_click
if(!is.null(p$admin)){
if(is.null(input$Business) || input$Business!=p$admin) updateSelectInput(session, "Business", selected=p$admin)
}
})
}
)
ui.r
navbarPage("Market Portal",
tabPanel("About",
bootstrapPage(
leafletOutput("Map",width="100%",height="800px"),
absolutePanel(top=100, right=50,
selectInput("Business", "Business", c("Brazil","Colombia","Panama","Kazakhstan","Argentina","India","Chile","Dominican Republic","United Kingdom","El Salvador","United States of America"), selected="")
))))
リーフレットのclick
イベントは、lat
、lng
およびid
(およびランダムな値)を返します。したがって、これらの要素の1つにしかアクセスできません。
id
の値は、形状プロット関数で指定したlayerId
に関連するため、この場合はlayerId=~admin
になります。
したがって、クリックのadmin
フィールドを介してid
値にアクセスします
p$admin
をp$id
に置き換えると、ソリューションが得られます。
click
イベントの内容を確認するには、その周りにprint
ステートメントを挿入します
observeEvent(input$Map_shape_click, { # update the location selectInput on map clicks
p <- input$Map_shape_click
print(p)
})
オブジェクトをコンソールに出力します。