From 4f962a651a94719f9b8ddf0f219e136c766d6dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Sun, 4 Apr 2021 23:54:33 +0200 Subject: [PATCH] Fix rendering of MultiPolygon text styles When overflow is false and some of a MultiPolygon's polygons are outside the rendered extent the coordinates and geometryWidths arrays are not kept in sync. Therefore the width check will filter on wrong data and some texts may not be rendered. --- src/ol/render/canvas/TextBuilder.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/ol/render/canvas/TextBuilder.js b/src/ol/render/canvas/TextBuilder.js index cca8a26d40..c9c4c809d7 100644 --- a/src/ol/render/canvas/TextBuilder.js +++ b/src/ol/render/canvas/TextBuilder.js @@ -232,7 +232,7 @@ class CanvasTextBuilder extends CanvasBuilder { } this.endGeometry(feature); } else { - const geometryWidths = textState.overflow ? null : []; + let geometryWidths = textState.overflow ? null : []; switch (geometryType) { case GeometryType.POINT: case GeometryType.MULTI_POINT: @@ -275,6 +275,21 @@ class CanvasTextBuilder extends CanvasBuilder { if (end === begin) { return; } + if ( + geometryWidths && + (end - begin) / 2 !== flatCoordinates.length / stride + ) { + let beg = begin / 2; + geometryWidths = geometryWidths.filter((w, i) => { + const keep = + coordinates[(beg + i) * 2] === flatCoordinates[i * stride] && + coordinates[(beg + i) * 2 + 1] === flatCoordinates[i * stride + 1]; + if (!keep) { + --beg; + } + return keep; + }); + } this.saveTextStates_();