ArcGIS ve Python: Python Toolbox Oluşturma
ArcGIS Desktop platformlarındaki (ArcGIS Pro ve ArcMap) iş akışlarınızı otomatize etmek için Model Builder, ya da Python scriptleri kullanabilirsiniz.
Model Builder, karmaşık iş akışlarını görsel ve sezgisel olarak tasvir etmede daha iyi olsa da, Python kadar esnek bir çalışma ortamı sağlayamaz. Python fonksiyonalitesi ve açık kaynaklı kütüphaneleriyle yapabilecekleriniz daha geniş. Bu blog yazımızda, iş akışlarınızı otomatize ettiğiniz kodlarınızdan, kullanıcı dostu arayüze sahip araçlar oluşturmayı göstereceğiz.
NOT: Aşağıdaki örnek ArcGIS Pro için oluşturulmuştur. ArcGIS Pro, Python 3 sürümünü kullanırken, ArcMap Python 2.7 kullandığından kodlarda küçük farklılıklar içerebilir.
NOT 2: Toolbox, araç kutusu; Tool, araç olarak Türkçeleştirilmiştir.
Python Toolbox, bir ya da daha fazla aracınızı barındıran bir araç kutusudur. ArcGIS Desktop uygulamalarından Python araç kutusu oluşturabilirsiniz. Oluşturduğunuz araç kutusu dosyası taslak formatıyla karşınıza çıkar. Bu .pyt dosyasının içerisinde, 2 adet Class yapısı bulunmaktadır. Birincisi, dosyanın araç kutusu şeklinde ArcGIS Pro’da açılmasını sağlarken, ikisincisi aracınızı tanımlar. ‘Toolbox Class’ının adını değiştirmemelisiniz. Eğer, araç kutunuza özel bir ad vermek istiyorsanız, dosyanızın adında değişiklik yapabilirsiniz (Taşkın Analizi.pyt).
Araca özel bir ad vermek için ise, ‘Tool Class’ının içindeki ‘self.label’ değişkenindeki ‘Tool’ ibaresini silip, aracınızı yeniden adlandırabilirsiniz.
1. Birden fazla araç oluşturmak
Eğer araç kutunuzda birden fazla araç oluşturmak istiyorsanız, ‘Tool Class’ını kopyalayıp, farklı Class isimleri belirtmelisiniz (Tool, Tool2). Bu belirttiğiniz adları, ‘Toolbox Class’ının içindeki ‘self.tools’ satırına eklemelisiniz ki, diğer araçlarınız da araç kutunuz tarafından tanımlansın.
2. Girdi/ Çıktı Değerlerini Oluşturan Parametreleri Oluşturma
‘Tool Class’ınızın içindeki ‘getParameterInfo’ fonksiyonunda, aracı çalıştırmak için gerekli olan girdi ve çıktılar tanımlanır.
2.1. Değişkenleri Belirleme
Her bir parametre için 5 farklı değişken girilmelidir.
- ‘displayName’ parametrenin araç arayüzünde görüntülenecek adını,
- ‘name’ parametrenin Python içerisindeki adını,
- ‘datatype’ veri tipini,
- ‘parameterType’ aracın çalışması için bu parametrenin doldurulmasının zorunlu olup olmadığını belirtir. Örneğin parametre tipi olarak ‘Required’ belirlediyseniz, araç arayüzünde bu parametrenin doldurulacağı satırda kırmızı yıldız bulunur ve parametre doldurulmadan Çalıştır(Run) butonuna basılamaz.
- ‘direction’ ise parametrenin girdi, çıktı ya da araç tarafından türetilmiş olduğunun belirtildiği alandır. Örneğin bu parametre ‘Input’ olarak belirlenirse, araç arayüzünde kullanıcıdan doldurulması beklenir. ‘Output’ olarak belirlenirse, araç arayüzünde değil, araç çıktısı olarak karşımıza çıkar.
Parametrelerin değer kümelerinin belirtildiği tabloya buradan ulaşabilirsiniz.
2.2. Veri tipleri
Veri türlerinin ayrıntılı listesine buradan ulaşabilirsiniz. En çok kullanılan bazı veri türleri:
- Feature Class: “DEFeatureClass”
- Raster Dataset: “DERasterDataset”
- Alan: “Field”
- Çalışma alanı (Klasör ya da geodatabase): “DEWorkspace”
Araçları oluşturduk, girdi ve çıktı parametreleri belirledik. Şimdi ise aracın çalıştıracağı işlemleri belirten adımla aracı tamamlayabiliriz. İşlemlerin tanımlandığı fonksiyonda(execute) kullanılmak üzere yukarıda oluşturduğumuz parametreler return ifadesi ile döndürülür.
NOT: Class yapısında bulunan ‘isLicenced’, ’updateParameters’ ve ‘updateMessages’ Class’ları iş akışınıza göre opsiyonel kullanılabilecek fonksiyonlardır.
3. İş akışlarını kodlama
‘execute’ Fonksiyonu ile parametrelerinizi manipüle edebilir ve araç çıktınızı uygun iş akışları sonucunda oluşturabilirsiniz. Aşağıdaki örnekte, ‘getParameterInfo’ fonksiyonunun altında oluşturduğumuz ve ‘return’ ifadesi ile döndürdüğümüz parametreleri burada kullanacağız.
Oluşturduğumuz aracı, nasıl düzenlendiğini, nasıl çalıştığını aşağıdaki videodan takip edebilirsiniz.
ArcGIS ve Python blog serimizin ikinci blogunda ise Python’daki iş sürecinize değinilmiştir. Sürecinizi hızlandıracak ve kolaylaştıracak birkaç satırlık kod örneklerine erişmek için tıklayın.