html2canvas不适用于Google Maps Pan

Aar*_*der 22 javascript google-maps html2canvas

我正在使用html2canvas将我的在线地图保存为图像(请参阅另存为图像链接).我在Firefox,Chrome和Opera中尝试过它.

如果您不更改默认地图,它往往会更频繁地工作.如果缩放然后平移地图,则不太可能工作.地图将平移,但html2canvas将使用旧的中心点和地图边界.并且html2canvas将无法加载新地图边界的地图图块.

地图平移正确,但html2canvas使用旧的中心点和地图边界.为什么是这样?

为了支持从不同的域获取图像,我有以下设置:

useCors: true;
Run Code Online (Sandbox Code Playgroud)

我尝试了以下解决方案

- 手动更改地图类型.有时这会修复它.

- 触发浏览器调整大小事件 - 没用.

- 使用setTimeout()等待2000毫秒以确保加载切片 - 没用

- 使用代理(html2canvas_proxy_php.php) - 没用

- 使用谷歌地图空闲事件等待地图在保存前闲置 - 没用

mfi*_*aus 64

显然,问题似乎源于html2canvas无法渲染css变换,至少在chrome中(我只能在Chrome上重现问题,在OSX上).保存瓷砖的容器使用-webkit-transform.所以我们可以做的是获取容器移位的值,删除转换,分配lefttop从我们得到的值transform然后使用html2canvas.那么地图不会中断,我们在html2canvas完成后重置地图的css值.

所以我将它粘贴到您网站的javascript控制台中,似乎可以正常工作

//get transform value
var transform=$(".gm-style>div:first>div").css("transform")
var comp=transform.split(",") //split up the transform matrix
var mapleft=parseFloat(comp[4]) //get left value
var maptop=parseFloat(comp[5])  //get top value
$(".gm-style>div:first>div").css({ //get the map container. not sure if stable
  "transform":"none",
  "left":mapleft,
  "top":maptop,
})
html2canvas($('#map-canvas'),
{
  useCORS: true,
  onrendered: function(canvas)
  {
    var dataUrl= canvas.toDataURL('image/png');
    location.href=dataUrl //for testing I never get window.open to work
    $(".gm-style>div:first>div").css({
      left:0,
      top:0,
      "transform":transform
    })
  }
});
Run Code Online (Sandbox Code Playgroud)


Dan*_*rna 7

在谷歌地图更新后,mfirdaus的解决方案停止工作,新的解决方案是这样的:

var transform = $(".gm-style>div:first>div:first>div:last>div").css("transform")
var comp = transform.split(",") //split up the transform matrix
var mapleft = parseFloat(comp[4]) //get left value
var maptop = parseFloat(comp[5])  //get top value
$(".gm-style>div:first>div:first>div:last>div").css({ //get the map container. not sure if stable
  "transform": "none",
  "left": mapleft,
  "top": maptop,
})
Run Code Online (Sandbox Code Playgroud)

是相同的,但你需要改变de选择器

.gm-style>div:first>div

.gm-style>div:first>div:first>div:last>div

举手