Поддерживают ли задачи 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 создайте новый Python Toolbox в папке TestProject - я назвал мой TestPYT
- Щелкните правой кнопкой мыши TestPYT на панели проекта, чтобы изменить его.
- Замените код на приведенный ниже, чтобы дать Python Toolbox два инструмента под названием Чили и Швейцария.
- Сохраните скрипт и обновите панель инструментов Python, чтобы увидеть два новых инструмента
- Запустите инструмент Чили, чтобы увидеть рамку карты на макете, чтобы увеличить масштаб до Чили.
- Запустите инструмент Швейцария, чтобы увидеть рамку карты на макете, чтобы увеличить масштаб до Швейцарии.
- Вставить новый элемент задачи
- В пункте 1 задачи вставьте новую задачу и назовите ее Чили
- В задаче Чили вставьте новый шаг и назовите его Zoom to Chile
- Для поведения шага сделайте это Автоматическим и Скрытым
- На вкладке Действия я пытаюсь установить Команду / Геообработка как инструмент геообработки, выбрав инструмент Чили.
- Кажется, придерживаться, когда я выбираю ОК
- Кажется, что "потерять" инструмент, когда я нажимаю Готово
В частности, я пытаюсь создать рабочий процесс с двумя задачами, по которым я могу щелкнуть, чтобы увеличить масштаб до Чили или увеличить до Швейцарии, но я застрял на шаге 19 выше.
В общем, я пытаюсь найти ArcPy (для ArcGIS Pro), эквивалентный панели инструментов Python AddIn в ArcPy (для архитектуры ArcGIS 10.x) с двумя кнопками (Чили и Швейцария) для масштабирования в этих странах.
Я проходил эту процедуру несколько раз, и в одном случае мне удалось заставить инструменты Чили и Швейцарии придерживаться задач, но даже тогда они, похоже, не взаимодействовали с фреймом карты (без ошибок, просто без изменений к тому, что отображалось во фрейме карты, когда они запускались), хотя инструменты при запуске из панели инструментов Python продолжали работать без проблем.
Это код для копирования / вставки в Python Toolbox (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