我正在使用带有 openstreetmaps 的传单在 Ext js 面板上生成地图。
由于地图在 openstreet 地图中以图块的形式出现,因此我需要将这些图块组合起来以创建单个图像以另存为图像。
问问题
5447 次
3 回答
1
您可以使用此资源将 Leaflet Map 保存为 PNG 文件
使用 Javascript 和 PHP 将传单地图保存到 PNG 示例
于 2013-03-07T09:20:58.487 回答
1
我使用所谓的Tile Stitching方法(服务器端)来执行此操作。步骤是:
在客户端收集文档中的所有平铺图像,例如使用 jQuery,您可以执行以下操作:
$('[class^="leaflet-tile leaflet-tile-loaded"]')
这将为您提供一个数组,其中包含地图瓦片的所有 img 元素。
获取图像的宽度和高度、x 和 y 以及 url 并放入您喜欢的数据结构
将数据结构发送到服务器上的函数,该函数将检索 url 并使用 x、y、width、height 属性将图像拼接在一起。
我从这篇与 openlayers 一起使用的文章中得到了这个想法:http: //trac.osgeo.org/openlayers/wiki/TileStitchingPrinting。在本文中,您将找到一个有效的 php 示例。使用 Leaflet 的 javascript 部分上方的信息应该不难。
于 2013-10-28T17:22:31.563 回答
0
这似乎对我有用:
http://www.yncoder.com/save-leaflet-map-as-image/
var images = container.getElementsByTagName('img');
for (var i = 0; i < images.length; i++) {
images[i].setAttribute('crossOrigin', 'anonymous');
images[i].src = images[i].src;
}
var canvas = document.getElementById('dumb');
var context = canvas.getContext('2d');
canvas.width = document.documentElement.clientWidth;
canvas.height = document.documentElement.clientHeight;
for (i = 0; i < images.length; i++) {
if (typeof images[i] != 'undefined') {
context.drawImage(images[i],
images[i].style.left.slice(0, -2), // slice off 'px' from end of str
images[i].style.top.slice(0, -2),
images[i].clientWidth,
images[i].clientHeight
);
}
}
window.open(canvas.toDataURL());
于 2016-02-04T06:43:13.557 回答