The ArcGIS Pro Maplex Labeling Engine can prevent labels from overlapping other labels or annotations. It can also prevent labels from overlapping other features. However, the Maplex engine doesn’t have a solid method for avoiding the symbols used for point features especially when the symbols are offset or rotated. This article describes a method of fixing overlapping labels in ArcGIS Pro using an electric map scenario.
In this scenario, there are transformer symbols offset and rotated around large pole symbols. The engine allows labels to overlap transformer symbols. The problem is shown in the image above.
The station numbers for the poles are overlapping the red transformers. The point geometry for the transformers are in the center of the black circles (poles). The red symbol is offset from the point and then rotated using a dynamic field called “Rotation”. The Maplex Engine knows that it cannot put the label on the pole because the point geometry is there. However, it doesn’t know that a visible symbol appears offset and rotated around that point so the labels freely render over the symbol.
The Method
To protect the transformers from overlap we will use a pseudo label to invisibly render over the top of the transformer. The pseudo label will prevent any other labels from rendering over the transformer symbol. This strategy is applicable to similar problems but positioning the pseudo label correctly will be custom to your symbology. The positioning can be tricky, but this there are strategies that help with custom positioning.
Pseudo Label Creation
First, create the pseudo label. Right click on the feature class in the labeling section of the contents window and select “Create Label Class…”. In this example, the feature class is “Bank” so we are creating a new bank label class. We then name our label class “OH TF – weight only” to indicate that the label is a pseudo label class for transformers used to give the transformer a labeling weight in the Maplex Engine.
Next, right click on the new label and choose the Labeling Properties… option to show the label class information.
Make it so that the pseudo label will only appear for the feature symbols that need it. In this example we only want the pseudo label to appear for overhead transformers. Click on the SQL sub tab in the Class tab of the Label Class and add Clauses to limit the features. This example limits the Asset Group to the Overhead Transformers.
The label may also need to be limited to a certain visibility range. The Overhead Transformer Psuedo label is limited by a minimum scale of 1:1,000 on the Class tab’s visibility range sub tab.
Pseudo Label Text
The text used for the pseudo label is very important. Different glyphs are rendered at different places and they take up differing amount of space. Any glyph will be hidden from view, but they will all render a different effect in the result. Use one or more glyphs that render in the best position for your symbol and cover the area of the symbol most effectively.
It won’t be obvious which glyph works best until after the font size and rotation are configured. It is best to start with a simple period character and change the glyph later if needed.
For the transformers, the period character is used. Enter a period surrounded by single quotes into the Expression window on the Label expression sub tab of the Class tab as shown above. Apply the change to see the period rendered next to the transformers like shown below.
The period will be transparent in the end but make sure to leave the pseudo label visible while placing and testing.
Pseudo Label Static Positioning
The pseudo label should never be moved by the Maplex Engine. Prevent the symbol from moving at Maplex’s whim by forcing the position.
In the Position tab select the Fitting strategy sub tab and remove the checkboxes from all the fitting strategies to prevent Maplex from trying to fix the label. The screen to the right shows the Stack label, Reduce font size, Use abbreviation strategies and Group name are all disabled.
On the Conflict resolution Sub tab, force the label’s priority. Do not allow the label to be removed, force a hard constraint on the Label buffer, give the Feature a weight other than zero, force the label to be placed first and never remove the label.
Pseudo Label Placement
Placing the pseudo label varies significantly based on how the underlying symbol is placed for the feature. Sometimes using a different glyph, font or font size will help to position the label. However, avoid using unsupported attributes like Offset X and Offset Y which must be left at zero for Maplex to detect the position correctly. This section will review some of the supported tricks for positioning the pseudo label.
Navigate to the Position Sub tab of the Position tab. For the placement choosing either Centered on Point or Top of Point will give a good position for a pseudo label. Centered on point is used for the Overhead Transformer. Before starting to rotate the point, uncheck the Keep label upright (may flip) option to prevent Maplex from flipping the label during rotation.
Rotate the label the same way the symbol is rotated. For the Overhead Transformers, the symbol is rotated using a field called “Rotation” so Rotation is selected from the rotation field dropdown.
The Rotation type and Additional rotation varies based on the symbol, but the Rotation type is usually Geographic. An additional rotation that worked well for Overhead Transformers based on trial and error is -90 degrees. Notice the resulting image shows a period rotated the same way that the transformer is rotated.
The goal of the glyph placement is to rotate the glyph the same way as the symbol is rotated. The placement of the period in the image below is correct because the period’s rotation matches even though the period glyph does not cover the transformer.
Pseudo Label Shape
The pseudo label cannot just be placed in the same position as the symbol, it must cover the symbol itself so that it can prevent other labels from covering the symbol. Changing the font, font size and changing the glyph(s) will affect the coverage. Play with these options to find the best way to cover the symbol. Be sure to click the Apply button after each change.
Increasing the font size for the Overhead Transformer glyph will move the glyph further from the actual point geometry (in the middle of the black circle) and it will increase the size of the period glyph. Both modifications will help improve the glyph coverage for the Overhead Transformer.
In the General Sub tab of the Symbol tab, change the font. In our example, increasing the font to 55 points works well. In fact, no other changes are needed to cover the transformer well.
Pseudo Label Transparency
After the pseudo label placement is complete, make the pseudo label invisible. Do not hide the label entirely because then Maplex will not respect the label. Just make the glyph invisible to humans by setting the Color property for the text to “No color”. The Color property is on the General Sub tab of the Symbol tab. Make the change and click the Apply button.
Changing this to transparent fixes the transformer symbols. The Maplex engine will no longer place labels over the transformers.