ArcGIS Pro 작업은 맵 프레임에서 작동하는 Python Toolbox 도구를 지원합니까?


10

ArcGIS Pro 작업은 맵 프레임에서 작동하는 Python Toolbox 도구를 지원합니까?

내가 묻는 이유는 다음을 수행하려고 할 때 갇혀 있기 때문입니다.

  1. ArcGIS Pro 1.1.1 시작
  2. 새 프로젝트 만들기-내 TestProject라는 C : \ Temp에 배치
  3. 프로젝트 창을 사용하여 Natural Earth ()에서 전 세계 국가의 shapefile이있는 폴더 연결 추가
  4. ne_10m_admin_0_countries.shp를 맵으로 끌어다 놓아 ne_10m_admin_0_countries라는 레이어를 만듭니다.
  5. 새 레이아웃 삽입-A3 Landscape를 사용했습니다.
  6. 레이아웃에 새 맵 프레임 삽입
  7. 프로젝트 창의 TestProject 폴더에 New Python Toolbox를 만듭니다.
  8. 프로젝트 창에서 TestPYT를 마우스 오른쪽 버튼으로 클릭하여 편집하십시오.
  9. Python Toolbox에 칠레와 스위스라는 두 가지 도구를 제공하려면 코드를 아래 코드로 바꿉니다.
  10. 스크립트를 저장하고 Python Toolbox를 새로 고쳐 두 가지 새로운 도구를 확인하십시오.
  11. 칠레 도구를 실행하여 칠레의 레이아웃 확대 / 축소에서지도 프레임을 봅니다.
  12. 스위스 도구를 실행하여 레이아웃의지도 프레임을 스위스로 확대하십시오.
  13. 새 작업 항목 삽입
  14. 작업 항목 1에서 새 작업을 삽입하고 칠레라고 부릅니다.
  15. 칠레 작업에서 새 단계를 삽입하고 칠레 확대 / 축소라고합니다.
  16. 단계 동작의 경우 자동 및 숨김으로 설정
  17. 작업 탭에서 칠레 도구를 선택하여 지오 프로세싱 도구로 명령 / 지오 프로세싱을 설정하려고합니다.

여기에 이미지 설명을 입력하십시오

  1. OK를 선택하면 달라 붙는 것 같습니다

여기에 이미지 설명을 입력하십시오

  1. 완료를 클릭하면 도구를 "잃어버린 것 같습니다"

특히, 내가 만들려고하는 것은 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

답변:


4

* .PYT 툴박스는 ArcGIS Pro 1.0 및 1.1의 작업에서 지원되지 않습니다.

그러나 ArcGIS Pro 1.2부터 지원되었습니다.

이 문제를 해결하려면 도구를 지오 프로세싱 모델에 삽입 한 다음 작업 단계를 사용하여 모델을 호출하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.