Parameterized Label Appearance?
April 02 2009 |
I am creating symbology specific to twelve different scales that will eventually become tiles of a municipal base map for ArcGIS Server and used for map production in ArcMap. For each of the City's streets, I've recorded an attribute that indicates its relative importance or significance as a number from one to ten. The only way to ensure a consistent result into the future while multiple edits are performed (somewhat frequently) is to canonize the rules into some automated labeling rules, operations, etc.
Symbology becomes reasonably straight-forward. I have a wealth of options for symbolizing each street, including the ability to adjust appearance characteristics based on each feature's attributes. So far so good.
Now I need to add labels for each street. By contrast with symbology, I have almost no parameterized per-feature control over labeling -- particularly relative to scale. I want to be able to adjust things like the size of the type, the spacing of the letters, even Maplex properties etc. based on the relative importance of the feature and varying based on the scale of the map -- particularly those values that are not relative to the size of the type.
This would seem to require an awful lot of manual value settings. Am I missing something? Or shall I consider this to be my excuse to start using python scripts to accomplishing cartographic tasks now that they aren't limited to geoprocessing?
Mapping Center Answer:
So, relative importance of the street is just one of the factors that impact decisions about how to label streets; and the importance, would generally inform the labeling process to set the size of the text, i.e., more important streets have larger labels.
However, my first concern would be to verify that your ranking is not purely arbitrary. The people reading your map already have a set of expectations about what is important. For instance a divided, limited access highway has a different level of importance than an alley, fire road, or residential street. I would be very leary of a ranking system that makes one fire road more important than another--from the perspective that the reasoning would need to be shared by the audience for any map you might be making. So, first I would recommend having a look at page 317 of Designing Geodatabases. Years ago, I came up with that list--each of those classifications potentially is the basis for external expectations of importance.
That aside, back to labeling. Other factors that influence street labeling (to me) are:
1. The length of the street and the number of characters in the name. (It ought be illegal to name a cul-de-sac with a name longer than 6 characters.) I usually have another attribute that indicates whether a cul-de-sac is a true cul-de-sac or just a dead end; first for symbology, but also so I can use either, if the street is short enough as the basis for a different label class where I stack the label. It bugs me when Maplex stacks labels that don't need to be stacked, so I do the extra label class--ensuring no stacking happens for otherwise lengthy streets.
2. I usually dissolve my streets by the label string (Prefix Dir + Name + Type + Suffix Dir) and my symbol classification. Labeling is faster this way.
3. I also create a point dataset that I draw with No Color, but set up as having a large symbol (36 pts), with a feature weight of 1000 (Maplex), and I have points at every intersection of major streets--this keeps labels from running across major streets.
Another Ask a Cartographer response with a similar question contains a link for a ZIP file with a personal geodatabase (ArcGIS 9.2) containing a what I use as a data model and example data for streets. There's a layer file there as well. This data was the basis for the series of blog entries I've done on street labeling and symbology.
That said, back to the idea of twelve map scales. I would design labeling rules and produce annotation for each of the twelves scales. That means at least a group layer for each scale and then creating an MXD for each group layer where you set the reference scale for that layer's cache scale and produce the annotation. Definitely use feature linked annotation. That will allow you to bring the streets data and all the annotation into an MXD to do things like add new streets. The annotation that you use to create your map services may be copies (and not feature linked), but definitely keep the original around for maintenance purposes.
If you would like to post a comment, please login.