বাইরে থেকে কিউজিআইএস-এর জন্য কীভাবে একটি সাধারণ অজগর স্ক্রিপ্টটি চালানো যায় (যেমন সাব্লাইম টেক্সট)?


37

আমি কিউজিআইএসের "বাইরের" থেকে কিউজিআইএস (ম্যাক) এর জন্য কয়েকটি ছোট এবং সাধারণ পাইথন স্ক্রিপ্টগুলি চালাতে চাই। বাইরের সাথে আমি এই প্রসঙ্গে বলতে চাইছি, সাধারণ ওএস কমান্ড লাইন (টার্মিনাল.এপ) বা আরও ভাল, সরাসরি সাব্লাইম টেক্সট (টেক্সট-এডিটর) এর বাইরে, তবে অবশ্যই ইনবিল্ট কিউজিআইএস পাইথন কনসোলের মাধ্যমে নয়।

আমি বিভিন্ন টিউটোরিয়াল যেমন http://www.qgis.org/pyqgis-cookbook/intro.html#python- অ্যাপ্লিকেশন পড়েছি এবং আমি কিউজিআইএস অ্যাপ্লিকেশনটির জন্য একটি রেফারেন্স পেতে সক্ষম হয়েছি, তবে দুর্ভাগ্যক্রমে qgis.utils.ifaceবা আরও গভীর কিছু নয় । এই ছোট কোড স্নিপেটের উদাহরণস্বরূপ সক্রিয় স্তরটির নাম মুদ্রণ করা উচিত ... আমার কাছে যা রয়েছে তা এখানে:

    import sys
    sys.path.append("/Applications/QGIS.app/Contents/Resources/python")

    from qgis.core import *
    import qgis.utils

    print "helo" # console output: helo

    QgsApplication.setPrefixPath("/Applications/QGIS.app/", True)
    QgsApplication.initQgis()

    print QgsApplication # console output: <class 'qgis.core.QgsApplication'>

    print qgis.utils.iface # = console output: none

    aLayer = qgis.utils.iface.activeLayer()
    print aLayer.name()

    QgsApplication.exitQgis()

প্লাগিন বা অন্য কিছু "ভারী" কীভাবে তৈরি করবেন দয়া করে এখন আমাকে উত্তর দিন না। আমি কিউজিআইএস-এ স্বাচ্ছন্দ্যযুক্ত পাঠ্য-সম্পাদক থেকে স্ক্রিপ্টগুলি গুলি করার দ্রুত একটি সহজ পদ্ধতির সন্ধান করছি।

উত্তর:


32

আপনি ifaceএখানে অবজেক্টের একটি রেফারেন্স পেতে পারেন না কারণ এটি এই প্রসঙ্গে নেই। iface( QgisInterface) বস্তু প্লাগিন জন্য একটি সুবিধার বস্তু, বা অ্যাক্সেস করে প্রধান বস্তু, মানচিত্র ক্যানভাস, কিংবদন্তি, রচয়িতা যেমন ইত্যাদি QGIS ভিতরে চলমান, স্ক্রিপ্ট, এবং শুধুমাত্র বিদ্যমান যখন মূল আবেদন চলছে।

আপনি যখন QGIS এপিআই ব্যবহার করে একটি স্বতন্ত্র পাইথন স্ক্রিপ্ট তৈরি করেন তখন এই স্টাফটির কোনওটিরই উপস্থিতি নেই কারণ আপনি নিজের ম্যাপিং অ্যাপ্লিকেশন তৈরি করছেন।

তিনটি পৃথক পরিস্থিতি রয়েছে:

  1. একটি কিউজিআইএস প্লাগইন
  2. অটোমেশনের জন্য QGIS (প্লাগইন নয়) এর ভিতরে চলে এমন একটি স্ক্রিপ্ট
  3. কিউজিআইএস এপিআই ব্যবহার করে স্বতন্ত্র অ্যাপ্লিকেশন

1.এবং এতে 2.অ্যাক্সেস রয়েছে iface, শেষটি তা করে না।

আপনি 3যদি কোনও স্ক্রিপ্ট তৈরি করতে চান যা কোনও মানচিত্রের ক্যানভাসে একটি স্তর খোলার জন্য আপনি এটি করতে পারেনQgsApplication.initQgis()

map = QgsMapCanavs()
layer = QgsVectoryLayer('path.shp','myshapefile','ogr')
map.setLayerSet([layer])

তবে আপনি যদি সত্যিই এমন কোনও সন্ধান করেন 2তবে আপনি এটি কেবল আপনার স্ক্রিপ্ট সম্পাদকটিতে লিখতে পারেন

from qgis.core import *
from qgis.gui import *
import qgis.utils

qgis.utils.iface.activeLayer()

তবে qgis.utilsকাজ করার জন্য এটি কিউজিসআইএসের অভ্যন্তরে চালানো উচিত । স্ক্রিপ্টটি রেখে PATHএবং import scriptnameপাইথন কনসোলে চালানো বা স্ক্রিপ্টরনার প্লাগইন ব্যবহার করে এটি করা যেতে পারে।

নোট করুন QGIS এখনও নয়

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

উদাহরণ স্বরূপ:

qgis --code=mycodefile.py

প্লাগিন লগিং (সংস্করণ 1.8)

আপনি QGIS লগ উইন্ডোতে তথ্য লগ করতে QgsMessageLog শ্রেণি ব্যবহার করতে পারেন। নীচের ডান কোণে হলুদ বিস্মৃত চিহ্ন।

from qgis.core import *
log = lambda m: QgsMessageLog.logMessage(m,'My Plugin') 
log('My message')

বা ল্যাম্বদা ব্যবহার ছাড়াই

QgsMessageLog.logMessage('My message', 'My Plugin')

লাম্বদা ভিত্তিক একটিটিকে আমি পছন্দ করি কারণ এটি কোনও সময় লগ ইন করতে চাইলে সংক্ষিপ্ত এবং কম টাইপ করা হয়।


স্পষ্টতা এবং দ্রুত জবাবের জন্য আপনাকে ধন্যবাদ! তারপরে আমি অপশনটির জন্য মরিয়া অপেক্ষা করছি 4। এরই মধ্যে আমাকে সাথে থাকতে হবে 2, যা সত্যই আমার ব্যস্ততার import scriptপরে সব সময় করা বেদনা reload(script)এবং অবশ্যই আমার সম্পাদক থেকে কিউজিআইএস-এ পরিবর্তিত হয়। আমি স্ক্রিপ্টরুনার প্লাগইনটিও যাচাই করেছিলাম, যা আশাব্যঞ্জক তবে এর পরে আমি print "debug value"কিউজিআইএস কনসোলটিতে কোনও পেতে সক্ষম হইনি। আপনি কি জানেন যে কোনও উপায়ে কিউআইজিআইএস কনসোলে কিছু স্ক্রিপ্টরুনার স্ক্রিপ্ট প্রিন্ট করা যায়? অনেক ধন্যবাদ! আপনার উত্তরের জন্য অপেক্ষা এবং তারপর প্রশ্ন বন্ধ হবে!
বেনিডিক্ট গ্রো

পাইথন কনসোলটি প্রকৃতপক্ষে সেই ধরণের আউটপুটটির জন্য বোঝানো হয় না, কেবল কেবল ইনপুটটির জন্য। আপনি যা করতে পারেন তা হ'ল কিউজিআইএস লগ উইন্ডোতে লগইন করুন। এটি ব্যাখ্যা করতে উত্তরে যুক্ত হবে।
নাথান W

ধন্যবাদ! এটি অত্যন্ত সহায়ক। আমার কাজটি একটি ডিবাগ আউটপুট পেতে একটি পপআপকে অপব্যবহার করা ছিলdef info(text): QMessageBox.information(None,"Debug Info", str(text))
বেনেডিক্ট গ্রো

টাইপো:QgsVector_y_Layer
নিক ভলিনকিন

14

আমি মনে করি নাথান ডাব্লু এর উত্তর পুরানো। আমি নিম্নলিখিত কমান্ডগুলি ব্যবহার করে কমান্ড লাইন (নাথনের অপশন 4) থেকে কিউজিআইএস (সংস্করণ 2.6) অজগর স্ক্রিপ্টগুলি চালাতে সক্ষম হয়েছি।

man qgis
qgis -nologo --project /path/foo.qgs --code /path/foo.py

এটি কাজ করে তবে কেবলমাত্র আমি "টিপস" উইন্ডোটি বন্ধ করার পরে ... ইন্টারফেসটি পুরোপুরি অক্ষম করার এবং --codeঅজগর স্ক্রিপ্টটি কার্যকর করার কোনও উপায় আছে ?
অ্যান্টনি ও।

5

নাথনের বিকল্প 4 এর জন্য আপডেট: (উইন্ডোজ, কিউজিআইএস 2.18 লাস পালমাস)

কিউজিআইএস সহায়তা দস্তাবেজ মুদ্রণ করতে,

qgis - সাহায্য

কিউজিআইএস খুলতে, একটি প্রকল্প লোড করুন, তারপরে, একটি অজগর স্ক্রিপ্টটি চালান।

qgis --nologo - প্রকল্প গ: /path/to/projfile.qgs - কোড কোড: /path/to/code.py

এই কমান্ডগুলি সমস্যা ছাড়াই ওএসজিও 4 ডাব্লু শেলের উপর চলতে হবে।


1
আমার উত্তরটি কিউজিআইএস ৩.৮ (জাঞ্জিবার) এর জন্য এখনও বৈধ।
স্বাচ্ছাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.