从RShiny导出.kml或.kmz(使用Python)

dwbf0jvd  于 2022-12-06  发布在  Python
关注(0)|答案(1)|浏览(220)

这个问题困扰了我几个星期,我不知道如何让RShiny允许导出.kml或.kmz文件,特别是那些从Python包中创建的文件。
前天我终于弄明白了。我不知道如何给出答案,所以我将把它添加为其他可能遇到此问题的人的可接受答案。在我的故障排除过程中,我找不到任何有用的东西...所以希望这对下一个人有帮助。

kq0g1dla

kq0g1dla1#

为了解决这个问题,我几乎找遍了所有我能想到的地方,但是没有任何帮助。最后,我在R和Python两个方面反复试验代码,找到了这个问题。下面是我找到的解决方法(在RShiny中):
在ui中,只要确保有一个downloadButton,它的id就是你试图用downloadHandler导出的内容。在这个例子中,需要有两个:一个用于“download_kml”,另一个用于“download_kmz”。

server <- function(input,output) {

function_object <- reactive({python_class(args)})

kml_show_object <- reactive({function_object()$show_kml})

#------------------------------------------
# TO EXPORT .KML

output$download_kml <- downloadHandler(

    filename <- function() {
        'export.kml'
    },
    content <- function(file) {
        write(kml_show_object(), file)
    },
    contentType = 'application/vnd.google-earth.kml+xml'
    )

#------------------------------------------
# TO EXPORT .KMZ

output$download_kmz <- downloadHandler(
    filename <- function() {
        'export.kmz'
    },
    content <- function(file) {
        write(kml_show_object(), file)
    },
    contentType = 'application/vnd.google-earth.kmz'
    )
}

shinyApp(ui = ui, server = server)

这是使用Python中的simplekml包来创建一个kml对象。要让它正常工作(在R端),你不能只创建kml对象。R不知道该怎么做。你必须在Python代码中为kml.kml()分配一个变量。在这个例子中,它是一个名为'show_kml'的类变量,在R中本地分配给kml_show_object。
如果您需要有关生成kml对象的Python代码的帮助,我可以编辑此代码以包含它。
希望这对你有帮助!

相关问题