mapbox-gl-js icon indicating copy to clipboard operation
mapbox-gl-js copied to clipboard

symbol-placement: line-center produces incorrect results at some zoom levels

Open mike-unearth opened this issue 4 years ago • 5 comments

mapbox-gl-js version: 1.9.1

browser: Chrome 81

Steps to Trigger Behavior

  1. Create a geojson source with a LineString feature
  2. Create a text layer for the source with symbol-placement: line-center
  3. 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));

mike-unearth avatar Apr 24 '20 16:04 mike-unearth

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.

mike-unearth avatar Apr 24 '20 17:04 mike-unearth

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.

mike-unearth avatar Apr 24 '20 22:04 mike-unearth

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.

arindam1993 avatar Apr 27 '20 22:04 arindam1993

Problem still exists - is there any fix?

simonmumenthaler avatar Sep 19 '22 11:09 simonmumenthaler

Also run into into this issue. Any timeline when this is being fixed?

FunnyElevator avatar Dec 23 '22 12:12 FunnyElevator

Same here, using line midpoint instead, sadge

momsse avatar Oct 12 '23 16:10 momsse