mapbox-gl-js
mapbox-gl-js copied to clipboard
symbol-placement: line-center produces incorrect results at some zoom levels
mapbox-gl-js version: 1.9.1
browser: Chrome 81
Steps to Trigger Behavior
- Create a geojson source with a LineString feature
- Create a text layer for the source with
symbol-placement: line-center
- Zoom in
Link to Demonstration
https://jsfiddle.net/37sgzkme/
Expected Behavior
My understanding is that the label should appear at the center of the geometry at all zoom levels.
Actual Behavior
The label appears at the center of the geometry at all zoom levels below 18. Above 18, multiple labels are rendered along the line, or in some cases the single label simply moves to a new location on the line.
Increasing the source buffer size definitely helps, and in fact solves the issue for some simple lines, but my dataset is dynamic.
The following two lines in symbol_layout.js
are certainly eye-catching, but I haven't yet figured out exactly what's going wrong and why.
// 4. `text-size` at zoom level 18. Used for something line-symbol-placement-related.
...
sizes.textMaxSize = unevaluatedLayoutValues['text-size'].possiblyEvaluate(new EvaluationParameters(18));
The zoom level 18 thing appears to be a red herring: I'm now thinking that what's happening is that the geometry used to calculate the line center is the portion of the line within the current tile, not the entire feature. So each tile calculates a different center, and as you zoom in it becomes increasingly likely that multiple anchors will be placed. If I'm on the right track, then the only case when the center is correctly calculated is when the entire feature fits within one tile + buffer.
Hmm. I have a fix that works up through the current release (1.9.1) but does work with current master due to major changes via https://github.com/mapbox/mapbox-gl-js/pull/9219. I'll wait for the next stable release before opening a PR.
Your hypothesis is correct @mike-unearth , and you fix looks like its the correct approach 🎉 .
Could you please update the style-spec
docs for line-center
stating that it only works with geojson sources since geojson-vt
is what introduces those parameters.
Problem still exists - is there any fix?
Also run into into this issue. Any timeline when this is being fixed?
Same here, using line midpoint instead, sadge