一、问题产生

在openlayer开发的过程中,涉及到缩略图的生成。当地图上的所有图层全部加载完毕时,执行生成缩略图业务代码。

二、问题解决

寻找源码,找到如下解决方案:

1 判断地图全部瓦片加载完毕

map.tileQueue_.getTilesLoading() == 0

这里可以设置一个interval,判断如上条件即可。

2 判断某个图层的瓦片加载完毕

这里需要为某个layer设定一个unique_id。然后将unique_id传递到加载的tile对象中去。
假如某layer如下:

let wmtsLayer = new ol.layer.Tile({source: new ol.source.WMTS({url: url,projection: projection, //数据的投影坐标系tileGrid: tileGrid,format: "image/png",crossOrigin: 'anonymous'})
});

手动为wmtslayer打上一个标识:

const guid =  guid();//--生成一个随机id
wmtsLayer.unique_seid = guid;

CanvasTileLayerRenderer类中的manageTilePyramid函数里创建tile的地方加上一句代码:


这样,将layer层的unique_seid 赋值给加载的tile。然后通过判断tile的state来判断所有该Layer的瓦片是否全部加载:

const one_id = guid;const all_loaded = map.tileQueue_.elements_.every((f) => {return f[0] && f[0].unique_seid && f[0].unique_seid === one_id  && f[0].state == 2;
})

state ==2即意味着瓦片加载成功。上述代码可判断id == guid的layer的瓦片是否全部加载成功。

注意,最好先判断瓦片已经开始加载。当加载队列为0时,上述表达式返回true

三、结语

openlayer源码精简有条理。逻辑清晰,多看看源码可以学习到很多东西。

2022.6.3日(长期有效):打个广告,苏州华为终端BG面向社会招聘人才,Java /C C++ / Python / Javascript 。有兴趣来苏州的同学们 可以加我V 15850277051 ,走内推流程,有问必答!

openlayer判断瓦片全部加载完毕相关推荐

  1. js 判断iframe是否加载完毕

    js 判断iframe是否加载完毕 CreationTime--2018年9月13日15点30分 Author:Marydon 1.javascript实现 window.onload = funct ...

  2. 【转】JS判断SWF,JPG加载完毕、兼容(Activex,plugIn)所有浏览器

    JS判断SWF,JPG加载完毕.兼容(Activex,plugIn)所有浏览器 这里主要说下监听SWF的加载. 网上流传已久的监听方法,只能在IE(Activex插件下)下实现.在使用plugin的浏 ...

  3. JavaScript 判断 DOM 何时加载完毕

    处理HTML DOM文档存在一个难题是,JavaScript可以在DOM完全加载之前执行,这会给你的代码引发不少的潜在问题.浏览器的渲染和操作顺序大致如下列表: HTML解析完毕 外部脚本和样式表加载 ...

  4. selenium web自动化判断页面元素加载完毕

    主要方便以后用到时查阅,侵删! 三种等待方法: 1.强制等待sleep(xx) 强制等待,不管你浏览器是否加载完了,程序都得等待,时间一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样 ...

  5. 判断iframe是否加载完毕的方法(兼容ie和Firefox)

    来源:http://www.cnblogs.com/lovko/archive/2009/01/04/1368013.html < head > < meta http-equiv ...

  6. JS判断图片是否加载完毕

    /*** @function Determine if the image has been loaded.* @param img,callback*/ function imgIsLoaded(i ...

  7. 如何使用selenium webdriver来判断一个网页加载完毕

    想实现一个加载网页计时的功能,如何用selenium webdriver实现判断一个网页加载完毕? ================================================== ...

  8. 判断iframe是否加载完成的完美方法

    判断iframe是否加载完成的完美方法 需求:vue某个组件引入iframe,需要判断iframe是否加载完毕,不然用户进入是白屏加载中 created (){ 使用加载提示框 }mounted () ...

  9. JS判断页面加载完毕

    //JS判断页面加载完毕,再隐藏加载效果层,一个简单的JS加载效果.document.onreadystatechange = function () {if (document.readyState ...

最新文章

  1. 大型互联网应用中的日志系统
  2. 公司网络推广为你解答蜘蛛为什么有抓取网页却没收录?
  3. mybatis中getMapper是怎么通过动态代理得到dao接口的实现类并执行mapper文件sql语句的
  4. tf input layer
  5. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc
  6. 地图 c-suite_C-Suite的模型
  7. C++离航篇——内存的申请释放
  8. PHP中4个包含文件方法的差异
  9. 【4G模块】-有方科技Neoway-N720
  10. Android开发——数据库框架Suger遇到的大坑(Gson和Suger的复用Bean请见“大坑三”)
  11. kubeadm更改配置
  12. 计算机进位制转换方法,进位计数制及其转换方法过程详解
  13. 口袋超萌服务器维护中,平民全攻略1
  14. 基金老鼠仓调查云端稽查发力 大数据堪比淘宝
  15. (一)买基金的基础知识
  16. 有理数的四则运算 C、java
  17. Mysql事务隔离机制
  18. 【乐于折腾】黑苹果 - 修炼之路
  19. 小程序中图片点击预览、长按识别图中二维码的问题
  20. java计算机毕业设计中小型超市管理系统源码+数据库+系统+lw文档+mybatis+运行部署

热门文章

  1. Exceeded checkpoint tolerable failure threshould【记一次flink上线异常】
  2. VUE中导出Excel功能的实现
  3. java x的平方怎么打出来_java 中的输入输出
  4. Laravel + Elasticsearch 实现中文搜索
  5. linux图形化界面进不去的问题(startx命令报错bash:startx command not found) 经验之谈
  6. 运维python要掌握到什么程度_《运》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  7. Spark SQL的selectExpr用法
  8. python之简介及入门
  9. c语言函数写巴德歌赫猜想,高三励志演讲稿范文
  10. python中__init_subclass__方法用法详解