İnsanların bana bu konuda yardımcı olup olamayacağını görmek için IRC'den geçmeye çalıştım, ancak ortam herhangi bir cevabı netleştirmek için biraz beceriksiz görünüyor, bu yüzden bunu deneyeceğim.
ArcPy kullanarak zaten bağımsız uygulamaları programlayabildiğim şekilde PyQGIS kullanarak bağımsız bir uygulama programlamak istiyorum.
PyQGIS'in kendisi açıktır. QGIS konsol düzenleyicisi içinde Python komut dosyalarını çalıştırmakta zorluk çekmedim. Ancak, bağımsız bir komut dosyasında Python bağlarını kullanmak için, bir toplu iş komut dosyası kullanarak ortam ayarlarını değiştirmem gerektiği önerilir (evde Windows Vista kullanıyorum, bu nedenle Windows için toplu komut dosyası konuşuyoruz). Toplu komut dosyasını gerçekten anlamadığım için bu benim tarafımda bir karmaşaya neden oldu ve çalıştırdığım diğer uygulamalar için belirli bir yol olması gereken bir ortamı sıfırladığım fikrinden hoşlanmıyorum.
Neden bu ayarları oluşturmak için talimatlar bu kadar gereksiz karmaşık anlamak ve neden "bağlamaların olduğu yere gidin, bu programın kullanmasını istediğiniz kitaplıkları olun diyen bir kod satırına neden yok anlamak zorlanıyorum ArcPy, insanların bilgisayarın çevre ayarlarıyla uğraşmalarını gerektirmez, bu yüzden PyQGIS'in neden yaptığını anlamakta zorluk çekiyorum. Bana öyle geliyor ki insanlar kendilerine Windows Toplu Komut Dosyası Dili öğretmek yerine vazgeçecekler.
Şimdi, QGIS'in konsol düzenleyicisinde bir komut dosyası çalıştırdığımda çalıştığını fark ettim. Ayrıca, komut dosyası çalıştıktan sonra QGIS'in geri kalanını da kullanılamaz hale getirir, bu nedenle daha sonra tekrar QGIS'i yeniden başlatmam gerekir, ancak komut dosyası tam olarak çalışmayı programladığım şekilde çalışır. Ama bunu QGIS uygulamasının dışında yaptığım zaman yapmaz. Sorun, QGIS uygulaması (qgis.core ve qgis.utils) tarafından otomatik olarak içe aktarılan bazı Python paketini içe aktarmada başarısız olduğum gibi görünmüyor - Diğer tüm paket içe aktarmalarıyla birlikte bağımsız komut dosyamda bu içe aktarma ifadeleri var komut dosyası gerektirir. Bu, farkın QGIS uygulamasının harici ortam değişkenlerini doğru şekilde ayarladığına inanmasına neden oluyor, ancak bağımsız bir komut dosyası olarak çalıştırdığımda bu değişkenler düzgün ayarlanmadı.
Ayrıca, bağımsız bir komut dosyası olarak komut dosyasını çalıştırdığınızda, bir hata atmadan tüm kod üzerinden alır; sadece kod komutlarını yapmaz. Komut dosyasını konsol düzenleyicisinde çalıştırdığımda her şeyi doğru yapıyor. Bağımsız olarak çalıştırdığımda, bir pencere oluşturur, daha sonra hiçbir hata atmadan hemen onu yok eder. Böylece yorumlayıcı senaryodan yapmasını istediğim her şeyi anlar - bunu yapmaz.
İşte senaryo:
from PyQt4 import *
from PyQt4 import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
from qgis.utils import *
import Tkinter
from Tkinter import *
import sys
import os
qgishome = "c:/OSGeo4W/apps/qgis/"
app = QgsApplication([], True)
QgsApplication.setPrefixPath(qgishome, True)
QgsApplication.initQgis()
canvas = QgsMapCanvas()
canvas.setCanvasColor(Qt.yellow)
canvas.enableAntiAliasing(True)
canvas.show()
layer = QgsVectorLayer(r"c:/GIS Data/fed308/cpc.shp", "Ridings", "ogr")
reg = QgsMapLayerRegistry.instance()
reg.addMapLayer(layer)
canvas.setExtent(layer.extent())
canvas.setLayerSet([QgsMapCanvasLayer(layer)])
QgsApplication.exitQgis()
Lütfen ... Bu komut dosyasını QGIS dışında çalıştırabilmemin ve QGIS içinde olduğu gibi çalışmasını sağlamanın bir yolu var mı (ideal olarak en sonunda işleri kapatmadan)?
QGIS harika bir program ve PyQGIS, ArcPy'nin yaptığı kadar sezgisel görünüyor ve açık kaynaklı bir yazılımın sahip olması için gerçek bir avantaj olacak - ancak insanlar şimdiye kadar yaşadığım tüm çemberlerden geçmek zorunda kalırsa ve hala bağımsız bir uygulamaya sahip değilseniz ArcPy'e erişimi olduğu gibi PyQGIS kütüphanelerine erişim, bana öyle geliyor ki PyQGIS insanlara pek faydası olmayacak. Umarım yanılıyorum ve bu şimdiye kadar olduğundan daha kolay. Herkesin bir çözümü var mı?