簡體   English   中英

使用多層的OpenLayers 4.6.5的性能限制

[英]Performance limitations with OpenLayers 4.6.5 using several layers

我目前正在處理包含大量圖層(最多20/30)的GIS。 地圖以非常慢的方式渲染圖塊。

它以前是用OpenLayers 2.x編寫的,我們並沒有遇到這個性能瓶頸。

我們的圖層使用WMS源和圖塊,聲明如下

function createTileLayer(options){
    let source = new ol.source.TileWMS({
        url: serverURL, // Our GeoServer instance
        params: {
            'LAYERS': options.id
            'BGCOLOR': options.backgroundColor,
            'TRANSPARENT': options.transparent,
            'VERSION': options.version,
            'FORMAT': 'image/png'
        },
        serverType: 'geoserver',
        projection: 'EPSG:2100', // Managed by Proj4J
        transition: 0
    });

    let layerTile = new ol.layer.Tile({
        source: source,
        visible: options.visible,
    });

    return layerTile;
}

map聲明本身非常簡單:

let map = new ol.Map({
        target: document.getElementById('app'),
        layers: Layers, // All the layers we created before
        view: new ol.View({
            center: ol.proj.fromLonLat([5.497853028599662, 34.82203273834541]),
            zoom: 18,
            projection: 'EPSG:2100'
        }),
        loadTilesWhileAnimating: true,
        loadTilesWhileInteracting: true,
        renderer: 'canvas'
    });
}

這種方法的問題在於,瀏覽器似乎在繪制每個圖層上花費了太多時間。 以下是在Chrome上進行的一些測試的配置文件:

Chrome設定檔畫面

結果是幾乎無法使用的地圖。 我知道層數很多,但是問題不在OpenLayers 2.x中(或者至少性能更好)。

一種可能的解決方法是僅使用一個TileWMS源並將其所有圖層的列表傳遞給其“圖層”參數。 由於GeoServer可以完成所有渲染工作,因此極大地提高了速度,但是我們卻失去了諸如管理每一層透明度的功能。

我以這種方式在查詢/渲染圖塊時可能做錯了我不知道的事情。 謝謝你的幫助。

最可能的問題是您沒有達到GeoWebCache(這是GeoServer)用來渲染圖塊的圖塊邊界。 請參閱手冊中的此頁面 ,該頁面列出了必須滿足的標准才能起作用。

更好的方法是使用WMTS請求 (在客戶端和服務器之間商定切片網格等,而不用猜測)。 您甚至可以通過要求getCapabilities文檔來使OpenLayers進行協商。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM