Labeling contours ala topographic maps
I manually label index contours so they conform to cartographic standards and conventions. This
is very labour intensive in ArcView 9.2 I have used an SQL expression to auto-label only the index contours, but the placement of the labels leaves much to be desired. Is there a faster way to place contour labels so they look like the ones you see on a topographic map?
Mapping Center Answer:
I have a couple of tricks I use to get a better result for this problem. Both involve using Maplex. The first trick is easy, use the Street placement option. That will introduce some laddering. The second trick is to use a combination of repeat labels and remove duplicates; if your distance for repeat labels is Y, then the distance for remove duplicates should be 60-80% of Y (depends on whether you want more labels or fewer labels). The idea is to create annotation that typically requires me to remove a few labels and strategically add a few labels.
In terms of general settings for Maplex, I:
- use straight placement (on the line).
- set my label class’s SQL query to only label contours longer than 2 * pi * d; where d = the width of 3 or 4 character label in map units. This keeps labels from being placed awkwardly at the tops of hills.
- create annotation for all my other labels first, then label and create annotation for contours afterwards—this is because the contour geometry is often so rich that it slows the labeling engine down too much to tolerate.
- buffer my spot elevations and use these buffers with feature weight rankings of 1000; to keep contour labels from being placed near spot elevations. In general, I have found that I use different feature weight rankings for contours, which is another reason to create annotation for contours last. For instance I’ll use feature weights on all roads, versus just major roads, when I produce contour anno.
- make the labeling go faster. To do this I generalize (Simplify Line tool using the point remove option) just a little bit; not to change the shape to the point of creating topological errors, but just to remove 50-70% or so of the vertexes that are not really helping to define the shape relative to what’s needed for label placement.
+ To figure out what tolerance to use, I start editing on the contours, select one that is particularly curvy and zoom in on it. Then change the edit task to Modify features so I can see the vertexes (turn off your maps reference scale if you’re using one in order to do this). Then on the Advanced Editing toolbar I use the generalize tool and through trial and error (undo-ing each time I am not satisified) find the tolerance that will work best.
+ I use that tolerance value in the simplify line tool. The key there is that both the generalize tool and the point remove option of the Simplify Line tool use the same algorithm: Douglass-Peucker.
+ Then I label and create my annotation for the generalized lines—usually 3-10x faster.
+ Also, I usually do a less aggressive simplification of the contour lines and use them for my map because they’ll draw much faster.
My last step, is to create masks (Feature Outline Mask tool)—usually there’s not much point in doing that until I’m ready to do check plots.
So, I hope you’ve got Maplex, because at 9.2 there’s nothing that’s going to help very much beyond simplifying the contours to increase drawing performance.
Last, there is some good news on the horizon: for 9.3 we are adding a new, and I think better, contour line tool and some Maplex options for contours that include some options to deal with uphill and downhill preferences and relative to page option, both of which vary by country, and a better laddering option than using the Street Placement Option.
If you would like to post a comment, please login.