Only render and cache tiles that have features

This commit is contained in:
ahocevar
2013-06-23 15:52:31 +02:00
parent 4392feef1b
commit 3fc4fc3eb8
@@ -406,7 +406,7 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame =
deferred = false, deferred = false,
dirty = false, dirty = false,
i, geomFilter, tileExtent, extentFilter, type, i, geomFilter, tileExtent, extentFilter, type,
groups, group, j, numGroups; groups, group, j, numGroups, featuresObject, tileHasFeatures;
for (x = tileRange.minX; x <= tileRange.maxX; ++x) { for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
for (y = tileRange.minY; y <= tileRange.maxY; ++y) { for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
tileCoord = new ol.TileCoord(z, x, y); tileCoord = new ol.TileCoord(z, x, y);
@@ -420,17 +420,22 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame =
tileExtent[2] -= tileGutter; tileExtent[2] -= tileGutter;
tileExtent[3] += tileGutter; tileExtent[3] += tileGutter;
extentFilter = new ol.filter.Extent(tileExtent); extentFilter = new ol.filter.Extent(tileExtent);
tileHasFeatures = false;
for (i = 0; i < numFilters; ++i) { for (i = 0; i < numFilters; ++i) {
geomFilter = filters[i]; geomFilter = filters[i];
type = geomFilter.getType(); type = geomFilter.getType();
if (!goog.isDef(featuresToRender[type])) { if (!goog.isDef(featuresToRender[type])) {
featuresToRender[type] = {}; featuresToRender[type] = {};
} }
goog.object.extend(featuresToRender[type], featuresObject = layer.getFeaturesObject(new ol.filter.Logical(
layer.getFeaturesObject(new ol.filter.Logical( [geomFilter, extentFilter], ol.filter.LogicalOperator.AND));
[geomFilter, extentFilter], ol.filter.LogicalOperator.AND))); tileHasFeatures = tileHasFeatures ||
!goog.object.isEmpty(featuresObject);
goog.object.extend(featuresToRender[type], featuresObject);
}
if (tileHasFeatures) {
tilesOnSketchCanvas[key] = tileCoord;
} }
tilesOnSketchCanvas[key] = tileCoord;
} else { } else {
dirty = true; dirty = true;
} }