javascript - 在 Angular 5 中将带有 geojson 层的 Leaflet map 导出为 png

标签 javascript angular leaflet html2canvas

我有一张包含大量 geojson 的传单 map 。我希望能够将 map 图像导出为 png。我试过 leaflet-image 插件,它导出 basemap ,我也试过(独立地)html2canvas 库将 map div 的内容输出到 png 文件。

不幸的是,使用 leaflet-image 输出只显示背景层( map )而不显示任何 geojson 区域,而使用 html2canvas 输出结果显示层而不显示背景 map 。

我认为 leaflet-image 插件不可行,因为它有太多限制。它需要将所有层都渲染到 Canvas 上,但这样做会导致性能下降——它似乎无法处理如此多的地理区域。我对服务器也没有太多控制权,那里没有安装 nodejs。

html2canvas 更有前途。使用它和文件保护程序,我能够输出完整的图像和区域,如下所示:

html2canvas(myMap, {
            allowTaint:false,
            useCORS: true,
            width: 650,
            height: 500,

        }).then(canvas => {
            canvas.toBlob((blob) => {
                saveAs(blob, "my-map.png");
            });
        });

除一个问题外,这工作得很好——区域在 Canvas 上呈现在错误的位置。即区域偏移量错误。这是一个例子。 map 的底部和右侧应该用彩色等值区域覆盖到边缘: leaflet image with regions, clipped

如何让区域在 map 上正确呈现,而不是被裁剪到错误的位置?

编辑:我查看了 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]);
}

但是还是不行,所以我还在努力解决这个问题。我遇到的并不是图层偏移问题,而是图层裁剪问题。

最佳答案

最近有同样的问题,在尝试管理 html2canvas 时也转到了相同的引用主题。

在我的例子中(也许你也是), map 是动态的并且包含太多的图 block 和元素类型(市场集群、饼图等)。它被 CraigVA 提供的技巧搞砸了。

最后,我尝试了其他几个插件,发现这个非常令人满意:

Leaflet Easy Print

没有故障,干净的 png 导出。

关于javascript - 在 Angular 5 中将带有 geojson 层的 Leaflet map 导出为 png,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50092180/

相关文章:

leaflet - 传单路由机上的语言未切换为法语

javascript - 为什么 v-model 不适用于数组和 v-for 循环?

javascript - meteor mrgalaxy :stripe package not loading content security policy

缩放时传单形状移动

angular - ng 测试在 es6 的 typescript 编译上失败

javascript - 未使用平台浏览器动态提供程序

javascript - 如何确定哪个国家/州/地区/城市/地区位于传单多边形内 |长方形 |圆圈等

javascript - 在 Ionic 3 中使用 Http 获取 JSON 数据

javascript - jQuery 移动 : applying method selectmenu on multiple select fields

unit-testing - Angular 2 TestModuleMetadata 没有 EntryComponents 属性