Próbuję napisać makro Pythona dla ArcGIS 10.2, które zautomatyzuje proces oznaczania punktów w warstwie w oparciu o różne typy mieszkań. Na przykład jeden styl mieszkań miałby niebieski kwadrat z białym pogrubionym tekstem jako jedną etykietą; inny miałby różowy kwadrat z czarnym pogrubionym tekstem; inny miałby czerwony kwadrat z białym pogrubionym tekstem itp.
Jakiego wyrażenia lub funkcji użyłbyś w Arcpy, aby zmienić styl tych etykiet?
Obecnie skrypt etykietuje mieszkania kodem mapy i zmienia swoją nazwę w spisie treści na apartamenty, tak jak powinno.
Teraz chcę zmienić czcionkę, grafikę i rozmiar etykiet, aby wyglądały jak dla każdego, tworząc niepowtarzalną etykietę, a następnie uaktywnij przycisk i zautomatyzuj proces za każdym razem, gdy musimy wykonać jedną z tych warstw.
Czy istnieje sposób zmiany czcionek, etykiet i grafiki za pomocą skryptów Python (ArcPy, IDLE itp.)?
Postanowiłem zredagować ten post, aby podać ostateczny opis tego, co tu zamierzam, aby nie było zamieszania. Zasadniczo punkty na mapie przejdą od wyglądającego jak na powyższym obrazku do tego:
Próbowałem użyć tej lblClass.expression
funkcji, ale kod, którego próbuję użyć, nie działa. Myślę, że to prawdopodobnie krok we właściwym kierunku. Poniżej znajduje się kod, którego próbowałem użyć, aby uzyskać wyrażenie labelClass.expression w celu zmiany czcionek etykiet.
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])
źródło
refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0]
zgłasza błąd informujący, że indeks jest poza zakresem.arcpy.mapping.ListLayers
metoda nie znajduje warstwy w bieżącym pliku mxd o takiej samej nazwie jak twojainput_layer_file
(indeks[0]
zwracania indeksu poza zakresem oznacza, że na liście nie ma żadnych elementów).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
Inną opcją jest ustawienie niestandardowego wyrażenia etykiety na warstwie (zmiana rozmiaru i koloru..etc) za pomocą python:
na przykład
Budowanie wyrażeń etykiet
Można je ustawić za pomocą:
LabelClass (arcpy.mapping)
EDYTOWAĆ:
Spróbuj tego:
Możesz usunąć inne instrukcje liniowe (dla pętli, labClass i wywołania funkcji). Ponadto funkcja musi mieć nazwę FindLabel.
źródło
def getLabel (Code, Type)
a następnie po skonfigurowaniu instrukcji if-else dla różnych kodów map, których używam, ustawiłem „lblClass.expression = getLabel („ [Map_Code] ”,„ [Type] ”)”, który po prostu zwraca błądTypeError: unsupported operand type(s) for &: 'str' and 'str'
Zasadniczo podążam za przykładami witryny Esri. Jeśli mogę po prostu udowodnić, że mogę zmienić czcionkę, mogę przejść do dostosowywania trudniejszych aspektów (takich jak kształt, tło i kolor etykiet).