Czy zadania ArcGIS Pro obsługują narzędzia Python Toolbox działające na ramkach map?
Powodem, dla którego pytam, jest to, że utknąłem, próbując wykonać następujące czynności:
- Uruchom ArcGIS Pro 1.1.1
- Utwórz nowy projekt - nazwałem mój TestProject i umieściłem w C: \ Temp
- Użyj okienka Projekt, aby dodać połączenie folderów do miejsca, w którym mam plik kształtów krajów świata z Natural Earth ()
- Przeciągnij i upuść ne_10m_admin_0_countries.shp na mapę, aby utworzyć warstwę o nazwie ne_10m_admin_0_countries
- Wstaw nowy układ - użyłem A3 Poziomo
- Wstaw nową ramkę mapy w układzie
- W okienku projektu utwórz nowy zestaw narzędzi Python w folderze TestProject - nazwałem mój TestPYT
- Kliknij prawym przyciskiem myszy TestPYT w panelu Projekt, aby go edytować
- Zamień kod na poniższy, aby dać Python Toolbox dwa narzędzia o nazwie Chile i Szwajcaria
- Zapisz skrypt i Odśwież Python Toolbox, aby zobaczyć dwa nowe narzędzia
- Uruchom narzędzie Chile, aby zobaczyć ramkę mapy na powiększeniu układu do Chile
- Uruchom narzędzie Szwajcaria, aby zobaczyć ramkę mapy na powiększeniu układu do Szwajcarii
- Wstaw nowy element zadania
- W elemencie zadania 1 wstaw nowe zadanie i nazwij je Chile
- W zadaniu Chile wstaw nowy krok i nazwij go Zoom do Chile
- Dla Step Behavior ustaw automatyczne i ukryte
- Na zakładce Działania próbuję ustawić Command / Geoprocessing jako narzędzie Geoprocessing, wybierając narzędzie Chile
- Wygląda na to, że się trzyma, kiedy wybieram OK
- Wydaje się, że „gubię” narzędzie, kiedy kliknę Gotowe
W szczególności staram się stworzyć przepływ pracy z dwoma zadaniami, które mogę kliknąć, aby powiększyć do Chile lub powiększyć do Szwajcarii, ale utknąłem w kroku 19 powyżej.
To, co staram się ogólnie zrobić, to znaleźć ArcPy (dla ArcGIS Pro) odpowiadający paskowi narzędzi Python AddIn w ArcPy (dla architektury ArcGIS 10.x) z dwoma przyciskami (Chile i Szwajcarią), aby przybliżyć się do tych krajów.
Przeszedłem tę procedurę kilka razy i raz udało mi się sprawić, by narzędzia Chile i Szwajcarii zachowywały się jak zadania, ale nawet wtedy nie wydawały się wchodzić w interakcje z ramką mapy (bez błędu, tylko bez zmian do tego, co było wyświetlane w ramce mapy podczas ich uruchamiania), mimo że narzędzia uruchomione z Python Toolbox nadal działały bez problemu.
Jest to kod do skopiowania / wklejenia do 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