I'm making a city map using QGIS 3.14 and I want to label every street (that's around 5000 label, the map is an A0 size at 1/12 000 scale). There are no other label than the street name and all label came from the same layer. After setting rule based labeling and fine tuning all setting for all rule I got a pretty good placement for maybe 80% of the street name but there are still area where I need to manually adjust the positions to get a printable result.

The problem arise when a manually move a label (I use the labeling toolbar "move" and "rotate" label button with data defined layer fields, I do not use the auxiliary storage).

Each time I manually move a label, the labeling engine recalculate the position of neighboring labels and an area that start as all good but one label end as only one label good and all labels around to manually replace.

In a similar way when panning the map the label engine recalculate the label position based on the part of the feature that are visible so even slightly panning the map result in different a label placement.

As each time I zoom, pan or adjust one label position all other visible labels change their positions I can't evaluate if my labels placements are globally satisfying or not and I can't predict how the labels will be placed in the exported map.

To try to solve the problem I set the "Allow truncated labels on edges of map" and lock the scale of the map and use the magnifier to zoom on the map but that doesn't make any difference.

I also try to pin all labels, but pinning the labels reset the rotation to 0 and all labels became horizontal...

So my question is are there a way to fix the label position set by the automated labeling engine ? (maybe by using an expression to fill the label_x, label_y and label_rotation field with the value set by the labeling engine) or are there any other way to get good placement on very densely packed label without manually placing all label ?


1 Answer 1


In v3.14 as soon as you move a label Auxillary Storage is turned on. At this point, in order for the labels to remain in place, they will all need a value in the auxillary storage column, and if they don't have one, then QGIS will try to move them.

My advice would be to set the placement properties at the base level as you have described, then in the background, hard-code as many properties into the columns as you can - X,Y, rotation, etc. and use the label 'data defined' settings to draw the labels instead.

Now when you have to move a label, the others should remain in place, and the values in the label placement columns will update for the labels you move.

  • I have column for almost all label setting but for now they contain null value, how would you fill it ?
    – J.R
    Commented Aug 9, 2020 at 20:39
  • @J.R are you using shapefiles? Commented Aug 9, 2020 at 22:32
  • No, the line layer for streetname is in geopackage format
    – J.R
    Commented Aug 10, 2020 at 8:38
  • @J.R well you can use the field calculator to populate the default label values in all the columns you'll need Commented Aug 10, 2020 at 16:17
  • Yes filling the column with value is the solution but my question is how to fill these value ( there are no label_x or label_y fonction in the field calculator), as the label engine already optimize the placement, I want to get these value
    – J.R
    Commented Aug 10, 2020 at 17:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.