J'essaie d'écrire une macro python pour ArcGIS 10.2 qui automatisera le processus d'étiquetage des points dans une couche en fonction de différents types d'appartements. Par exemple, un style d'appartements aurait un carré bleu avec du texte en gras blanc comme une étiquette; un autre aurait un carré rose avec du texte en gras noir; un autre aurait un carré rouge avec un texte en gras blanc, etc.
Quelle expression ou fonction utiliseriez-vous dans arcpy pour modifier le style de ces étiquettes?
Actuellement, le script étiquette les appartements par un code de carte et change son nom dans la table des matières en appartements, comme il se doit.
Maintenant, je veux changer la police, le graphique et la taille des étiquettes pour créer une étiquette unique pour chacune, puis créer un bouton à appuyer et simplement automatiser le processus chaque fois que nous devons effectuer l'une de ces couches.
Existe-t-il un moyen de modifier les polices, les étiquettes et les graphiques à l'aide de scripts Python (ArcPy, IDLE, etc.)?
J'ai décidé de modifier ce post pour donner une description finale de ce que je vais faire ici, donc il n'y a pas de confusion. Essentiellement, les points sur la carte passeront de l'image ci-dessus à ceci:
J'ai essayé d'utiliser la lblClass.expression
fonction, mais le code que j'essaie d'utiliser ne fonctionne pas. Je pense que c'est probablement le pas dans la bonne direction. Ci-dessous se trouve du code que j'ai essayé d'utiliser juste pour obtenir le labelClass.expression pour changer les polices des étiquettes.
for lblClass in aptLayer.labelClasses:
lblClass.showClassLabels = True
def getLabel (Code, Type):
if Type == "MRR":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "TAX":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "MRT":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "GSS":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "TGS":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
else:
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
lblClass.expression = getLabel( [Map_Code],[Type])
la source
refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0]
il génère une erreur indiquant que l'index est hors de portée.arcpy.mapping.ListLayers
méthode ne trouve pas une couche dans le mxd actuel avec le même nom que votreinput_layer_file
(un index de[0]
retour d'index hors plage signifie qu'il n'y a aucun élément dans la liste).Traceback (most recent call last): File "E:\_Tyler Temp\Python\IanTest.py", line 30, in <module> refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0] IndexError: list index out of range
Une autre option consiste à définir l'expression d'étiquette personnalisée sur le calque (modification de la taille et de la couleur ... etc.) à l'aide de python:
par exemple
Création d'expressions d'étiquette
Ils peuvent être définis via:
LabelClass (arcpy.mapping)
ÉDITER:
Essaye ça:
Vous pouvez supprimer vos autres instructions de ligne (pour loop, labClass et call to function). En outre, la fonction doit être appelée FindLabel.
la source
def getLabel (Code, Type)
puis après avoir configuré les instructions if-else pour les différents codes de carte que j'utilise, j'ai ensuite défini 'lblClass.expression = getLabel ("[Map_Code]", "[Type]")', qui renvoie simplement une erreur,TypeError: unsupported operand type(s) for &: 'str' and 'str'
je suis essentiellement en suivant les exemples du site Web Esri. Si je peux simplement prouver que je peux changer la police, je peux ensuite passer aux réglages les plus difficiles (tels que la forme, l'arrière-plan et la couleur des étiquettes).