Я пытаюсь написать макрос Python для ArcGIS 10.2, который автоматизирует процесс маркировки точек в слое на основе разных типов квартир. Например, один стиль квартир будет иметь синий квадрат с белым жирным шрифтом в качестве одной метки; у другого будет розовый квадрат с черным жирным шрифтом; у другого будет красный квадрат с белым жирным шрифтом и т. д.
Какое выражение или функцию вы бы использовали в arcpy, чтобы изменить стиль этих меток?
В настоящее время скрипт помечает квартиры кодом карты и меняет свое имя в оглавлении на квартиры, как и должно быть.
Теперь я хочу изменить шрифт, графику и размер меток, чтобы они выглядели уникально, а затем создать кнопку для нажатия и просто автоматизировать процесс в любое время, когда нам понадобится один из этих слоев.
Есть ли способ изменить шрифты, метки и графику с помощью сценариев Python (ArcPy, IDLE и т. Д.)?
Я решил отредактировать этот пост, чтобы дать окончательное описание того, что я собираюсь здесь, чтобы не было путаницы. По сути, точки на карте будут выглядеть не так, как на картинке выше:
Я пытался использовать lblClass.expression
функцию, однако код, который я пытаюсь использовать, не работает. Я думаю, что это, вероятно, шаг в правильном направлении. Ниже приведен код, который я пытался использовать, чтобы получить labelClass.expression для изменения шрифтов меток.
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])
источник
refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0]
выдает ошибку, говорящую о том, что индекс находится вне диапазона.arcpy.mapping.ListLayers
метод не находит слой в текущем mxd с тем же именем, что и у васinput_layer_file
(индекс[0]
возврата индекса вне диапазона означает, что в списке нет элементов).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
Другой вариант - установить пользовательское выражение метки на слое (изменение размера и цвета и т. Д.) С помощью python:
например
Создание выражений меток
Они могут быть установлены через:
LabelClass (arcpy.mapping)
РЕДАКТИРОВАТЬ:
Попробуй это:
Вы можете удалить другие операторы строки (для цикла, labClass и вызова функции). Кроме того, функция должна называться FindLabel.
источник
def getLabel (Code, Type)
а затем после настройки операторов if-else для различных кодов карт, которые я использую, я установил 'lblClass.expression = getLabel ("[Map_Code]", "[Type]")', который просто возвращает ошибка,TypeError: unsupported operand type(s) for &: 'str' and 'str'
я в основном следую примеру веб-сайта Esri. Если я могу просто доказать, что могу изменить шрифт, я могу перейти к настройке более сложных аспектов (таких как форма, фон и цвет надписей).