在矢量 openlayer 图层上设置 maxFeatures

Setting maxFeatures on vector openlayer layer

所以我使用 Openlayers 3.9.0 并使用 loader 从 Geoserver 获取矢量图层。这是当前有效的代码。

    var sourceVector = new ol.source.Vector({
        format: new ol.format.GeoJSON(),
        loader: function (extent) {
            $.ajax('http://localhost:5550/geoserver/mymap/wfsservice=WFS&version=1.0.0&request=GetFeature&typeName=mymap:mylayer&outputFormat=application/json', 
            {type: 'GET'})
            .done(      
             function(response) {
                        var geojsonFormat = new ol.format.GeoJSON({});
                        sourceVector.addFeatures(geojsonFormat.readFeatures(response,{dataProjection :projection,featureProjection : projection}));
                    })
            .fail(function () {alert("BAD");});
        },
        strategy: new ol.loadingstrategy.tile(ol.tilegrid.createXYZ({maxZoom: 20}))
    });

通过为我的 url 设置 maxFeatures (...&maxFeatures=50&...),我无法获得所有功能。这是否意味着如果我放大我会看到更多特征,如果我缩小我会看到更少? maxFeatures 是否与 bbox 相关并根据当前地图视图和缩放级别呈现要素?或者这不是概念?因为在我的例子中,我总是看到固定数量的特征。

谢谢

ol.source.Vector 的加载器函数被调用,带有范围、分辨率和投影。语义期望是加载器函数负责加载该范围内的所有功能。

ol.source.Vector 维护所有已加载范围的历史记录,并且不会尝试加载已加载范围内的范围。

因此,如果您在低缩放级别使用 tile 加载策略,并且您的 maxFeatures 导致某些功能被忽略,则放大不会使它们出现(因为加载该范围应该父图块加载已经完成)。

因此,将 WFS 参数 maxFeaturesol.source.Vector 一起使用通常不是一个好主意。如果您确实需要限制每个请求的要素数量,请考虑将图层限制为更高的缩放级别或为每个加载程序调用发出多个请求。

此外,您的加载程序代码不使用 extent 参数,因此每个请求都相同。您的加载程序唯一的责任是在给定范围内加载功能。如果您想独立于位置加载所有功能,请使用 all 加载策略。