【问题标题】:openlayers loading strategy geojson with different resolutions不同分辨率的openlayers加载策略geojson
【发布时间】:2015-06-12 10:22:40
【问题描述】:

我正在尝试使用 openlayers 3 加载 geojson 数据。这是很多日期,所以我只想传输所需的数据。我通过将当前视图的结果和范围传递给 Web 服务来归档它。到目前为止,这是我的代码:

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 服务?

【问题讨论】:

标签: javascript openlayers-3 geojson loaddata


【解决方案1】:

ol.source.ServerVector 不知道您针对不同的分辨率返回不同的结果。它会记住已加载的区域,如果它“知道”其要素已加载,则不会加载区域。

您的示例最初加载了整个世界 (zoom=0),因此不需要额外的加载。将zoom=0 替换为zoom=10:现在缩小将触发加载,因为更大的区域未知,而放大不会触发加载。

要在每次更改分辨率时重新加载,您必须清除内存。 在你的地图定义之后添加:

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

每次分辨率更改时,此代码都会清除内存并强制触发加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多