我在RShiny的leaflet
中有一张地图,其中标记了标记,一旦我点击一个标记,它就会添加圆圈以显示标记的所有相关点。
我想要做的是设置地图的缩放/视图,使所有相关的圆圈都可见。
圆圈的数量根据标记而变化,即一些标记具有1或2个圆圈而一些标记具有更多。此外,圆圈的位置在整个美国各不相同,因此它们可以放置在一个城市或另一个州。
以下是我用来向现有地图添加圆圈的代码
proxy <-leafletProxy("map",data = df)%>%
clearMarkers()%>%
addCircleMarkers(lat = ~lat,lng = ~lng,layerId = ~circle_pt,fillColor =
'green',opacity = 0.5,color = 'red',fillOpacity = 1)%>% clearPopups()%>%
addPopups(lat=~lat,lng=~lng,~as.character(circle_pt))
map =带有标记的原始地图 df = lat lng of circle,其中包含地图中所选标记的相关属性
我想设置缩放级别,如图2所示。
请帮助我确定如何在shiny
中的传单中计算最佳缩放级别。
此致
答案 0 :(得分:3)
如果要设置初始视图,可以使用:
setView(lng, lat, zoom = zoom_level)
直接来自documentation。
除非您提供更多信息,否则任何人都无法理解您所说的部分“以便所有相关的圈子都可见。”
答案 1 :(得分:0)
可能是你可以定义一个区间varint&lt; - findInterval()并传递给setView
varint <- findInterval()
setView(lng= lng,lat = lat, zoom = varint)
在findInterval中,尝试使用所有点之间的距离放置一些数据范围
编辑:
尝试计算出现的最远点之间的距离。
proxy <-leafletProxy("map",data = df) %>%
setView(
lng = click$lng,
lat=click$lat,
zoom=findInterval(someaverageofyourpoints, c(25,75,100,250,400,750,1000))
)
如果findintervalset值很小,你可以将其他值加到findinterval,findinterval()+ 1 .. 2 .. 4 ... 5来设置缩放级别
答案 2 :(得分:0)
我不确定你的应用程序是如何工作的,以及最初的传单调用中是什么。但也许以下示例可能会对您有所帮助。
我将点击存储在标记上,根据点击的layerId过滤数据,获取结果数据的最小/最大纬度/长度,然后使用fitBounds()
设置“缩放”级别。 (您也可以使用flyToBounds
使用相同的参数,这样可以更平滑地过渡到所选标记,但至少对我来说仍然太麻烦了)
library(shiny)
library(shinyjs)
library(leaflet)
cords <- data.frame(
lng = runif(100, 14, 18),
lat = runif(100, 54, 58),
circle_pt = sample(1:20, size = 100, replace = T)
)
ui <- fluidPage(
leafletOutput("map", height = "700px")
)
server <- function(input, output, session) {
output$map <- renderLeaflet({
leaflet(data = cords) %>%
addTiles() %>%
addCircleMarkers(lat = ~lat,lng = ~lng, layerId = ~circle_pt, fillColor = 'green',
opacity = 0.5,color = 'red',fillOpacity = 1)
})
observeEvent(input$map_marker_click, {
clickid = input$map_marker_click$id
cordsNew = cords[cords$circle_pt==clickid,]
maxLong = max(cordsNew$lng)
maxLat = max(cordsNew$lat)
minLong = min(cordsNew$lng)
minLat = min(cordsNew$lat)
proxy <-leafletProxy("map", data = cordsNew)
proxy %>%
addCircleMarkers(lat = ~lat,lng = ~lng, layerId = ~circle_pt, fillColor = 'green',
opacity = 0.5,color = 'red',fillOpacity = 1) %>%
fitBounds(minLong,minLat,maxLong,maxLat) %>%
clearPopups() %>%
addPopups(lat=~lat,lng=~lng,~as.character(circle_pt))
})
}
shinyApp(ui = ui, server = server)