2015-04-07 39 views
2

我想加載與openlayers 3 geojson數據。這是很多的日期,所以我只想傳輸所需的數據。我通過將當前視圖的解析和範圍傳遞給web服務來歸檔。這是我的代碼到目前爲止:openlayers加載策略geojson與不同的分辨率

var vectorSource = new ol.source.ServerVector({ 
    format: new ol.format.GeoJSON(), 
    loader: function(extent, resolution, projection) { 
     var url = 'data.json?e=' + extent.join(',') + '&r=' + resolution; 
     $.ajax({ 
      url: url, 
      success: function(data) { 
       vectorSource.addFeatures(vectorSource.readFeatures(data)); 
      } 
     }); 
    }, 
    projection: 'EPSG:3857', 
    strategy: ol.loadingstrategy.bbox 
}); 

var vector = new ol.layer.Vector({ 
    source: vectorSource 
}); 

var map = new ol.Map({ 
    layers: [vector], 
    target: 'map', 
    view: new ol.View({ 
     center: [0, 0], 
     zoom: 0 
    }) 
}); 

但我的代碼只調用一次web服務。每次擴展程度(和/或分辨率)發生變化時,我必須使用哪種加載策略來調用Web服務?

+0

爲什麼你不嘗試所有三個,看看性能差異是什麼? http://openlayers.org/en/master/apidoc/ol.loadingstrategy.html – theoutlander

回答

4

ol.source.ServerVector不知道您爲不同的分辨率返回不同的結果。它會記住加載的區域,如果它「知道」其功能已加載,則不加載該區域。

你的例子最初加載全世界(zoom=0),因此不需要額外的負載。替換zoom=0通過讓我們說zoom=10:現在縮小將觸發負載,因爲更大的面積不是已知的,而放大將而不是觸發負載。

要重新加載每次更改的分辨率,您必須清除內存。 添加地圖後定義:

map.getView().on('change:resolution', function(evt){ 
    alert ('resolution changed'); 
    vectorSource.clear(); 
}); 

此代碼清除內存每次分辨率的變化,並強制將觸發的負載。