r - 如何将shapefile上传到Shiny App

标签 r shiny leaflet shapefile

我试图弄清楚如何使用 Shiny App,用户可以通过 fileInput 提交 shapefile,然后将其映射到传单 basemap 上。我被困在 server.R 脚本上,不确定如何处理用户提交的 shapefile 并将其转换为空间数据框对象。

最佳答案

这在 Ubuntu Shiny 服务器中对我有用。

#You need a folder with write permissions
ruta_conpermiso= "/srv/shiny-server/app"

substrRight <- function(x, n){
  substr(x, nchar(x)-n+1, nchar(x))
   }

ui <- fluidPage(
    column(10,
    fileInput(inputId = "shp", label = "Importar un Shape :", multiple = TRUE, 
   accept = c('.shp', '.dbf','.sbn', '.sbx', '.shx', '.prj')),
  verbatimTextOutput("value"),
  tableOutput("finalizado"),
   )
  )

server_v2 <- function(input, output, session) {
     uploadShpfile <- reactive({
         if (!is.null(input$shp)) {
            shp <<- input$shp
                for(i in (1:length(shp$datapath))){
                print(i)
                ruta_temp<<-shp$datapath[i]
                sub<-str_split(as.character(ruta_temp), "/",n=3)
                #ruta archivo
                sub1<-str_split(as.character(ruta_temp), paste("/",as.character(i- 
                1),".",sep=""),n=3)
                ruta_archivo<-sub1[[1]][1]
                #nombre archivo
                nombre_archivo<-sub[[1]][3]
          
                #nuevo nombre archivo
               nuevo_nombre<-gsub(as.character(i-1),"shapetemp",nombre_archivo)
          
               #nuevo nombre
               #nueva_dir<-paste(ruta_conpermiso,nuevo_nombre,sep="/")
               nueva_dir<-paste(ruta_conpermiso)
          
               #copio el archivo el directorio de trabajo
               file.copy(ruta_temp, nueva_dir)
          
               #Lo renombro
               #nombre original
               nombre_archivo<- substrRight(nombre_archivo, 5)
               nombre_org<<-paste(ruta_conpermiso,nombre_archivo,sep="/")
               #nombre final
               nuevo_nombre<-substrRight(nuevo_nombre, 13)
               nombre_final<<-paste(ruta_conpermiso,nuevo_nombre,sep="/")
                                 
               file.copy(nombre_org, nombre_final)
           }
        

        #aca armo el shapefile
        if(1 == 1){output$value <- renderText({paste(nombre_final)})
                           try(shapefile<<- 
        readOGR(paste(ruta_conpermiso,"shapetemp.shp",sep="/")),silent=T)
                           if (!exists("shapefile")){ output$value <- 
        renderText({"No se puede abrir el archivo"})}
                           if (exists("shapefile")) { output$finalizado <- 
        renderTable(shapefile@data)}
                          }
             }  
       })
observeEvent(input$shp, {
     uploadShpfile()
    })
} 

shinyApp(ui=ui, server=server_v2)
我希望这很有用。此致。

关于r - 如何将shapefile上传到Shiny App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45337936/

相关文章:

r - 对象中的缺失值 - R 中的随机森林混淆矩阵

根据R中的多个条件删除数据框中的行

r - 无法将 selectInput 传递到 r Shiny 的输出$表摘要

jquery - 检测Leaflet Map是否处于全屏模式

leaflet - Nuxt Leaflet,更改图 block 层请求不正确的图 block

r - 在 5 分钟内计算出现次数的更快方法?

r - 在面向对象的 R 编程中,什么是 "active binding"?

r - 根据另一个 selectInput 的选择来过滤一个 selectInput?

r - 添加悬停效果,例如一个(大)绘图表的工具提示?

javascript - 如何使用 Leaflet 从 MapBox 上现有的 Tileset 获取几何图形(点)?