Update the values for unique symbology on a layer based on a range domain

I’m quite sure that it’s evident by now, based on my previous programming posts, and others, that I do a lot of seemingly random tasks. One of the things I love about using Python in ArcGIS is that it allows me to perform tasks which would be tedious otherwise.

I wrote this script to create symbology for a layer which needed to be symbolised by the values in the range domain on a certain field (in this case, max 12). The feature class was empty at this point, so I couldn’t Right Click > Properties > Symbology > Categories > Unique Values > Add All Values. I also didn’t feel like using Add Values and manually typing in each number. Yes, my max was 12, but what if it was 50 in the future?

#
# @date 27/05/2015
# @author Cindy Williams
#
# Updates the values for a unique symbology renderer
# based on range domain values. The layer must have
# the unique symbols renderer enabled manually.
#
# For use in the Python window in ArcMap.
#
import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")
lyr = arcpy.mapping.ListLayers(mxd)[4] # 5th layer in TOC
rvd_name = "rvd_1_12" # Name of range value domain
rvd_values = []
# Courtesy of pythoncentral.io – works like range(), but for floats
# The range domain type is Short, but the min and max are stored as floats
def frange(start, stop, step):
i = start
while i < stop:
yield i
i += step
# Check if the layer has the unique symbology renderer
if lyr.symbologyType == 'UNIQUE_VALUES':
# Access domains in the workspace using ListDomains
for domain in arcpy.da.ListDomains(lyr.workspacePath):
# Check for name
if domain.name == rvd_name:
for n in frange(dom.range[0], dom.range[1] + 1, 1):
# Can't append directly into classValues
rvd_values.append(int(n))
lyr.symbology.classValues = rvd_values # Set unique value list
arcpy.RefreshTOC()
mxd.save()

At this point, I’m basically using any excuse to get into Python. I do try at least to start the task in ArcMap, before asking myself, “Can this be done using Python?” Invariably, the answer is always a resounding “Yes”.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.