闪亮的传单ploygon单击事件 [英] shiny leaflet ploygon click event
问题描述
我有一张称为business
的地图,该地图是从Natural Earth网站下载的.我在这里所做的是创建了一个基本的Map输出,其中显示了地图.我主要使用两列,分别是admin
(国家名称)和economy
.然后,我在ui下添加了一个名为Business
的下拉列表,以便当我单击国家/地区的多边形时,该列表将刷新并显示要单击的国家/地区.我假设当我写p <- input$Map_shape_click
闪亮时,它会知道p是business
对象,因此它具有列admin
,并且我已经引用了该admin
ID来刷新我的Business
下拉列表.但这不起作用.该链接显示了我所看到的内容-当我单击其他国家/地区时,列表不会刷新.
I have a map called business
which is downloaded from natural earth website. What I am doing here is I created a basic Map output which shows the map. I am mainly using two columns which are admin
(which is the name of the country) and economy
here. Then I added a drop down list called Business
under ui so that when I click the polygon of the country the list would refresh and show the country that I am clicking. I assume when I write p <- input$Map_shape_click
shiny would know p is a business
object so it has column admin
and I have reference this admin
ID to refresh my Business
drop down list. But it doesn't work.The link shows what I am seeing - the list wouldn't refresh when I click a different country.
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
(以及随机值).因此,您只能访问这些元素之一.
The click
event in leaflet returns lat
, lng
and id
(and a random value). So you can only access one of those elements.
id
值与您在形状绘图功能中指定的layerId
有关,因此在您的情况下为layerId=~admin
.
The id
value relates to the layerId
you specify in the shape plotting function, so in your case that's layerId=~admin
.
因此,您可以通过点击的id
字段获得admin
值
So you acccess the admin
value through the click's id
field
用p$id
替换p$admin
,您应该有解决方案.
replace p$admin
with p$id
and you should have your solution.
如果您想查看click
事件中的内容,只需在其周围放一个print
语句
If you want to see what's in the click
event, just put a print
statement around it
observeEvent(input$Map_shape_click, { # update the location selectInput on map clicks
p <- input$Map_shape_click
print(p)
})
,它将把对象打印到控制台.
and it will print the object to the console.
这篇关于闪亮的传单ploygon单击事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!