Các tác vụ ArcGIS Pro có hỗ trợ các công cụ Python Toolbox hoạt động trên Map Map không?
Lý do tôi hỏi là tôi bị mắc kẹt khi cố gắng làm như sau:
- Bắt đầu ArcGIS Pro 1.1.1
- Tạo một dự án mới - Tôi đã gọi tôi là TestProject và được đặt trong C: \ Temp
- Sử dụng ngăn Dự án để Thêm kết nối thư mục vào nơi tôi có hình dạng của các quốc gia trên thế giới từ Trái đất tự nhiên ()
- Kéo và thả ne_10m_admin_0_countries.shp vào Bản đồ để tạo lớp có tên ne_10m_admin_0_countries
- Chèn một Bố cục mới - Tôi đã sử dụng Cảnh quan A3
- Chèn Khung bản đồ mới trên Bố cục
- Trong ngăn Dự án, tạo một Hộp công cụ Python mới trong thư mục TestProject - Tôi đã gọi tôi là TestPYT
- Nhấp chuột phải vào TestPYT trong khung Project để chỉnh sửa nó
- Thay thế mã dưới đây để cung cấp cho Python Toolbox hai công cụ được gọi là Chile và Thụy Sĩ
- Lưu tập lệnh và Làm mới Hộp công cụ Python để xem hai công cụ mới
- Chạy công cụ Chile để xem khung bản đồ trên phóng to bố cục sang Chile
- Chạy công cụ Thụy Sĩ để xem khung bản đồ trên bố cục thu phóng đến Thụy Sĩ
- Chèn một mục nhiệm vụ mới
- Trong Mục nhiệm vụ 1, chèn một Nhiệm vụ mới và gọi nó là Chile
- Trong tác vụ Chile, chèn Bước mới và gọi nó là Phóng to Chile
- Đối với hành vi bước làm cho nó tự động và ẩn
- Trên tab Hành động, tôi cố gắng đặt Lệnh / Công cụ địa lý làm Công cụ xử lý địa lý chọn công cụ Chile
- Nó dường như dính khi tôi chọn OK
- Nó dường như "mất" công cụ khi tôi nhấp Xong
Cụ thể, những gì tôi đang cố gắng tạo là một quy trình công việc với hai tác vụ mà tôi có thể nhấp vào để Thu phóng tới Chile hoặc Thu phóng đến Thụy Sĩ nhưng tôi bị kẹt ở bước 19 ở trên.
Những gì tôi đang cố gắng làm tổng thể là tìm một ArcPy (cho ArcGIS Pro) tương đương với thanh công cụ Python AddIn trong ArcPy (cho kiến trúc ArcGIS 10.x) với hai nút (Chile và Thụy Sĩ) để phóng to các quốc gia đó.
Tôi đã thực hiện quy trình này một vài lần và trong một lần, tôi đã có thể khiến các công cụ Chile và Thụy Sĩ gắn bó như các nhiệm vụ, nhưng ngay cả khi đó chúng dường như không tương tác với Khung bản đồ (không có lỗi, chỉ là không thay đổi đến những gì được hiển thị trong Khung bản đồ khi họ chạy), mặc dù các công cụ khi chạy từ Hộp công cụ Python vẫn tiếp tục hoạt động mà không gặp vấn đề gì.
Đây là mã để sao chép / dán vào Hộp công cụ 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