मैं एक स्वसंपूर्ण PyQGIS स्क्रिप्ट में प्रोजेक्ट परतों को कैसे सूचीबद्ध कर सकता हूं?


9

मैं एक मौजूदा .qgs प्रोजेक्ट को लोड करने और अंदर की परतों की एक सूची प्राप्त करने की कोशिश कर रहा हूं। मुझे लगता है कि यह परियोजना खोलने में सक्षम है, लेकिन मुझे परतों की सूची नहीं मिल सकती है। मैं मूल PyQGIS सिंटैक्स के रूप में थोड़ा भ्रमित हूं, और रसोई की किताब इस विशिष्ट उदाहरण को कवर नहीं करती है।

from qgis.core import *
from PyQt4.QtCore import QFileInfo


QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis-ltr", True)
qgs = QgsApplication([], False)
qgs.initQgis()
# Get the project instance
project = QgsProject.instance()
# Open the project
project.read(QFileInfo(
        r'C:\path\to\project\project.qgs'))
print project.fileName()
# Get the layers in the project
layers = QgsMapLayerRegistry.instance().mapLayers()

print layers
qgs.exitQgis()

वर्तमान में, यह सिर्फ इस layersतथ्य के बावजूद कि यह परियोजना मौजूद है और इसमें कई परतें हैं, खाली खाली रिटर्न देता है।


QGIS 2.18.2ओपी और @ जर्मेनक्रिल्लो के आजमाए हुए चरणों में भी मुझे यही समस्या है । ओपी का संस्करण क्या है?
राफेल

मैं उस समय विंडोज 7x64 पर QGIS 2.16.2 का उपयोग कर रहा था। 2.18.2 पर कोशिश की है और फिर भी काम नहीं किया है।
KJYDavis

मैंने इस प्रश्न को फिर से खोलने के लिए ध्वजांकित किया क्योंकि जुड़ा हुआ प्रश्न QGIS के भीतर लागू होता है, लेकिन समाधान एक स्वसंपूर्ण पायथन लिपि में काम नहीं करता है
राफेल

क्या आपने कोशिश की: परतें = QgsMapLayerRegistry.instance ()। MapLayers ()। कुंजियाँ ()
अल्बर्ट

क्या आप QgsApplication.processEvents()सही डालने की कोशिश कर सकते हैं project.read?
मथियास कुह्न

जवाबों:


7

जब मैं आपका कोड चलाता हूं, तो मुझे एक खाली शब्दकोश भी मिलता है, लेकिन मेरे लिए निम्नलिखित कार्य जो थोड़ा अलग है:

from qgis.core import *
from PyQt4.QtCore import QFileInfo
from PyQt4.QtGui import QApplication
import os

from os.path import expanduser
home = expanduser("~")

QgsApplication( [], False, home + "/AppData/Local/Temp" )
QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
app = QApplication([], True)
QgsApplication.initQgis()

# Get the project instance
project = QgsProject.instance()
# Open the project
project.read(QFileInfo('C:\path\to\project\project.qgs'))
print project.fileName()
# Get the layers in the project
layers = QgsMapLayerRegistry.instance().mapLayers()
print layers

QgsApplication.exitQgis()
app.exit()

विंडोज 7 64-बिट के लिए QGIS 2.18.3 पर परीक्षण किया गया।

परिणाम



संपादित करें:

मुख्य अंतर, मेरा मानना ​​है कि आपके कोड और मैंने जो उपयोग किया है, वह यह है कि QgsApplication बनाने से पहले आपको QApplication ऑब्जेक्ट बनाना होगा। इसलिए आपको प्रतिस्थापित करने की आवश्यकता होगी:

qgs = QgsApplication([], False)

इसके साथ:

qgs = QApplication([], False)

लेकिन QApplication वर्ग को आयात करने की आवश्यकता है ताकि हमें निम्नलिखित जोड़ना चाहिए:

from PyQt4.QtGui import QApplication

और अंत में, यदि आप एक सफाई करना चाहते हैं, तो आपको अंत में निम्नलिखित जोड़ना होगा।

QgsApplication.exitQgis()

तो आप निम्नलिखित कोड का उपयोग करने की कोशिश कर सकते हैं जो आपके मूल कोड के अधिक करीब है:

from qgis.core import *
from PyQt4.QtCore import QFileInfo
from PyQt4.QtGui import QApplication

QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
qgs = QApplication([], False)
QgsApplication.initQgis()
# Get the project instance
project = QgsProject.instance()
# Open the project
project.read(QFileInfo('C:/path/to/project/project.qgs'))
print project.fileName()
# Get the layers in the project
layers = QgsMapLayerRegistry.instance().mapLayers()

print layers
QgsApplication.exitQgis()

इसने Win7x64 QGIS 2.8.6 32-बिट पर काम किया। मैं सप्ताह में बाद में अन्य संस्करणों की जाँच करूँगा।
KJYDavis

1
@ जोसेफ, क्या आप बता सकते हैं कि क्या अलग है?
राफेल

@ रैपेल - धन्यवाद, मैंने मुख्य अंतरों को शामिल करने के लिए पोस्ट को संपादित किया है;)
जोसफ

1
इसके अलावा Win7x64 QGIS 2.14.9x64 पर काम किया
राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.