Tip for creating annotation for complex maps

On February 1, 2008, in Mapping, by cfrye

By Charlie Frye, Esri Chief Cartographer

Right-click menu for a data frame showing convert labels to annotation

Complex maps such as topographic maps present several significant challenges for setting up labeling rules and creating annotation.  The first challenge is that these maps typically have many layers and types of features, requiring map authors to create and manage numerous label classes. Second, these layers may have a high density of features, which means that automated labeling for these maps requires loading all the data into the labeling engine and making your computer to work fairly hard. Third, some labels on the map are very important and should be placed optimally (e.g., labels for cities or very important landmarks); some labels can be placed with some flexibility (e.g., placing river or stream names along lines; there are many candidate positions along a given line); and some labels are just less important (e.g., labels for contours, which must yield to the other information on the map).

Producing annotation is a requirement for most complex maps because some labels (especially contours) need to be masked, and the masking tools require annotation as the input.  Also, you can perhaps see better performance by producing annotation for complex maps, as waiting over 10 seconds to a minute or so for each label redraw quickly gets tedious. However, there is a trade-off, as we learned that it wasn’t worth the effort to fine-tune label weights and priorities for complex maps (the user interface works well for less complex maps, but is very hard to work with for complex maps).

So, we were stuck until we realized that we could produce annotation in batches, and then we could focus our efforts for setting weights and priorities more efficiently. Specifically, we found it was much easier to produce annotation for our maps in three batches:

  1. The most important features These features need to have consistent and prominent placement for their labels. Further, we didn’t want to risk accidentally not placing labels for these features.  So we set up label classes in our layers just for these features.  Sometimes it was easy to set up SQL Queries on our label classes for these features using existing attributes, sometimes we needed to add a new attribute specifically for this purpose during map production.  We found that these labels also had different rules with respect to which types of features they could overstrike, so that meant we set up special weights and priorities for this batch of annotation. We found that we always needed to produce this batch of annotation first.  In fact if you have a certain few labels that are most important, go ahead and create annotation for them first.  The idea is that once annotation is created, it’s position is locked (i.e., Maplex cannot shuffle or fuss with these labels, they can only act as barriers to additional annotation production runs).  It’s difficult to visualize which labels these are in a small graphic, but these are the dozen or so pieces of text on a given map that have to be located well.
  2. Most of the remaining features Next, create annotation for every other feature type except contours.
  3. Contours The labels for contours are left for last for two reasons.  First, contour data is vertex-rich and therefore is a huge memory hog. Second, contour labels can almost always be fit into whatever space is left over on the map without breaking convention.

Tips for labeling contours:

  1. If you are creating annotation for a large map or a large contour dataset, consider using the Simplify Line tool on the contours first.  The idea is to remove perhaps 40% of the
    vertexes, but not to significantly change the shape of the contours.
    Use the Point Remove method on the Simplify Line tool.
  2. If you are labeling only index contours, then make sure your label class’s SQL query excludes the intermediate contours, or create two contour layers, one for intermediate contours and one for index contours; and turn the intermediate contours off when labeling or creating annotation for the index contours.  This will prevent the intermediate contours from being loaded into the labeling process (i.e., four times as much data as you are labeling from being unnecessarily loaded into the labeling engine).

The main idea of this blog entry is that your annotation production workflow can be broken into strategic batches, each with their own priorities and weights.  This makes it possible for you to better control the placement of labels for certain features, and to break the annotation production process into more manageable chunks for your computer to process.

Tagged with:  

10 Responses to Tip for creating annotation for complex maps

  1. johnsd says:

    Charlie, your post comes in a timely manner as I just posted a question last week on the user forums regarding creating annotation layers. I created labels classes in my FC and set the Maplex rules for those labels and the other FC’s they interact with. Once I had everything at about 95%, I converted to annotation in a file geodatabase. The rules did not hold as they converted. I am dealing with a complex map and the labels have become a bit frustrating. Any thoughts on this situation?

  2. cfrye says:

    To be clear, it sounds like you are converting labels to annotation and appending that new annotation into existing annotation feature classes. That means the rules would have to exactly match. If you don’t already have annotation in your anno feature classes, it’s probably easier to just create new feature classes when converting your labels. Then you are assured of a 100% match if you use that map to append additional annotation (from another geographic area).

    Did you save the rules in your layers to a style and then use those rules when creating the annotation feature class’s rules?

  3. johnsd says:

    These are the steps I followed for creating my annotation layer. First, I created a file GDB in my project directory. Second, I set up my label classes in the layer’s properties, Labels section. Next, for each class, I defined the placement properties using Maplex Label Engine. Once I had all classes defined, I selected ‘convert labels to annotation’ ‘in a database’. I selected the file GDB created earlier and went with the default layer naming convention. ‘All features’ was selected and the ‘Append’ was not selected.

    I did not save rules to a style. The main issue I am experiencing is the placement of the annotation after conversion. Do you think creating a style would help hold the placement rules?

    By the way, I enjoy Mapping Center site. The art of cartography seems to be last on the minds of many.

  4. cfrye says:

    It sounds like we’re misfiring on terminology. When you double-click your annotation feature class in ArcCatalog, what do you see on the Annotation Classes tab? Minimally you should see one annotation class called “Default”. If you created any label classes, you should see an annotation class for each label class you created. That’s what I’m looking for when I would be checking to see if the “rules” came through during the process of creating annotation.

    Is this the case? Hopefully you’re getting your annotation classes; if you’re not definitely contact technical support.

    Or is this that the annotation features are in different locations than where the labeling had placed them? That’s supposed to happen, and generally for the better. Let me give you a hypothetical example.

    Let’s say you’ve got a map with five layers, named layer1, layer2 … layer5. Layer 1 has very important features and the labels for those are being squeezed off into less than optimal placements when all the layers are being labeled at the same time. Layers 2, 3, & 4 have features that can have labels placed with some flexibility, and layer 5 is for index contours (relating to the main portion of the posting). Using the methodology above, you would first only turn on labeling for just layer1 and convert its labels to annotation. Creating annotation for layer1 will turn off labeling for layer1. Now turn on labeling for layers 2, 3, & 4, and then create annotation for the map. Last turn on labeling for layer5, and convert those labels to annotation.

    You are supposed to get a different, generally better result, particularly for the features in layer1.

  5. jsfvbx says:

    Does the standard label engine lock the position of annotations in the same way Maplex does? I’m guessing that it does.

    Thanks. Erin

  6. elefevre says:

    Does the standard label engine lock the position of annotations in the same way Maplex does? I’m guessing that it does.

    Thanks. Erin

  7. cfrye says:

    Yes. we load the features and labeling information into the either of the label engines the same way every time, which ensures getting the same result if nothing else has changed.

  8. johnsd says:

    From 7 Feb 08:
    “Or is this that the annotation features are in different locations than where the labeling had placed them? That’s supposed to happen, and generally for the better. Let me give you a hypothetical example.”

    Okay, this is the case. Once I created the annotation classes, the anno features were placed in different locations than where the label engine placed them. However, for me, it usually was not for the better. I will try to focus on creating the anno features as you described. Many thanks.

  9. disGolf says:

    In regards to:

    “Tips for labeling contours:
    If you are creating annotation for a large map or a large contour dataset, consider using the Simplify Line tool on the contours first. The idea is to remove perhaps 40% of the vertexes, but not to significantly change the shape of the contours. Use the Point Remove method on the Simplify Line tool. ”

    My question is: If I am converting my symbology to cartographic representations and use a Simplify geometric effect will I achieve the same results? if so this method would certainly be preferable given the time it takes the geoprocessor to simplify versus the time it takes to do the same thing in the carto representations, no?

  10. cfrye says:

    The only bit about using representations that bothers me is that you’re incurring, at each draw-time, the simplification of potentially the most vertext-rich datasets on the map (in areas of high local relief). But folks in low-lying coastal areas, e.g., Florida, USA; may find using representations to be a viable solution.

Leave a Reply