我在一个有角度的应用程序中实现了heremaps,并使用它通过wkhtmltopdf打印PDF,问题是我需要有一个可靠的事件来收听,以通知wkhtmltopdf我的地图已完全加载并准备打印。具体来说,在打印PDF时,某些图块要么未加载,要么仍处于模糊状态。
我尝试收听mapviewchangeend
事件,但未在图块加载时抛出该事件。我还尝试监听呈现引擎的render
事件,但是每次加载图块时都会引发一个事件,我不知道我应该等待多少个图块
// add a listener on the map ready event
this.map.getEngine().addEventListener("render", (event: H.util.Event) => {
if (this.map.getEngine() === event.target) {
map.mapReadyAction();
}
});
是否有一种可靠的方法来知道何时我的地图图块已满载并准备打印?
edit :使用评论中链接的帖子,我找到了一种可靠地计算已加载图块数量的方法。不幸的是,我找不到一种方法来确定地图需要加载的图块总数(代码中的getTileNumber()
)
this.nbLoadedTiles = 0;
this.map
.getBaseLayer()
.getProvider()
.addEventListener("update", () => {
this.nbLoadedTiles++;
console.log(`tile loaded : ${this.nbLoadedTiles}`);
if (this.nbLoadedTiles === this.getTileNumber()) {
console.log("All tiles loaded");
map.mapReadyAction();
this.nbLoadedTiles = 0;
}
});
谢谢!
答案 0 :(得分:0)
这不是可接受的答案,但这是我在等待适当解决方案时使用的解决方法:
我正在使用原始帖子中描述的“瓦片已加载”事件来启动计时器,如果在这段时间内未加载其他图块,我会认为地图已加载。
// add a listener on the map ready event
this.map
.getBaseLayer()
.getProvider()
.addEventListener("update", () => {
// a new tile was succesfully loaded: reset the timer
clearTimeout(this.tileTimer);
this.tileTimer = setTimeout(() => {
map.mapReadyAction();
}, DELAY_TILE_LOADED);
});
我以3s的延迟运行此程序,以便在最大可能具有完全加载的地图和可接受的延迟之间做出可接受的折衷。请注意,我的用户不是客户,所以等待3秒钟是可以的,但是对于在线应用程序,这可能是不可行的