ArcGIS Pro görevleri Harita Çerçevelerinde çalışan Python Araç Kutusu araçlarını destekliyor mu?
Sormamın nedeni, aşağıdakileri yapmaya çalışırken takılıp kalmam:
- ArcGIS Pro 1.1.1'i başlatın
- Yeni bir proje oluştur - Mine TestProject'i aradım ve C: \ Temp içine yerleştirdim
- Natural Earth'ten dünya ülkelerinin bir şekil dosyasına sahip olduğum yere Klasör Bağlantısı Eklemek için Proje bölmesini kullanın ()
- Ne_10m_admin_0_countries adlı katmanı oluşturmak için Haritaya sürükleyip ne_10m_admin_0_countries.shp yazın
- Yeni bir Düzen Ekle - A3 Yatay kullandım
- Mizanpaj'a yeni bir Harita Çerçevesi ekleme
- Proje bölmesinde TestProject klasöründe yeni bir Python araç kutusu oluşturun - mine TestPYT
- Düzenlemek için Proje bölmesinde TestPYT'ye sağ tıklayın
- Python Toolbox'a Şili ve İsviçre adlı iki araç vermek için kodu aşağıdaki kodla değiştirin
- İki yeni aracı görmek için komut dosyasını kaydedin ve Python Araç Kutusu'nu yenileyin
- Şili mizanpajındaki harita çerçevesini görmek için Şili aracını çalıştırın
- İsviçre'ye yakınlaştırma düzeninde harita çerçevesini görmek için İsviçre aracını çalıştırın
- Yeni Görev Öğesi Ekleme
- Görev Öğesi 1'e Yeni Görev ekleyin ve Şili olarak adlandırın
- Şili görevine Yeni Bir Adım ekleyin ve Şili'ye Yakınlaştır deyin
- Adım Davranışı için Otomatik ve Gizli yapın
- Eylemler sekmesinde Komut / Coğrafi İşleme'yi Şili aracını seçerek bir Coğrafi İşleme Aracı olarak ayarlamaya çalışıyorum
- Tamam'ı seçtiğimde yapışıyor gibi görünüyor
- Tamam'ı tıkladığımda aracı "kaybediyor" gibi görünüyor
Özellikle, oluşturmaya çalıştığım şey, Şili'ye Yakınlaştır veya İsviçre'ye Yakınlaştır'a tıklayabildiğim iki görev içeren bir iş akışıdır, ancak yukarıdaki 19. adımda takılı kaldım.
Genel olarak ne yapmaya çalışıyorum, ArcPy (ArcGIS 10.x mimarisi için) Python AddIn araç çubuğuna eşdeğer bir ArcPy (ArcGIS Pro için) bu ülkelere yakınlaştırmak için iki düğme (Şili ve İsviçre) bulmaktır.
Bu prosedürü birkaç kez geçirdim ve bir keresinde Şili ve İsviçre araçlarını görev olarak yapıştırabildim, ancak o zaman bile Harita Çerçevesi ile etkileşime girmediler (hata yok, sadece değişiklik yok) Python Araç Kutusundan çalıştırılan araçlar sorunsuz çalışmaya devam etse bile, koştuklarında Harita Çerçevesinde görüntülenenlere).
Bu, Python Araç Kutusu'na (TestPYT) kopyalamak / yapıştırmak için kullanılan koddur.
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