Чи підтримують завдання ArcGIS Pro інструменти Python Toolbox, які працюють на Кадрах карт?
Причина, яку я запитую, полягає в тому, що я застряг, коли намагаюся зробити наступне:
- Запустіть ArcGIS Pro 1.1.1
- Створіть новий проект - я зателефонував у мій TestProject і помістив його в C: \ Temp
- Використовуйте панель проектів, щоб додати підключення до папок, де я маю форму файлів країн світу від Natural Earth ()
- Перетягніть ne_10m_admin_0_countries.shp на карту, щоб створити шар під назвою ne_10m_admin_0_countries
- Вставте новий макет - я використав A3 Landscape
- Вставте новий макет на макет
- На панелі "Project" створіть New Python Toolbox в папці TestProject - я назвав mine TestPYT
- Клацніть правою кнопкою миші на TestPYT на панелі проектів, щоб змінити його
- Замініть код на наведений нижче, щоб дати інструменту Python Toolbox два інструменти під назвою Чилі та Швейцарія
- Збережіть сценарій та оновіть панель інструментів Python, щоб побачити два нові інструменти
- Запустіть інструмент «Чилі», щоб побачити карту карти на масштабі макета до Чилі
- Запустіть інструмент Швейцарія, щоб побачити карту карти на масштабі макета до Швейцарії
- Вставте новий елемент завдання
- У пункт 1 завдання вставте нове завдання і назвіть його Чилі
- У завдання Чилі вставити новий крок і назвати його Збільшити Чилі
- Для крокової поведінки зробіть це автоматичним і прихованим
- На вкладці "Дії" я намагаюся встановити команду / геопроцедуру як інструмент геопроцедури, вибираючи інструмент "Чилі"
- Це, здається, прилипає, коли я обираю ОК
- Здається, "загубила" інструмент, коли натискаю "Готово"
Зокрема, те, що я намагаюся створити, - це робочий процес із двома завданнями, які я можу натиснути, щоб збільшити масштаб до Чилі або збільшити масштаб до Швейцарії, але я затримався на кроці 19 вище.
Що я намагаюся зробити в цілому, це знайти ArcPy (для ArcGIS Pro), еквівалентний панелі інструментів Python AddIn в ArcPy (для архітектури ArcGIS 10.x) з двома кнопками (Чилі та Швейцарія) для збільшення масштабу до цих країн.
Я кілька разів пережив цю процедуру, і одного разу мені вдалося отримати інструменти Чилі та Швейцарії, щоб виконати завдання, але навіть тоді вони, здавалося, не взаємоділи з картографічною рамкою (без помилок, просто ніяких змін до того, що відображалося в картографічному кадрі під час їх запуску), навіть незважаючи на те, що інструменти під час запуску з Python Toolbox продовжували працювати без проблем.
Це код для копіювання / вставки в панель інструментів Python (TestPYT).
import arcpy
class Toolbox(object):
def __init__(self):
"""Define the toolbox (the name of the toolbox is the name of the
.pyt file)."""
self.label = "Toolbox"
self.alias = ""
# List of tool classes associated with this toolbox
self.tools = [Slide1,Slide2]
class Slide1(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Chile"
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
"""Define parameter definitions"""
params = None
return params
def isLicensed(self):
"""Set whether tool is licensed to execute."""
return True
def updateParameters(self, parameters):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parameter
has been changed."""
return
def updateMessages(self, parameters):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
def execute(self, parameters, messages):
"""The source code of the tool."""
aprx = arcpy.mp.ArcGISProject("CURRENT")
mapx = aprx.listMaps()[0]
lyt = aprx.listLayouts()[0]
lyr = mapx.listLayers("ne_10m_admin_0_countries")[0]
lyr.definitionQuery = '"ADMIN" = ' + "'Chile'"
mFrame = lyt.listElements("MAPFRAME_ELEMENT")[0]
mFrame.camera.setExtent(mFrame.getLayerExtent(lyr, False, True))
lyr.definitionQuery = ""
return
class Slide2(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Switzerland"
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
"""Define parameter definitions"""
params = None
return params
def isLicensed(self):
"""Set whether tool is licensed to execute."""
return True
def updateParameters(self, parameters):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parameter
has been changed."""
return
def updateMessages(self, parameters):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
def execute(self, parameters, messages):
"""The source code of the tool."""
aprx = arcpy.mp.ArcGISProject("CURRENT")
mapx = aprx.listMaps()[0]
lyt = aprx.listLayouts()[0]
lyr = mapx.listLayers("ne_10m_admin_0_countries")[0]
lyr.definitionQuery = '"ADMIN" = ' + "'Switzerland'"
mFrame = lyt.listElements("MAPFRAME_ELEMENT")[0]
mFrame.camera.setExtent(mFrame.getLayerExtent(lyr, False, True))
lyr.definitionQuery = ""
return