Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I need to label township ranges along the side and top of my map, respectively. I know the grid in the frame properties is a way to label the edges with lat/lon. I Think there is a way to do the same type of thing with dynamic text objects.

Anyone have experience with this?

share|improve this question
I wish one of these were what I am looking for. I fear it is not doable without just slogging through manually. – Brad Nesom May 15 '11 at 5:27
It is doable. You have to create a custom grid. See additional links in my answer. – Sean May 16 '11 at 13:38
Is an arcobjects solution acceptable? – Kirk Kuykendall May 16 '11 at 14:06
up vote 1 down vote accepted

You can do this with dynamic text of Data Driven Pages in ArcGIS 10.

EDIT: On first read I though you were trying to label neighbors but re-reading after Jakub's comment, it sounds like you want a custom reference grid. You need to create a custom overlay grid from your reference data. Check this relevant thread on the ESRI forums.

share|improve this answer
I don't see anything there that would indicate that you can use dynamic text to label latitude and longitude. Can you please provide some more information or a methodology? – Jakub May 13 '11 at 17:07
Maybe I'm mistaken, but I don't think he's asking about labeling long/lat. – Sean May 13 '11 at 17:11
no I want to label T23N, and R5W along the edges. – Brad Nesom May 13 '11 at 17:17
thanks for the forum thread I got it to work but now am extending my polygons to allow labeling the entire state. – Brad Nesom May 16 '11 at 21:46

via arcpy

    import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
pageNameList = ["MPB", "PJB", "AFB", "ABB"]
for pageName in pageNameList:
    pageID = mxd.dataDrivenPages.getPageIDFromName(pageName)
    mxd.dataDrivenPages.currentPageID = pageID
    fieldValue = mxd.dataDrivenPages.pageRow.TSR  #example values from a field called TSR are "080102", "031400"
    TRSTitle = arcpy.mapping.ListLayoutElements(MXD, "TEXT_ELEMENT", "TRSTitle")[0]
    township, range, section = fieldValue[:2].strip("0"), fieldValue[2:-2].strip("0"), fieldValue[-2:].strip("0")
    if section != "": 
        TRSTitle.text = "Section {0} T.{1}N. R.{2}W. W.M.".format(section, township, range)
        TRSTitle.text = "T.{0}N. R.{1}W. W.M.".format(township, range)
    mxd.dataDrivenPages.printPages(r"\\olyfile\SUITE_303", "CURRENT")
del mxd

bottom of page DataDrivenPages (example 2)

share|improve this answer

Just realized this is an ANCIENT thread...whoops. Leaving the answer for any who might stumble upon it.

We have a feature class named Townships, that we use as our grid for mapbooks. In the attribute table, for each row we have a "Township", "Range", and a "MapName" column. Then we simply add two dynamic text objects like so:

The MapName column is simply the Township and Range together, separated by a hyphen. Overly redundant, but it has its purpose.

So, if you have the township and range in your attribute table, just add the labels above, substituting your column names. If you don't have the township and range, add the columns to your table.

share|improve this answer

Take a look at What are grids and graticules? in the help. Not a programmatic solution but may be all you need.

share|improve this answer
I think Brad is asking whether this can be done with the dynamic text in version 10. – Jakub May 13 '11 at 17:11

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.