Apakah tugas ArcGIS Pro mendukung alat Python Toolbox yang beroperasi pada Map Frames?
Alasan saya bertanya adalah bahwa saya buntu ketika mencoba melakukan hal berikut:
- Mulai ArcGIS Pro 1.1.1
- Buat proyek baru - Saya menelepon TestProject tambang dan ditempatkan di C: \ Temp
- Gunakan panel Proyek untuk Menambahkan Koneksi Folder ke tempat saya memiliki shapefile negara-negara di dunia dari Natural Earth ()
- Seret dan letakkan ne_10m_admin_0_countries.shp ke dalam Peta untuk membuat lapisan yang disebut ne_10m_admin_0_countries
- Masukkan Layout baru - Saya menggunakan A3 Landscape
- Sisipkan Bingkai Peta baru di Layout
- Di panel Project, buat New Python Toolbox di folder TestProject - Saya menelepon milik saya TestPYT
- Klik kanan pada TestPYT di panel Proyek untuk mengeditnya
- Ganti kode dengan yang di bawah ini untuk memberikan Python Toolbox dua alat yang disebut Chili dan Swiss
- Simpan skrip dan Refresh the Python Toolbox untuk melihat dua alat baru
- Jalankan alat Chile untuk melihat bingkai peta pada zoom tata letak ke Chili
- Jalankan alat Swiss untuk melihat bingkai peta pada zoom tata letak ke Swiss
- Masukkan Item Tugas Baru
- Dalam Item Tugas 1 masukkan Tugas Baru dan sebut Chile
- Dalam tugas Chili masukkan Langkah Baru dan menyebutnya Zoom to Chile
- Untuk Langkah Perilaku, buatlah Otomatis dan Tersembunyi
- Pada tab Tindakan saya mencoba untuk mengatur Command / Geoprocessing sebagai Alat Geoprocessing memilih alat Chili
- Sepertinya menempel ketika saya memilih OK
- Tampaknya "kehilangan" alat ketika saya mengklik Selesai
Secara khusus, apa yang saya coba buat adalah alur kerja dengan dua tugas yang bisa saya klik untuk Zoom ke Chili atau Zoom ke Swiss tetapi saya terjebak pada langkah 19 di atas.
Apa yang saya coba lakukan secara keseluruhan adalah menemukan ArcPy (untuk ArcGIS Pro) yang setara dengan bilah alat Python AddIn di ArcPy (untuk arsitektur ArcGIS 10.x) dengan dua tombol (Chili dan Swiss) untuk memperbesar ke negara-negara tersebut.
Saya telah menjalankan prosedur ini beberapa kali, dan pada satu kesempatan saya bisa membuat alat Chili dan Swiss tetap sebagai tugas, tetapi bahkan kemudian mereka tampaknya tidak berinteraksi dengan Bingkai Peta (tidak ada kesalahan, hanya tidak ada perubahan untuk apa yang ditampilkan di Bingkai Peta ketika mereka berlari), meskipun alat ketika dijalankan dari Python Toolbox terus bekerja tanpa masalah.
Ini adalah kode untuk menyalin / menempel ke 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