Ich versuche, ein Python-Makro für ArcGIS 10.2 zu schreiben, das das Beschriften von Punkten in einer Ebene basierend auf verschiedenen Arten von Apartments automatisiert. Zum Beispiel würde eine Art von Wohnungen ein blaues Quadrat mit weißem fettem Text als eine Beschriftung haben; ein anderer hätte ein rosa Quadrat mit schwarzem fettem Text; Ein anderer hätte ein rotes Quadrat mit einem weißen Fettdruck usw.
Welchen Ausdruck oder welche Funktion würden Sie in arcpy verwenden, um den Stil dieser Beschriftungen zu ändern?
Derzeit kennzeichnet das Skript die Apartments mit einem Kartencode und ändert seinen Namen im Inhaltsverzeichnis in Apartments, wie es sollte.
Jetzt möchte ich die Schriftart, die Grafik und die Größe der Beschriftungen ändern, um eine eindeutige Beschriftung für jede Beschriftung zu erstellen, und dann eine Schaltfläche zum Drücken und einfachen Automatisieren des Vorgangs erstellen, wenn wir eine dieser Ebenen ausführen müssen.
Gibt es eine Möglichkeit, die Schriftarten, Beschriftungen und Grafiken mithilfe von Python-Skripten (ArcPy, IDLE usw.) zu ändern?
Ich habe beschlossen, diesen Beitrag zu bearbeiten, um eine endgültige Beschreibung dessen zu geben, was ich hier vorhabe, damit keine Verwirrung entsteht. Im Wesentlichen sehen die Punkte auf der Karte so aus wie auf dem obigen Bild:
Ich habe versucht, die lblClass.expression
Funktion zu verwenden, aber der Code, den ich verwenden möchte, funktioniert nicht. Ich denke, das ist wahrscheinlich der Schritt in die richtige Richtung. Im Folgenden finden Sie einen Code, den ich nur verwendet habe, um den Ausdruck labelClass.expression zum Ändern der Schriftarten der Beschriftungen zu erhalten.
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])
quelle
refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0]
Es wird ein Fehler ausgegeben, der besagt, dass der Index außerhalb des Bereichs liegt.arcpy.mapping.ListLayers
Methode im aktuellen mxd keine Ebene mit demselben Namen wie Ihr findetinput_layer_file
(ein Index für die[0]
Rückgabe eines Index außerhalb des Bereichs bedeutet, dass die Liste keine Elemente enthält).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
Eine weitere Option besteht darin, den benutzerdefinierten Beschriftungsausdruck auf der Ebene (Ändern von Größe und Farbe usw.) mithilfe von Python festzulegen:
z.B
Erstellen von Label-Ausdrücken
Sie können eingestellt werden über:
LabelClass (arcpy.mapping)
BEARBEITEN:
Versuche dies:
Sie können Ihre anderen Zeilenanweisungen entfernen (für loop, labClass und call to function). Außerdem muss die Funktion FindLabel heißen.
quelle
def getLabel (Code, Type)
und nach dem Einrichten der if-else-Anweisungen für die verschiedenen von mir verwendeten Map-Codes 'lblClass.expression = getLabel ("[Map_Code]", "[Type]")' gesetzt, die gerade zurückgegeben wird Ein FehlerTypeError: unsupported operand type(s) for &: 'str' and 'str'
Ich folge im Grunde den Beispielen der Esri-Website. Wenn ich einfach beweisen kann, dass ich die Schriftart ändern kann, kann ich die schwierigeren Aspekte (wie Form, Hintergrund und Farbe der Etiketten) anpassen.