1. Başlangıç

Bu dökümanın aynı anda eğitim ve referans kaynağı olması hedeflenmiştir. Tüm kullanım senaryolarını gösterilmesede genel kullanım yöntemlerini göstermesi hedeflenmiştir.

Python desteği ilk olarak QGIS 0.9 versiyonunda başladı. QGIS Masaüstü versiyonunda Python kullanmanın birçok yolu vardır. (bu yöntemler):

  • QGIS içinde Python konsolundan komutlarla

  • Eklentiler oluşturarak ve bileşenleri kullanarak

  • QGIS programını çalıştırdığınız anda otomatik çalışacak Python kodları ile

  • Create processing algorithms

  • Create functions for expressions in QGIS

  • QGIS API’si kullanan özelleşmiş programlar yazarak

Python eklentileri ayrıca QGIS Server versiyonunda çalışabilir, eklentilere erişim için (bkz. QGIS Server and Python) Python eklentileri gömülü QGIS Server Python programndan çalıştırılabilir.

Referans sınıf ve kütüphanelere QGIS API linkinden bakabilirsiniz. Pythonic QGIS API (pyqgis) arayüzü, C++ API eklentisi ile benzerdir.

Komut işleme yöntemlerini keşfetmek için önceden yazılmış eklentilere plugin repository adresine bakabilir ve kodları inceleyebilirsiniz.

1.1. Python Konsolunda Kodlama

QGIS programlama için bütünleşik bir Python console ‘u içerir. Konsol Plugins ▶ Python Console menüsünden açılabilir:

../../_images/console.png

Şekil 1.4 QGIS Python konsolu

Yukarıdaki ekran görüntüsü katman listesinde seçili olan katmanın bilgilerine erişmeyi gösteriyor. Katmanın ID kodu, seçili katman vektör katmanı ise çizim nesnelerinin sayısını gösteriyor. QGIS ortamıyla etkileşime geçmek için QgisInterface sınıfının iface değişkeni kullanılır. Bu arayüz ile harita çizim alanına, menülere, araç kutularına ve QGIS programının diğer parçalarına erişebilirsiniz.

Kullanıcı kolaylığı açısından aşağıdaki kodlar konsol açılır açılmaz işletilir. (gelecekte başlangıç kodlarını ayarlamak mümkün olacak)

from qgis.core import *
import qgis.utils

Konsolu sıklıkla kullananlar için konsolu başlatmak için klavye kısayolları ataması (within Settings ▶ Keyboard shortcuts…) içerisinden yapılabilir.

1.2. Python eklentileri

QGIS özellikleri eklentilerle genişletilebilir. Eklentiler Python’ da yazılabilir. C++ eklentilerine göre avantajı dağıtımının kolaylığıdır (her platform için derlenmesi gerekmez) ve geliştirmesi basittir.

Python desteği verilmeye başlandığında birçok eklenti farklı fonksiyonelliklerle yazılmıştı. Eklenti yükleyici Python eklentilerini kolayca yüklemenizi, güncellemenizi ve kaldırmanızı sağlar. Python Plugins sayfasında eklentiler ve eklenti geliştirmeleri hakkında daha fazla bilgiye erişebilirsiniz.

Python içerisinde uygulama yazmak basittir, detaylı bilgi için Python Eklentileri Geliştirme sayfasına bakınız.

Not

Python eklentileri ayrıca QGIS sunucu versiyonu içinde mevcuttur. Detaylar için QGIS Server and Python bölümüne bakınız.

1.3. Python kodunu QGIS başlangıcında çalıştırmak

Python kodunu QGIS başlarken çalıştırmanın iki farklı yöntemi vardır.

  1. startup.py dosyası oluşturmak

  2. ``PYQGIS_STARTUP``ortam değişkenini mevcut bir Python dosyasının yolunu ayarlamak

1.3.1. startup.py dosyası

QGIS her başlatıldığında, Kullanıcının Python home klasöründen

  • Linux: .local/share/QGIS/QGIS3

  • Windows: AppData\Roaming\QGIS\QGIS3

  • macOS: Library/Application Support/QGIS/QGIS3

startup.py dosyasını arar. Eğer dosya mevcutsa, yerleşik Python yorumlayıcısı dosyayı çalıştırır.

Not

Varsayılan dosya yolu işletim sistemine bağlı olarak değişir. Tam dosya yolunu bulmak için; Python konsolunu açın ve QStandardPaths.standardLocations(QStandardPaths.AppDataLocation) kodunu çalıştırın, varsayılan dosya yolları listesini verecektir.

1.3.2. PYQGIS_STARTUP ortam değişkeni

PYQGIS_STARTUP ortam değişkenine mevcut bir Python kodu dosyası yolunu girerek QGIS başlatma sürecinde çalıştırabilirsiniz.

Kod, QGIS başlatma süreci tamamlanmadan önce çalışır. Bu yöntem sys.path’ i temizlemek için kullanışlıdır. İstenmeyen dosya yollarını temizlemek veya özelleşmiş Python sanal ortamı oluşturmadan izolasyonları/yüklemeleri ayarlamak için kullanılabilir. Örneğin Mac. ortamında homebrew veya MacPorts yüklenmesi gibi.

1.4. Python Uygulamaları

Bu yapı otomasyon işlemler hazırlamak için çoğu zaman kullanışlıdır. PyQGIS ile — qgis.core modülünü çağırın, başlatın ve işlemleri yapmaya hazırsınız.

— ölçümlemeleri yapmak, haritayı PDF olarak çıktılamak v.b. CBS fonksiyonlarını kullanarak interaktif uygulamalar yazabilirsiniz. qgis.gui modülü çeşitli GUI bileşenleri sunar, çoğunluğu harita çizim bileşenleri ile uygulamanızla bağlayabilirsiniz. Yakınlaştırma, konumlama veya çeşitli harita araçları gibi.

PyQGIS özel uygulamaları veya bağımsız kodları QGIS kaynaklarını çağırmalıdır. Mesela projeksiyon bilgisi, vektör ve resim katmanları sağlayıcı kodları gibi. Uygulama kodunuz içerisinde birkaç satır ile QGIS kaynaklarını çağırabilirsiniz. Özel uygulamalar ve bağımsız uygulamalar için QGIS kaynaklarını çağırma işlemi benzerdir. Örnekler hemen aşağıdaki başlıkta.

Not

Kod dosyalarınıza ad olarak qgis.py kullanmayın. Python iki benzer isimli dosyadan kod çağıramayacaktır.

1.4.1. PyQGIS bağımsız kodlarını kullanma

Bağımsız çalışan bir kod dosyasında QGIS kaynaklarını çağırmak için kodun başına eklenecekler:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from qgis.core import *

# Supply path to qgis install location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)

# Create a reference to the QgsApplication.  Setting the
# second argument to False disables the GUI.
qgs = QgsApplication([], False)

# Load providers
qgs.initQgis()

# Write your code here to load some layers, use processing
# algorithms, etc.

# Finally, exitQgis() is called to remove the
# provider and layer registries from memory
qgs.exitQgis()

Öncelikle qgis.core modülünü çağırmalı ve dosya konumunu belirmeliyiz. Modül dosya konumu sisteminizde QGIS yükleme konumudur. Kod içerisinde setPrefixPath metodunu çağırarak ayarlanır. setPrefixPath metodun ikinci argümanını True olarak ayarlayarak öntanımlı dosya konumunun kullnılacağı belirtilir.

QGIS yükleme konumu işletim sistemine göre değişiklik gösterir. Sisteminizdeki yükleme konumunu bulmanın en kolay yolu Python Konsolunda Kodlama içerisinde QgsApplication.prefixPath() komutunun çıktısına bakmaktır.

Önek yolu yapılandırıldıktan sonra, `` qgs`` değişkenindeki `` QgsApplication`` referansını kaydediyoruz. İkinci argüman, bağımsız bir komut dosyası yazdığımız için GUI’yi kullanmayı planlamadığımızı belirten `` False ‘’ olarak ayarlanmıştır. `` QgsApplication`` yapılandırıldığında, QGIS veri sağlayıcılarını ve katman kayıt defterini `` qgs.initQgis () `` yöntemini çağırarak yüklüyoruz. QGIS başlatıldığında, komut dosyasının geri kalanını yazmaya hazırız. Son olarak, veri sağlayıcılarını ve katman kayıt defterini bellekten kaldırmak için `` qgs.exitQgis () `` diyerek tamamlıyoruz.

1.4.2. PyQGIS’ i özel uygulamalarda kullanma

Ref: standalonescript ve özel PyQGIS uygulaması arasındaki tek fark,` QgsApplication` somutlaştırılırken ikinci argüman. Bir GUI kullanmayı planladığımızı belirtmek için `` False`` yerine `` True`` değerini iletin.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from qgis.core import *

# Supply the path to the qgis install location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)

# Create a reference to the QgsApplication.
# Setting the second argument to True enables the GUI.  We need
# this since this is a custom application.

qgs = QgsApplication([], True)

# load providers
qgs.initQgis()

# Write your code here to load some layers, use processing
# algorithms, etc.

# Finally, exitQgis() is called to remove the
# provider and layer registries from memory
qgs.exitQgis()

Artık QGIS API ile çalışabilirsiniz - katmanları yükleyebilir ve bir harita tuvali ile GUI’yi işleyebilir veya tetikleyebilirsiniz. İmkanlar sonsuzdur :-)

1.4.3. Özel Bağımısız Uygulamaları Kullanma

İyi bilinen bir konumda değilse sisteminize QGIS kitaplıklarını ve uygun Python modüllerini nerede arayacağınızı söylemeniz gerekir - aksi takdirde Python şikayet edecektir

>>> import qgis.core
ImportError: No module named qgis.core

Bu, `` PYTHONPATH`` ortam değişkeni ayarlanarak düzeltilebilir. Aşağıdaki komutlarda, `` <qgispath> `` gerçek QGIS kurulum yolunuzla değiştirilmelidir:

  • on Linux: export PYTHONPATH=/<qgispath>/share/qgis/python

  • on Windows: set PYTHONPATH=c:\<qgispath>\python

  • on macOS: export PYTHONPATH=/<qgispath>/Contents/Resources/python

Şimdi, PyQGIS modüllerinin yolu biliniyor, ancak bunlar `` qgis_core`` ve `` qgis_gui`` kitaplıklarına bağlı (Python modülleri yalnızca paketleyici görevi görüyor). Bu kütüphanelerin yolu işletim sistemi tarafından bilinmiyor olabilir ve daha sonra tekrar bir içe aktarma hatası alırsınız (mesaj sisteme bağlı olarak değişebilir)

>>> import qgis.core
ImportError: libqgis_core.so.3.2.0: cannot open shared object file:
  No such file or directory

Dinamik bağlayıcının arama yoluna QGIS kitaplıklarının bulunduğu dizinleri ekleyerek bunu düzeltin:

  • on Linux: export LD_LIBRARY_PATH=/<qgispath>/lib

  • on Windows: set PATH=C:\<qgispath>\bin;C:\<qgispath>\apps\<qgisrelease>\bin;%PATH% where <qgisrelease> should be replaced with the type of release you are targeting (eg, qgis-ltr, qgis, qgis-dev)

Bu komutlar, başlatma işlemiyle ilgilenecek bir önyükleme komut dosyasına yerleştirilebilir. PyQGIS kullanarak özel uygulamalar dağıtırken, genellikle iki olasılık vardır:

  • kullanıcının uygulamanızı yüklemeden önce QGIS kurmasını gerektirir. Uygulama yükleyici, QGIS kitaplıklarının varsayılan konumlarını aramalı ve bulunmazsa kullanıcının yolu ayarlamasına izin vermelidir. Bu yaklaşım daha basit olma avantajına sahiptir, ancak kullanıcının daha fazla adım atmasını gerektirir.

  • Uygulamanızla birlikte QGIS paketi. Uygulamanın yayınlanması daha zor olabilir ve paket daha büyük olacaktır, ancak kullanıcı ek yazılım parçaları indirme ve yükleme yükünden kurtarılacaktır.

İki dağıtım modeli karıştırılabilir. Windows ve macOS’ta bağımsız uygulamalar sağlayabilirsiniz, ancak Linux için CBS kurulumunu kullanıcıya ve paket yöneticisine bırakır.

1.5. PyQt ve SIP teknik notları

Komut dosyası yazma için en çok tercih edilen dillerden biri olduğu için Python’a karar verdik. QGIS 3’teki PyQGIS bağlamaları SIP ve PyQt5’e bağlıdır. Daha yaygın olarak kullanılan SWIG yerine SIP kullanmanın nedeni, QGIS kodunun Qt kütüphanelerine bağlı olmasıdır. Qt (PyQt) için Python bağlamaları SIP kullanılarak yapılır ve bu da PyQGIS’in PyQt ile sorunsuz entegrasyonunu sağlar.