gpt4 book ai didi

r - 从 R 中的传单获取边界框

转载 作者:行者123 更新时间:2023-12-05 00:15:37 25 4
gpt4 key购买 nike

我正在使用 R、RStudio 和 leaflet用于可视化 map 的包。

我想获得传单对象边界框的最小和最大经纬度。我认为这可以使用 Shiny 来完成(通过使用类似 input$mapobj_bounds 的东西)但是有没有一种非 Shiny 的方法来做到这一点。

m <- leaflet(width=500,height=400) %>% 
addTiles() %>%
setView(lng = -0.106831, lat = 51.515328, zoom = 18) %>%
addCircleMarkers(lng = -0.106831, lat = 51.515328)

我需要的是一个使用输入参数获取边界框的函数 m .

这能做到吗?

此外,查看对象时的参数值 m看起来不正确。

例如
> m$x$limits
$lat
[1] 51.51533 51.51533

$lng
[1] -0.106831 -0.106831

编辑

我认为javascript函数 map.getBounds()可能在这里有帮助......正如这里所建议的( Get the bounding box of the visible leaflet map? ),但不知道如何将其应用于我们的问题。对此的任何帮助将不胜感激。

最佳答案

如果你稍微调整一下 Jeremys 的原始答案,你实际上可以在没有 javascript 的情况下做到这一点:

可重现的示例:

library(magrittr)
library(leaflet)

m <- leaflet(width = 500,height = 400) %>%
addTiles() %>%
setView(lng = -0.106831, lat = 51.515328, zoom = 18) %>%
addCircleMarkers(lng = -0.106831, lat = 51.515328)
m
getBox <- function(m){
view <- m$x$setView
lat <- view[[1]][1]
lng <- view[[1]][2]
zoom <- view[[2]]
zoom_width <- 360 / 2^zoom
lng_width <- m$width / 256 * zoom_width
lat_height <- m$height / 256 * zoom_width
return(c(lng - lng_width/2, lng + lng_width/2, lat - lat_height/2, lat + lat_height/2))
}
getBox(m)

Shiny 你可以简单地使用:input$MAPID_bounds

可重现的示例:
library(shiny)
library(leaflet)
library(magrittr)

app <- shinyApp(

ui = fluidPage(leafletOutput('myMap')),

server = function(input, output) {

output$myMap = renderLeaflet({
leaflet() %>%
addTiles() %>%
setView(
lng = 50,
lat = 10,
zoom = 17
)
})

observeEvent(input$myMap_bounds, {
print(input$myMap_bounds)
})

}
)

更多信息请看这里: https://rstudio.github.io/leaflet/shiny.html .

这是一个 javscript 版本(初始解决方法)。对于更好的版本,请参见上文。
  leaflet() %>% addTiles()  %>% 
setView(lng = -0.106831, lat = 51.515328, zoom = 18) %>%
addEasyButton(easyButton(
states = list(
easyButtonState(
stateName="unfrozen-markers",
icon="ion-toggle",
title="Get Bounding box",
onClick = JS("
function(btn, map) {
alert(map.getBounds().getEast());
alert(map.getBounds().getWest());
alert(map.getBounds().getNorth());
alert(map.getBounds().getSouth());
}")
)
)
)
)

关于r - 从 R 中的传单获取边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44179257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com