我尝试使用ipyleaflet将数据可视化导出为PNG或任何其他文件格式,但我找不到有效的方法。例如,在folium中有map.save(path)。我的研究中是否有错过了ipyleaflet的图书馆或方法,这有助于我实现目标?
这是一些生成地图的示例代码
from ipyleaflet import *
center = [34.6252978589571, -77.34580993652344]
zoom = 10
m = Map(default_tiles=TileLayer(opacity=1.0), center=center, zoom=zoom)
m
我想将此地图导出为图像文件,而无需手动截取屏幕截图。
我找到了两个允许导出javascript活页地图的来源: https://github.com/aratcliffe/Leaflet.print和https://github.com/mapbox/leaflet-image
不幸的是我无法在python中使用它们。
答案 0 :(得分:3)
我的同事和我找到了ipyleaflet(python)图像导出的体面工作。下面是它的工作原理。导出需要folium库。此示例中的GeoJson数据已准备好样式属性:
import folium
map = folium.Map([51., 12.], zoom_start=6,control_scale=True)
folium.GeoJson(data).add_to(map)
map.save('map.html')
结果如下:
可以使用子进程调用在python(windows)中进一步处理html文件,从而生成PDF或PNG。我希望这会有所帮助,因为python的ipyleaflet doc几乎不存在。
答案 1 :(得分:3)
要生成HTML,可以使用ipywidgets
from ipywidgets.embed import embed_minimal_html
embed_minimal_html('map.html', views=[m])
如果要制作PNG,可以使用ipywebrtc,更具体地说:
或在代码中
from ipywebrtc import WidgetStream, ImageRecorder
widget_stream = WidgetStream(widget=m, max_fps=1)
image_recorder = ImageRecorder(stream=widget_stream)
display(image_recorder)
保存PNG:
with open('map.png', 'wb') as f:
f.write(image_recorder.image.value)
或转换为枕头图像以进行预处理:
import PIL.Image
import io
im = PIL.Image.open(io.BytesIO(image_recorder.image.value))