如何将 folium 地图直接保存到 google 驱动器
How to save folium map directly to google drive
我正在编写一个脚本,该脚本将每天自动更新 google 驱动器中的一些 folium 地图。
我让整个事情在本地正常工作,没有问题,除了一件事:因为这将每天在远程服务器上自动 运行,我不想将创建的地图保存在服务器,然后将它们上传到 google 驱动器。如果可能的话,我想将地图创建为内存中的某种文件对象,将它们上传到 google 驱动器,仅此而已……而不必在服务器上创建多个物理地图文件。这可能吗?如果是,如何?
这是我的代码,在放置标记和簇之后,我将地图保存为文件系统中的 html 文件(这是一个循环,因为我需要更新多个城市的地图):
folium.LayerControl().add_to(mymap)
mymap.add_child(MeasureControl())
mymap.render()
mymap.save('leads_'+city+'_'+code+'.html')
然后,对于每个地图,这是将 html 地图保存到 google 驱动器(使用 pydrive)的代码:
gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)
file1 = drive.CreateFile({'parents': [{'id': 'xxxfolder_idxxx'}]})
file1.SetContentFile('leads_'+city+'_'+code+'.html')
file1.Upload()
如我所说,这一切都很好,但我不想用映射文件使服务器文件系统饱和。
有没有一种方法可以做到这一点而不必先将地图保存在本地文件系统中?
如果你想直接将html文件保存到驱动器(不保存到本地),那么你可以试试这个:
file1 = drive.CreateFile({'parents': [{'id': 'xxxfolder_idxxx'}], 'mimeType': 'text/html', 'name': 'leads_'+city+'_'+code+'.html'})
# access the html string of the object and set it via SetContentString
file1.SetContentString(m.get_root().render())
file1.Upload()
参考:
我正在编写一个脚本,该脚本将每天自动更新 google 驱动器中的一些 folium 地图。
我让整个事情在本地正常工作,没有问题,除了一件事:因为这将每天在远程服务器上自动 运行,我不想将创建的地图保存在服务器,然后将它们上传到 google 驱动器。如果可能的话,我想将地图创建为内存中的某种文件对象,将它们上传到 google 驱动器,仅此而已……而不必在服务器上创建多个物理地图文件。这可能吗?如果是,如何?
这是我的代码,在放置标记和簇之后,我将地图保存为文件系统中的 html 文件(这是一个循环,因为我需要更新多个城市的地图):
folium.LayerControl().add_to(mymap)
mymap.add_child(MeasureControl())
mymap.render()
mymap.save('leads_'+city+'_'+code+'.html')
然后,对于每个地图,这是将 html 地图保存到 google 驱动器(使用 pydrive)的代码:
gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)
file1 = drive.CreateFile({'parents': [{'id': 'xxxfolder_idxxx'}]})
file1.SetContentFile('leads_'+city+'_'+code+'.html')
file1.Upload()
如我所说,这一切都很好,但我不想用映射文件使服务器文件系统饱和。 有没有一种方法可以做到这一点而不必先将地图保存在本地文件系统中?
如果你想直接将html文件保存到驱动器(不保存到本地),那么你可以试试这个:
file1 = drive.CreateFile({'parents': [{'id': 'xxxfolder_idxxx'}], 'mimeType': 'text/html', 'name': 'leads_'+city+'_'+code+'.html'})
# access the html string of the object and set it via SetContentString
file1.SetContentString(m.get_root().render())
file1.Upload()