【发布时间】:2018-10-10 01:22:06
【问题描述】:
我有一张带有大量 geojson 的传单地图。我希望能够将地图图像导出为 png。我已经尝试过leaflet-image插件,它可以导出基本地图,我也尝试过(独立地)html2canvas库将地图div的内容输出到png文件。
不幸的是,使用leaflet-image 输出只显示背景层(地图)而不显示任何geojson 区域,而使用html2canvas 输出结果显示层而不显示背景图。
我认为 Leaflet-image 插件不可行,因为它有太多限制。它需要将所有图层渲染到画布上,但这样做会导致性能下降——它似乎无法处理这么多的地理区域。我对服务器也没有太多的控制权,并且没有安装nodejs。
html2canvas 更有希望。使用它和文件保护程序,我能够输出完整的图像和区域,如下所示:
html2canvas(myMap, {
allowTaint:false,
useCORS: true,
width: 650,
height: 500,
}).then(canvas => {
canvas.toBlob((blob) => {
saveAs(blob, "my-map.png");
});
});
这非常有效,除了一个问题 - 区域在画布上呈现在错误的位置。也就是说,区域偏移是错误的。这是一个例子。地图的底部和右侧应覆盖有彩色等值线区域的边缘:
如何让区域在地图上正确渲染,而不是被剪辑到错误的位置?
编辑:我查看了 html2canvas 网站here 上的一个问题,看起来很有希望。我的似乎没有这样的转换问题,但是有人遇到了我认为是层偏移问题的问题。我在这里实现了他们的解决方案:
function redraw() {
var lat_tmp = map.getCenter().lat;
var lng_tmp = map.getCenter().lng;
map.setView([-66.22149259832975, -1.142578125]);
setTimeout(function () {
waitForTilesToLoad()
}, 50000);
map.setView([lat_tmp, lng_tmp]);
}
但它也没有工作,所以我仍在努力解决这个问题。我遇到的并不是图层偏移问题,而是图层裁剪问题。
【问题讨论】:
标签: javascript angular leaflet html2canvas