用cesium加载超图得wms服务慢解决方法

今天在用cesium加载超图iserver发布的大数据tiff影像发布成wms服务的时候,三维球上加载显示非常慢,通过浏览器调试查看网络,发现是一个请求长时间卡住导致。


image.png

把这个请求URL单独放到浏览器去访问还是慢,初步认为是iserver的问题,具体什么原因,可以反编译iserver源码加日志来排查。现在我先默认它有问题,如何快速解决该问题呢?我通过iserver自带的iclient发现浏览并不慢,继续定位发现cesium默认第一张瓦片的bbox范围较大。


image.png

难道是iserver由于这个原因导致的?通过对比其他二维客户端加载效果发现,其他客户端加载快,而且不是从最大bbox开始加载,而是只请求数据的bbox。
接下来就该看看cesium加载wms服务的逻辑了,发现数据如果是经纬度坐标,那么bbox会很大,想着能不能跳过前几张瓦片呢,看接口有requestImage方法可以获取瓦片信息,那么根据源码来重写不就可以了么,通过自己尝试修改后,发现跳过前面几级,加载速度快了许多。
下面我粘贴自己修改方法,方便各位解决类似问题。


 imageProvider.requestImage = function (x, y, level, request) {
        if (level <= 5) {
          //这里就是跳过前面5级,根据自己需要设置
          return createImageBitmap(this, 10, 10, 100, 100);
        }
         //下面代码是cesium源码抄录过来的
        var result;
        var timeDynamicImagery = imageProvider._timeDynamicImagery;
        var currentInterval;
        if (Cesium.defined(timeDynamicImagery)) {
          currentInterval = timeDynamicImagery.currentInterval;
          result = timeDynamicImagery.getFromCache(x, y, level, request);
        }
        if (!Cesium.defined(result)) {
          var dynamicIntervalData = Cesium.defined(currentInterval) ? currentInterval.data : undefined;
          var tileProvider = imageProvider._tileProvider;
          if (Cesium.defined(dynamicIntervalData)) {
            tileProvider._resource.setQueryParameters(dynamicIntervalData);
          }
          result= tileProvider.requestImage(x, y, level, request);
        }
        if (Cesium.defined(result) && Cesium.defined(timeDynamicImagery)) {
          timeDynamicImagery.checkApproachingInterval(x, y, level, request);
        }
        return result;
      }

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容