ArcGIS Pro 작업은 맵 프레임에서 작동하는 Python Toolbox 도구를 지원합니까?
내가 묻는 이유는 다음을 수행하려고 할 때 갇혀 있기 때문입니다.
- ArcGIS Pro 1.1.1 시작
- 새 프로젝트 만들기-내 TestProject라는 C : \ Temp에 배치
- 프로젝트 창을 사용하여 Natural Earth ()에서 전 세계 국가의 shapefile이있는 폴더 연결 추가
- ne_10m_admin_0_countries.shp를 맵으로 끌어다 놓아 ne_10m_admin_0_countries라는 레이어를 만듭니다.
- 새 레이아웃 삽입-A3 Landscape를 사용했습니다.
- 레이아웃에 새 맵 프레임 삽입
- 프로젝트 창의 TestProject 폴더에 New Python Toolbox를 만듭니다.
- 프로젝트 창에서 TestPYT를 마우스 오른쪽 버튼으로 클릭하여 편집하십시오.
- Python Toolbox에 칠레와 스위스라는 두 가지 도구를 제공하려면 코드를 아래 코드로 바꿉니다.
- 스크립트를 저장하고 Python Toolbox를 새로 고쳐 두 가지 새로운 도구를 확인하십시오.
- 칠레 도구를 실행하여 칠레의 레이아웃 확대 / 축소에서지도 프레임을 봅니다.
- 스위스 도구를 실행하여 레이아웃의지도 프레임을 스위스로 확대하십시오.
- 새 작업 항목 삽입
- 작업 항목 1에서 새 작업을 삽입하고 칠레라고 부릅니다.
- 칠레 작업에서 새 단계를 삽입하고 칠레 확대 / 축소라고합니다.
- 단계 동작의 경우 자동 및 숨김으로 설정
- 작업 탭에서 칠레 도구를 선택하여 지오 프로세싱 도구로 명령 / 지오 프로세싱을 설정하려고합니다.
- OK를 선택하면 달라 붙는 것 같습니다
- 완료를 클릭하면 도구를 "잃어버린 것 같습니다"
특히, 내가 만들려고하는 것은 Zoom to Chile 또는 Zoom to Switzerland를 클릭 할 수있는 두 가지 작업이있는 워크 플로우입니다. 그러나 위의 19 단계에서 멈췄습니다.
내가 전반적으로하려는 것은 ArcPy (ArcGIS 10.x 아키텍처의 경우)의 Python AddIn 툴바와 동등한 ArcPy (ArcGIS Pro의 경우)를 두 개의 버튼 (칠레 및 스위스)으로 해당 국가를 확대하는 것입니다.
이 절차를 몇 차례 반복 해 보았으며 한 번은 칠레와 스위스 도구를 작업으로 고수 할 수 있었지만지도 프레임과 상호 작용하지 않는 것 같습니다 (오류 없음, 변경 사항 없음). Python Toolbox에서 실행할 때 도구가 문제없이 계속 작동하더라도 맵 프레임에 표시되는 내용)
이것은 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
수행중인 작업에 관계없이 Python 도구 상자에서 작동하지 않는 것 같습니다. 또한 도구를 선택하고 포함을 활성화하면 도구 상자 매개 변수가 표시되지 않습니다 (즉, 실제로 도구 상자를 제대로로드하지 않음).
—
Evil Genius