我是一个Shiny应用程序的开发者,正在尝试使用leaflet包绘制多边形。以下是我希望得到的非应用程序输出:
然而,将其制作成Shiny应用程序却很困难——多边形被绘制后,一旦绘制新的多边形,它们就会逐个消失。以下是我使用的代码。您需要单击“Draw”才能绘制多边形。 请注意: 1-当绘制绿色多边形(3秒后)时,红色多边形消失了 2-这里的多边形是三角形,而上面的代码中它们是矩形。 3-如果您查看下面server.R中的代码,我实际上不得不翻转'lat'和'lon'列才能得到正确的图片。 ui.R:
data <- list(
beam1 = data.frame(lat = c(-115,-125, -125, -115),
lon = c(32, 32, 45,45)),
beam2 = data.frame(lat = c(-100, -111, -111, -100),
lon = c(42, 42, 50,50))
)
dataTemp <- do.call(rbind, lapply(data, function(x) rbind(x, NA)))
library(leaflet)
m = leaflet() %>% addTiles()
m %>%
addPolygons(
dataTemp[,"lat"],
dataTemp[,"lon"],
color = c('red', 'green'), weight = 3
)
然而,将其制作成Shiny应用程序却很困难——多边形被绘制后,一旦绘制新的多边形,它们就会逐个消失。以下是我使用的代码。您需要单击“Draw”才能绘制多边形。 请注意: 1-当绘制绿色多边形(3秒后)时,红色多边形消失了 2-这里的多边形是三角形,而上面的代码中它们是矩形。 3-如果您查看下面server.R中的代码,我实际上不得不翻转'lat'和'lon'列才能得到正确的图片。 ui.R:
library(shiny)
library(leaflet)
shinyUI(navbarPage("Beams", id="nav",
tabPanel("Interactive map",
div(class="outer",
leafletMap("map", "100%", 650,
options = list(center = c(37.45, -93.85), zoom = 4)),
actionButton("drawPoints", "Draw")
)
)
))
server.R:
library(shiny)
library(leaflet)
data <- list(
beam1 = data.frame(lat = c(-115,-125, -125, -115),
lon = c(32, 32, 45,45)),
beam2 = data.frame(lat = c(-100, -111, -111, -100),
lon = c(42, 42, 50,50))
)
# server activity
shinyServer(function(input, output, session) {
map <- createLeafletMap(session, "map")
observe({
if(input$drawPoints == 0) {
return(NULL)
} else {
map$clearShapes()
for (i in seq_along(data)) {
map$addPolygon(
data[[i]][,"lon"], # - notice, i had to change lat and lon
data[[i]][,"lat"],
layerId=c("1"),
list( fillOpacity=0.4),
list(color = c('red','green')[i])
)
Sys.sleep(3) # - this is to see first (red) polygon
}
}
})
})
任何想法都将不胜感激!