I am working on a mapbook and I require to label the features against different fields in different maps. How can I do this using arcpy?
Have you read LabelClass—Help | ArcGIS Desktop ? If so, are you having a problem with any specific aspect of working with labels through ArcPy?
I don't think the LabelClass—Help | ArcGIS Desktop provides access to set the field used for labeling a layer. If that is the case, you could create layerfiles with the appropriate label settings and apply these layerfiles for the different maps using UpdateLayer—Help | ArcGIS Desktop . Or duplicate the layer in your TOC with the different label settings and switch them on and off depending on the map using the visible property of the Layer—Help | ArcGIS Desktop .
The LabelClass object does provide access to change the field through the expression property. When the label class is 'Default', the expression is simply the name of the field to label. If the user updates the expression to a different field and refresh the active view, the labels get updated.
Very true! good catch! +1 for that...
It is the symbology that is tougher to work with, but that is slightly improved with ArcGIS Pro compared to ArcMap.
Regarding labels, here's some python snippets that I've been playing around with that may be of interest:
mxd = arcpy.mapping.MapDocument("CURRENT")for lyr in arcpy.mapping.ListLayers(mxd): if lyr.supports("LABELCLASSES"): print "\n\nLayer name: " + lyr.name print " Show Labels: " + str(lyr.showLabels) print " Data Set: " + lyr.datasetName print "Data Source: " + lyr.dataSource for lblClass in lyr.labelClasses: print "\n Class Name: " + lblClass.className print "Show Class Labels: " + str(lblClass.showClassLabels) print " Expression: " + lblClass.expression print " SQL Query: " + lblClass.SQLQuery'''Sample output:Layer name: MyData Show Labels: True Data Set: FeatureTestData Source: C:\...\MyFeature.gdb\FeatureTest Class Name: DefaultShow Class Labels: True Expression: def FindLabel ( [FeatureType] ): if [FeatureType] == "Type One": return "Type 1" else: return [FeatureType] SQL Query: FeatureType = '1234''''
mxd = arcpy.mapping.MapDocument("CURRENT")for lyr in arcpy.mapping.ListLayers(mxd): if lyr.supports("LABELCLASSES"): for lblClass in lyr.labelClasses: lblClass.SQLQuery = ""arcpy.RefreshActiveView()# removes query that was found in first snippet
mxd = arcpy.mapping.MapDocument("CURRENT")LayerList = ['Program']for lyr in arcpy.mapping.ListLayers(mxd): if lyr.supports("LABELCLASSES"): if lyr.name in LayerList: lyr.showLabels = True else: lyr.showLabels = False arcpy.RefreshActiveView()
I recommend checking the links that both Joshua Bixby and Xander Bakker have mentioned.
Retrieving data ...