Adding gutter when requesting features for a tile

By doing so, we avoid features being cut off when the symbolizer
causes it to be rendered across tile borders.
This commit is contained in:
ahocevar
2013-03-06 21:06:21 +01:00
parent 2af82abcda
commit 100c8a1cf4

View File

@@ -271,11 +271,13 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame =
var renderedFeatures = {}; var renderedFeatures = {};
var tilesToRender = {}; var tilesToRender = {};
// TODO make gutter configurable?
var tileGutter = 15 * tileResolution;
var tile, tileCoord, key, tileState, x, y; var tile, tileCoord, key, tileState, x, y;
// render features by geometry type // render features by geometry type
var filters = this.geometryFilters_, var filters = this.geometryFilters_,
numFilters = filters.length, numFilters = filters.length,
i, geomFilter, extentFilter, type, features, i, geomFilter, tileExtent, extentFilter, type, features,
groups, group, j, numGroups, deferred; groups, group, j, numGroups, deferred;
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) {
@@ -285,8 +287,12 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame =
if (this.tileCache_.containsKey(key)) { if (this.tileCache_.containsKey(key)) {
tilesToRender[key] = tileCoord; tilesToRender[key] = tileCoord;
} else if (!frameState.viewHints[ol.ViewHint.ANIMATING]) { } else if (!frameState.viewHints[ol.ViewHint.ANIMATING]) {
extentFilter = new ol.filter.Extent( tileExtent = tileGrid.getTileCoordExtent(tileCoord);
tileGrid.getTileCoordExtent(tileCoord)); tileExtent.minX -= tileGutter;
tileExtent.minY -= tileGutter;
tileExtent.maxX += tileGutter;
tileExtent.maxY += tileGutter;
extentFilter = new ol.filter.Extent(tileExtent);
for (i = 0; i < numFilters; ++i) { for (i = 0; i < numFilters; ++i) {
geomFilter = filters[i]; geomFilter = filters[i];
type = geomFilter.getType(); type = geomFilter.getType();