【问题标题】:Is It Possible To Render Only Those Layers Inside Of Viewport?是否可以只渲染视口内的那些图层?
【发布时间】:2019-10-16 15:12:46
【问题描述】:

由于我在 OpenLayers 地图上有一些“重”层,因此加载它需要相当长的时间。我正在取消 TileWMS 源。当我放大到特定区域时,每次我都必须等待所有图层加载完毕才能正常与地图交互。有没有办法只在地图的可见区域重新渲染图层,也就是如果不在视图中就不会进入预渲染和后渲染?

【问题讨论】:

    标签: openlayers


    【解决方案1】:

    层中有一个名为strategy 的选项。它是关于 OpenLayers 如何从 GeoServer 请求数据的。默认strategymodule:ol/loadingstrategy~all 请求整个层。
    但是还有另一个加载策略选项,称为module:ol/loadingstrategy.bbox。通过在图层中为策略设置此值,您可以请求地图的当前范围。有关 OpenLayers 示例,请参阅 here

    在为您的图层设置 bbox 选项后,您应该更改加载功能或图层 URL。例如上面提到的你应该为源 URL 设置一个只加载当前范围的函数。

    var vectorSource = new VectorSource({
      format: new GeoJSON(),
      url: function(extent) {
        return 'https://ahocevar.com/geoserver/wfs?service=WFS&' +
            'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +
            'outputFormat=application/json&srsname=EPSG:3857&' +
            'bbox=' + extent.join(',') + ',EPSG:3857'; // giving current extent to load data
      },
      strategy: bboxStrategy // telling openlayers to not load all data!
    });
    

    【讨论】:

    • 你知道 TileWMS 是否存在类似的东西吗?
    • @jssql tileWMS 也有这个选项。检查参数选项here
    • 如果你在params里面引用bbox,它被写成是动态设置的。在矢量图层中没有找到类似策略的选项。
    • 在 tileWMS 图层中,数据作为切片加载。所以它不会加载整个数据。正如您提到的 bbox 动态设置,这意味着 OpenLayers 和 GeoServer 会自动处理高效的切片加载。如果您在加载时遇到问题/速度低,则其他地方可能还有另一个问题。我不确定,但某些缓存或交互可能会导致此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多