Merge pull request #379 from stefslon/tile_margin

Add tileMargin option
This commit is contained in:
Petr Sloup 2019-10-02 12:26:49 +02:00 committed by GitHub
commit f77ccd06af
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View file

@ -27,7 +27,8 @@ Example::
"maxSize": 2048,
"pbfAlias": "pbf",
"serveAllFonts": false,
"serveStaticMaps": true
"serveStaticMaps": true,
"tileMargin": 0
},
"styles": {
"basic": {
@ -95,6 +96,13 @@ Maximum image side length to be allowed to be rendered (including scale factor).
Be careful when changing this value since there are hardware limits that need to be considered.
Default is ``2048``.
``tileMargin``
--------------
Additional image side length added during tile rendering that is cropped from the delivered tile. This is useful for resolving the issue with cropped labels,
but it does come with a performance degradation, because additional, adjacent vector tiles need to be loaded to genenrate a single tile.
Default is ``0`` to disable this processing.
``minRendererPoolSizes``
------------------------

View file

@ -419,6 +419,13 @@ module.exports = function(options, repo, params, id, publicUrl, dataResolver) {
params.width *= 2;
params.height *= 2;
}
var tileMargin = Math.max(options.tileMargin || 0, 0);
if (z > 2 && tileMargin > 0) {
params.width += tileMargin * 2 * scale;
params.height += tileMargin * 2 * scale;
}
renderer.render(params, function(err, data) {
pool.release(renderer);
if (err) {
@ -433,6 +440,10 @@ module.exports = function(options, repo, params, id, publicUrl, dataResolver) {
channels: 4
}
});
if (z > 2 && tileMargin > 0) {
image.extract({ left: tileMargin * scale, top: tileMargin * scale, width: width * scale, height: height * scale });
}
if (z == 0) {
// HACK: when serving zoom 0, resize the 0 tile from 512 to 256