在矢量开放层上设置maxFeatures

时间:2015-10-19 11:37:42

标签: openlayers-3

所以我使用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}))
    });

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

由于

1 个答案:

答案 0 :(得分:3)

使用范围,分辨率和投影调用ol.source.Vector的加载程序函数。语义期望是加载器函数负责加载该范围内的所有特征。

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

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

因此,使用带有maxFeatures的WFS参数ol.source.Vector通常是个坏主意。如果您确实需要限制每个请求的功能数量,请考虑将图层限制为更高的缩放级别,或者为每个加载器调用发出多个请求。

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