这个问题困扰了我几个星期,我不知道如何让RShiny允许导出.kml或.kmz文件,特别是那些从Python包中创建的文件。前天我终于弄明白了。我不知道如何给出答案,所以我将把它添加为其他可能遇到此问题的人的可接受答案。在我的故障排除过程中,我找不到任何有用的东西...所以希望这对下一个人有帮助。
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代码的帮助,我可以编辑此代码以包含它。希望这对你有帮助!
1条答案
按热度按时间kq0g1dla1#
为了解决这个问题,我几乎找遍了所有我能想到的地方,但是没有任何帮助。最后,我在R和Python两个方面反复试验代码,找到了这个问题。下面是我找到的解决方法(在RShiny中):
在ui中,只要确保有一个downloadButton,它的id就是你试图用downloadHandler导出的内容。在这个例子中,需要有两个:一个用于“download_kml”,另一个用于“download_kmz”。
这是使用Python中的simplekml包来创建一个kml对象。要让它正常工作(在R端),你不能只创建kml对象。R不知道该怎么做。你必须在Python代码中为kml.kml()分配一个变量。在这个例子中,它是一个名为'show_kml'的类变量,在R中本地分配给kml_show_object。
如果您需要有关生成kml对象的Python代码的帮助,我可以编辑此代码以包含它。
希望这对你有帮助!