Блестящий обходной путь для удаления данных из $finished при использовании EditMod в пакете mapEdit
Это крестовина из mapedit
выдает здесь страницу на github. Я пытаюсь создать блестящее приложение, которое позволяет пользователю строить подмножество данных после выбора полигонов с помощьюmapedit
пакет. Хотя я могу успешно построить данные, используяmapedit
, Я не могу смыть $finished
данные после удаления выбранных полигонов mapedit.
Это приводит к двум ошибкам, для которых мне еще предстоит определить обходной путь: 1) если график сворачивается, как показано на гифке ниже, появляется ошибка the argument is of length zero
и 2) если график не сворачивается, последний выбранный $finished
данные остаются без возможности удалить данные с графика.
Что можно сделать для решения этих проблем? В первую очередь это происходит, когда более двух полигонов нарисованы, а затем удалены. Хотя я думал, что будет реактивный обходной путь, до сих пор мне это не удалось.
Ниже приведен воспроизводимый пример из блога r- space mapedit - обновления в версии 0.2.0. В моем блестящем приложении я использую пакет mapedit для подмножества различных временных рядов с использованием идентификаторов объектов и построения графиков временных рядов. Я считаю, что основную проблему можно решить, используя воспроизводимый пример ниже.
library(sf)
# make the coordinates a numeric matrix
qk_mx <- data.matrix(quakes[,2:1])
# convert the coordinates to a multipoint feature
qk_mp <- st_multipoint(qk_mx)
# convert the multipoint feature to sf
qk_sf <- st_sf(st_cast(st_sfc(qk_mp), "POINT"), quakes, crs=4326)
# run select demo for the quake data
# we will need the qk_sf
# to test
# plot(qk_sf)
library(mapedit)
library(mapview)
library(shiny)
ui <- fluidPage(
fluidRow(
# edit module ui
column(6, editModUI("editor")),
column(
6,
h3("Boxplot of Depth"),
plotOutput("selectstat")
)
)
)
server <- function(input, output, session) {
# edit module returns sf
edits <- callModule(editMod, "editor", mapview(qk_sf)@map)
output$selectstat <- renderPlot({
req(edits()$finished)
qk_intersect <- st_intersection(edits()$finished, qk_sf)
req(nrow(qk_intersect) > 0)
boxplot(
list(
all = as.numeric(qk_sf$depth),
selected = as.numeric(qk_intersect$depth)
),
xlab = "depth"
)
})
}
shinyApp(ui, server)
Хотя я опубликовал это вместе с другими на странице проблем mapedit github и r-пространственной, я решил, что стоит посмотреть, есть ли решение, которое не требует исправления пакета. Я нашел два обходных пути для selectMod здесь и здесь, но исходный код editMod намного сложнее, поэтому адаптировать это решение мне не по силам.
Заранее большое спасибо, я изо всех сил пытался решить эту проблему в течение нескольких недель, и хотел бы решить эту проблему и закрыть этот проект.
2 ответа
Я нашел одно простое решение для решения этой проблемы. Мы должны очистить селектор многоугольника или прямоугольника, прежде чем сделать следующий выбор. Кроме того, если мы сначала не очистим выделение, ранее выбранные данные будут добавлены к следующему выбору.
Это решено на GitHub по адресу https://github.com/r-spatial/mapedit/issues/106.
remotes::install_github("r-spatial/mapedit")
решает проблему в исходном коде mapedit в ожидании исправления пакета.