QGIS 2.x için Eklenti (plugin) Geliştirme

Sahip olduğu üstün özelliklerinin yanı sıra açık kaynaklı ve ücretsiz olması sebebiyle QGIS, masaüstü CBS yazılımları arasında ön plana çıkmaktadır. Raster,  vektör ve lidar veri modelindeki pek çok dosya formatı ve çeşitli veritabanı bağlantılarını desteklemektedir. Bunun yanında sahip olduğu yüzlerce analiz aracıyla pek çok işlemi rahatlıkla gerçekleştirebilirsiniz. Fakat bu özelliklerin çoğu eklentiler tarafından sağlanmaktadır. Bu konuya QGIS Sextante Eklentisine Bir Bakış  başlıklı yazımda daha önceden değinmiştim.

QGIS ‘in öne çıkan bir diğer önemli unsuru ise Python desteğidir. Sahip olduğu eklentilerin büyük bir kısmı Python ile geliştirilmiştir. Bunun yanında C++ ile de eklenti geliştirmek mümkündür fakat hem hızlı geliştirmeye imkan sağlaması hem de zengin paket desteğinden dolayı geliştiriciler Python ‘u tercih etmektedir.  Ben de raster verilere ait SLD dokümanlarının oluşturulmasını sağlayan SLD4raster eklentisini Python ile geliştirdim. Eklenti bir süre önce resmi onay aldı. Geliştirme sürecinde edindiğim bilgileri bu yazıda sizlerle paylaşacağım.

Gerekenler

Her şeyden önce QGIS ‘e eklenti geliştirmek için öncelikle Python programlama diline hakim olmanız gerekiyor. Bunun yanında QT ile arayüz geliştirebilecek düzeyde olmalısınız. Python diline Türkçe kaynak olarak Fırat Özgül tarafından hazırlanan www.istihza.com  ‘u tavsiye ederim. QT için (pyqt4) ise B.M. Harwani ‘nin kitabı Introduction to Python® Programming and Developing GUI Applications with PyQT oldukça faydalı. QGIS Python API ‘için http://www.qgis.org/en/docs/pyqgis_developer_cookbook/ adresini ziyaret edebilirsiniz.

QGIS 2.x

Qt Designer (QGIS ile geliyor)

PyQt4 (QGIS ile geliyor)

 

Geliştirme Ortamı

Gereken her şey standart QGIS ile gelmektedir. Kodlama için Notepad++ yeterli gelmektedir. Tabii ki istediğiniz IDE ‘yi kullanmakta özgürsünüz. Eklenti arayüzünü geliştirmek için QT Designer ‘ı kullanabilirsiniz. QT Designer ‘a erişmek için Başlat > Programlar > QGIS xx > OSGeo4W  komut satırını açın. Burada designer komutunu vermeniz yeterlidir.

 

Örnek Bir Eklentinin Geliştirilmesi

QGIS, eklentiler için belirli bir kod ve dosya yapısı öngörmektedir. Eğer eklentiniz bu yapıda değilse QGIS tanımayacaktır. Bu aşamada bir eklenti için gereken temel yapıyı oluşmak için Plugin Builder eklentisini kullanabilirisiniz. Bu eklentiyi Extensions >Manage and Install Plugins menüsünden kurabilirsiniz. Aşağıda bu eklentiye ait arayüz gösterilmiştir.

 

Arayüz oldukça basit ve anlaşılır, zaten tüm alanlara ait açıklama verilmiştir. Burada doldurmanız yerleri kırmızı ile işaretledim. Eğer geliştirdiğiniz eklentide hata kontrolü noktasında bazı eksiklerin olduğunu düşünüyorsanız Flag the plugin as experimental seçeneğini işaretlemeniz tavsiye ederim. Ardından OK düğmesine tıklayarak karşınıza gelen ekrandan herhangi bir klasörü seçerek eklentinize ait temel dosyaları oluşturun. Bu işlemin ardından karşınıza bilgi ekranı gelecektir.

 

Oluşturulan dosyaları inceleyecek olursak eklentiye ait simge, diyalog, arayüz dosyaları bulunmaktadır. Bu hali ile bir eklenti neredeyse %95 oranında tamamlanmıştır diyebiliriz. Son olarak  .ui  ve .qrc uzantılı dosyalarını derlemeniz gerekiyor. Fakat öncesinde resources.qrc dosyasının adını resources_rc.qrc olarak düzeltin. Çünkü Plugin Builder eklentisini geliştirenler dosya adını yanlış vermişler. Daha sonra Başlat > Programlar > QGIS xx > OSGeo4W komut satırını açın. Ardından eklenti dosyalarınızın bulunduğu konuma gelerek

pyuic4 –o ui_uzantılı_dosya_adı.py ui_uzantılı_dosya_adı.ui

pyrcc4 -o resources.py resources.qrc

komutlarını verin. Aşağıda örnek ekran görüntüsü verilmiştir.

 

Bu işlemler QT ile alakalı olduğundan bilginiz olduğunu varsayıyorum. Ardından dosyalarınızı içinde bulunduğu klasör ile birlikte QGIS eklentilerinin bulunduğu konuma kopyalayarak manüel olarak kurulumu tamamlayacağız. QGIS eklentileri genel olarak

C:\Users\Kullanıcı_Adınız\.qgis2\python\plugins

konumunda bulunmaktadır. Eklentimize ait klasörü kopyaladıktan sonra QGIS başlatabilirsiniz. İşlemleri doğru yaptıysanız herhangi bir hata almamanız gerekiyor. Örnek olarak hazırladığımız bu eklentiye ait ekran görüntüsü aşağıda verilmiştir.

 

Eğer eklenti arayüzünde değişiklik yapmak isterseniz QT Designer ile eklentinize ait klasördeki .ui uzantılı dosyayı açarak gereken değişiklik yaparak kaydedin. Daha sonra pyuic4 aracı ile yukarıdaki örnekte olduğu gibi tekrar derleme yapın. Ardından QGIS ‘i kapatıp tekrar açmanız gerekiyor. Veya sadece kod üzerinden düzenleme yaptıysanız da yine QGIS ‘i aç-kapa yapmanız gerekiyor ki değişiklikler etkin olsun. Her defasından aç-kapa yapmak istemiyorsanız yine bir diğer QGIS eklentisi olan Plugin Reloader ‘ı kullanabilirsiniz. Plugin Reloader ile belirlediğiniz eklenti tek tıklama ile yeniden yüklenmektedir.

 

Eklentinin  Yayınlaması

Geliştirdiğiniz eklentiyi diğer kullanıcılar ile paylaşabilirsiniz. Bunun için öncelikle herkese açık bir GitHub deposu oluşturup eklentinizi tüm dosyalara ile birlikte bu depoya yükleyin. Bu hali ile isteyen herkes eklentinize rahatlıkla ulaşabilir. Fakat eklentinizi QGIS geliştiricileri tarafından resmi olarak onaylanırsa direkt olarak QGIS Desktop üzerinden Eklentiler menüsünde yer alacaktır. Böylece daha fazla kişiye ulaşabilirsiniz. Bunun için eklentinizi http://planet.qgis.org/plugins/ sayfasına girip “Share Plugin” bağlantısına tıklayarak yüklemeniz gerekiyor. Sitede en fazla 2 hafta süren test işlemlerinin ardından onay verileceği yazıyor fakat benim geliştirdiğim eklenti (SLD4raster) ancak 6 hafta sonra onay aldı (sanıyorum ki çok fazla ilgilenemiyorlar). Böylece siz de açık kaynak kod dünyasına katkıda bulunabilirsiniz.

 

Yayınlamış olduğum yazıları kaynak belirtmek kaydıyla paylaşabilirsiniz.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s