Tips for getting better map drawing performance

By Charlie Frye, Esri Chief Cartographer

If you’re making a map that is either a large format print map or a map that will be served via ArcGIS Server, squeezing every bit of wasted time out of drawing performance is critical.  Don’t get tired of sitting there drinking extra cups of coffee watching the word “Drawing”, all your layer names, and that little blue globe. If you’re finding it stressful to explain when updates will be coming, or the timing for caching the map you are serving, or your map services generate complaints about poor performance, then try the two tips in this entry.

There are lots of obvious tips to improve drawing performance in the ArcGIS Help system, but I’ve got two tips that are not there and do make a big difference: first, once your map is set up, create attribute indexes; second, simplify the data that is being labeled (that means you’ll be labeling a different layer than what you use to draw the symbolized geometry on your map).

Tip 1: Attribute Indexes

If you use an attribute to symbolize your data, e.g., the field you’ve specified for unique values, or the population field on census block group polygons, adding an index to the feature class for that field will boost your drawing performance.  The same goes for your label fields.  There is a topic in the online help called Creating attribute indexes that explains how to create attribute indexes and explains which options to use based on the nature of the information contained in the field you are indexing.

Tip 2:  Simplified data for labeling

For line and polygon data, labeling performance is affected by the quantity of information that is fed into the labeling engine.  Whether you’re using the Standard or Maplex labeling engine doesn’t matter.  The label engine will work if you’re sending it millions of vertices, but you’ll experience a performance penalty for having to read and ingest so much data.  The main idea is to use either the Simplify Line or Simplify Polygon tool to reduce the number of vertices, without fundamentally changing the shape of your geometry at your map’s scale.

If you can see the vertices in your data as you draw, don’t worry about doing this, but if you can zoom in on your data and continue to see more detail as you zoom, then definitely consider simplifying your data for your labels.

These tools have two methods, Point Remove (Douglas-Peucker algorithm) and Bend Simplify.  Point remove is generally better for data like roads, contours, and boundaries because it will not introduce new points.  Bend Simplify works better for rivers, streams, and natural features like soils and vegetation.  Remember the purpose is not to fundamentally change the shape of the feature–after all the label needs to associate well with the unsimplified version of the feature that is symbolized on your map.

Tip Drawing Performance - Figure 1
To the right is  the table of contents from a map I’ve been working on recently that uses this tip.  My layer names contain the substring “Lab” in the cases where I am just labeling simplified features.  The map works at multiple scales and each scale is also noted in the layer’s name.

Last, we have been adding tips like these to the online help for ArcGIS 9.3–where those of you who are beta sites can find them now.

This entry was posted in Mapping and tagged , , , , . Bookmark the permalink.

Leave a Reply


  1. elefevre says:

    Good post.

    I noticed that feature linked annotation classes in personal geodatabases contain four default attribute indexes. What purpose do these indexes serve? Can they be removed?

    Would there be any benefit in indexing the “Text String” field in an feature linked annotation class?

    Good post!

  2. cfrye says:

    I’m checking with the anno experts on the reasons for the indexes, though I expect one is for the relationship class that supports the feature link.

    Indexing text fields pays benefits as the size of your dataset increases. If you’ve only got a few thousand records, then no, an index isn’t going to provide you with a noticeable performance gain. But when you’ve got a few hundred thousand or more records (like a big street dataset) then querying to find a particular street name will go faster. Think of it just like an index in a book–having an index is nice, having it sorted alphabetically is even nicer.

  3. The indexes make these queries more efficient. Removing them will make them less efficient and the layer will draw slower. For those interested, the following fields are indexed when a feature-linked annotation feature classs is created: OBJECTID, FeatureID, AnnotationClassID, and Status. The OBJECTID field is indexed for all feature classes and the unique index ensures that the duplicate IDs are not created. The FeatureID field is indexed to support quick retrieval of related records during feature-linked annotation updates. Finally, AnnotationClassID and Status are both indexed because these fields are used for annotation layer queries during draw. For instance, the annotation layer only draws “placed” annotation by default so a query needs to be defined with that fields. Annotation sublayers can be turned on/off which makes a query on the AnnotationClassID field necessary.