Manage Symbology in Feature Classes Using ArcMap

arcgis-10.2arcgis-desktoparcmaparcpysymbology

I'm using an enterprise db to store my data and I'm writing a Python tool that allows me to interact with that data in ArcMap. However, all my layers someone have "OTHER" for the symbologyType (not sure why).

What I need to do is to change the symbol type for points in each FC. It is fine for now to just use a single feature symbol type, but of course I can't do that when I've got the unsupported symbology type.

How can I create my own layer symbology?

Once I've got something I know I can apply it using ApplySymbologyFromLayer_management()

I know I can change the symbology from the layer properties, but I want to be able to script it and control it from a Python tool.

Here are the features

point features

Here is the symobology reference

symbologyType check

Here is the layer properties

layer properties

Best Answer

As to my knowledge, unfortunately, there isn't a way to update a layer in the TOC that has "OTHER" symbology type directly. If your symbologyType = "OTHER", as you have noticed, it means that you are not able to alter symbology properties for those symbology classes that are supported in 10.2. This is because only a limited number of symbology classes and properties are exposed to arcpy.mapping module right now. From the Esri Help:

If a value of OTHER is returned, then the layer's symbology can't be modified.

The only way to change this symbology type by using arcpy is to update layer first (UpdateLayer). It was like this since 10.0 and nothing has changed in 10.1/10.2 regarding the situation when you have "OTHER" symbology type.

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "County Maps")[0]
updateLayer = arcpy.mapping.ListLayers(mxd, "Rivers", df)[0]
sourceLayer = arcpy.mapping.Layer(r"C:\Project\Data\Rivers.lyr")
arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, True)

After you've done updating the layer from Single symbol (as you have now) with some dummy .lyr file that would change it to, say, Graduated colors, you should be able to start changing individual properties of the symbology (see the sample four in Layer).

if lyr.symbologyType == "GRADUATED_COLORS":
  lyr.symbology.valueField = "POP2000"
  lyr.symbology.numClasses = 4
  lyr.symbology.classBreakValues = [250000, 999999, 4999999, 9999999, 35000000]
  lyr.symbology.classBreakLabels = ["250,000 to 999,999", "1,000,000 to 4,999,999",
Related Question