আমি কীভাবে প্রজেক্ট স্তরগুলি পৃথক পৃথক পাইকিউজিআইএস স্ক্রিপ্টে তালিকাভুক্ত করতে পারি?


9

আমি একটি বিদ্যমান .qgs প্রকল্পটি লোড করার চেষ্টা করছি এবং ভিতরে স্তরগুলির একটি তালিকা আনব। আমি প্রকল্পটি খুলতে সক্ষম হব বলে মনে হচ্ছে, তবে আমি স্তরগুলির তালিকা পেতে পারি না। বেসিক পাইকিজিআইএস সিনট্যাক্স সম্পর্কে আমি কিছুটা বিভ্রান্ত, এবং কুকবুক এই নির্দিষ্ট উদাহরণটি আবরণ করে না।

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 এ কিউজিআইএস 2.16.2 ব্যবহার করছিলাম। এর পরে 2.18.2 এ চেষ্টা করেছেন এবং এখনও কাজ করেননি।
কেজেওয়াইড্যাভিস

আমি এই প্রশ্নটি পুনরায় খোলার জন্য পতাকাঙ্কিত করেছি কারণ সংযুক্ত প্রশ্নটি QGIS এর মধ্যে প্রযোজ্য, তবে সমাধানটি পাইথন স্ক্রিপ্টে কোনও কাজ করে না
রাফেল

আপনি কি চেষ্টা করেছেন: স্তরগুলি = QgsMapLayerRegistry.instance ()। MapLayers ()। কি ()
অ্যালবার্ট

আপনি QgsApplication.processEvents()ঠিক পরে sertোকানোর চেষ্টা করতে পারেন 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-বিটের জন্য কিউজিআইএস 2.18.3 এ পরীক্ষিত।

ফলাফল



সম্পাদনা:

আমি বিশ্বাস করি যে আপনার কোড এবং আমি যেটি ব্যবহার করেছি তার মধ্যে প্রধান পার্থক্য হ'ল কিউজেএসপ্লিকেশন তৈরির আগে আপনাকে কিউপ্লায়িকেশন অবজেক্ট তৈরি করতে হবে। সুতরাং আপনার প্রতিস্থাপন করতে হবে:

qgs = QgsApplication([], False)

এর সাথে:

qgs = QApplication([], False)

তবে কিউপ্লিকেশন ক্লাসটি আমদানি করা দরকার সুতরাং আমাদের অবশ্যই নিম্নলিখিতগুলি যুক্ত করতে হবে:

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-বিটে কাজ করেছে। আমি সপ্তাহের পরে অন্যান্য সংস্করণগুলি পরীক্ষা করব।
কেজেওয়াইডিভিস

1
@ জোসেফ, আপনি কি আলাদা তা ব্যাখ্যা করতে পারেন?
রাফেল

@ ইরফেল - ধন্যবাদ, আমি মূল পার্থক্যগুলি অন্তর্ভুক্ত করার জন্য পোস্টটি সম্পাদনা করেছি;)
জোসেফ

1
এছাড়াও 2.14.9x64 Win7x64 QGIS কাজ
রাফায়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.