所以我使用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
相关,并根据当前地图视图和缩放级别呈现要素?或者这不是概念?因为在我的情况下,我总是看到固定数量的功能。
由于
答案 0 :(得分:3)
使用范围,分辨率和投影调用ol.source.Vector
的加载程序函数。语义期望是加载器函数负责加载该范围内的所有特征。
ol.source.Vector
维护所有已加载扩展区的历史记录,并且不会尝试加载已加载扩展区内的扩展区。
因此,如果您在低缩放级别使用tile
加载策略,并且maxFeatures
导致某些功能被忽略,则放大将不会显示它们(因为加载该范围应该已经有已完成父级瓷砖加载)。
因此,使用带有maxFeatures
的WFS参数ol.source.Vector
通常是个坏主意。如果您确实需要限制每个请求的功能数量,请考虑将图层限制为更高的缩放级别,或者为每个加载器调用发出多个请求。
此外,您的加载程序代码不使用extent
参数,使每个请求都相同。您的加载器唯一的责任是加载给定范围内的功能。如果您想要独立于其所在位置加载所有功能,请使用all
加载策略。