【发布时间】:2017-07-17 22:19:58
【问题描述】:
我使用的是 Mapbox GL JS 0.32 版。有没有办法将地图导出为高分辨率 PNG 或 PDF?
显然,我可以截图,但如果有更正式的方式会很好。
我找到了this repo,但它看起来很旧并且不清楚它是如何工作的。
我尝试使用the preserveDrawingBuffer option:
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v9',
minZoom: 4,
maxZoom: 14,
center: [-2.0, 53.3],
preserveDrawingBuffer: true
});
console.log(map.getCanvas().toDataURL());
这会在控制台中输出一个长数据 URL,但将其复制并粘贴到 a base64 converter 似乎只会产生一个空图像。
更新:这是我的新代码,完整:
mapboxgl.accessToken = 'pk.eyXXX';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v9',
minZoom: 4,
maxZoom: 14,
center: [-2.0, 53.3],
preserveDrawingBuffer: true
});
var dpi = 300;
Object.defineProperty(window, 'devicePixelRatio', {
get: function() {return dpi / 96}
});
map.on('load', function () {
var content = map.getCanvas().toDataURL();
console.log(content)
});
控制台的输出是这样的:http://pastebin.com/raw/KhyJkJWJ
【问题讨论】:
-
嗯,它正在工作。
content的控制台输出在我看来像爱尔兰、英国和西欧。大多数浏览器都可以通过在地址栏中简单地 c&p 来查看它。要保存 png,请使用toBlob()而不是toDataURL()。最后同样重要的是:要以高分辨率渲染该地图,请查看 github.com/mpetroff/print-maps 了解详细信息。 -
谢谢。我最终发现 Firefox 会这样做,但 Chrome 不会——因此我很困惑!
-
有没有办法做到这一点'无头'我不需要在浏览器中绘制任何实际地图,我只想循环通过一堆图层拍摄快照以用作缩略图/预览?
标签: mapbox mapbox-gl-js