কেন স্ট্যান্ডোলোন পাইকজিআইজিএস প্রসেসিং স্ক্রিপ্টে আমদানির ক্রমের বিষয়টি বিবেচনা করে?


13

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

আপনি পাইথন কনসোলটি খোলার মাধ্যমে এবং নিম্নলিখিত স্ক্রিপ্টটি প্রবেশ করে সমস্যার পুনরুত্পাদন করতে পারেন (আমি জিএনইউ / লিনাক্স, কিউজিআইএস ২.6.১, প্রসেসিং প্লাগইন v.2.2.0-2 এবং পাইথন ২.7.৩ ব্যবহার করে):

# Prepare the environment
import sys
from qgis.core import QgsApplication
from PyQt4.QtGui import QApplication
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Prepare processing framework 
sys.path.append('/home/YOUR_USER/.qgis2/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()

print Processing.getAlgorithm("qgis:creategrid")

# Exit applications
QgsApplication.exitQgis()
QApplication.exit()

আপনার প্রাপ্ত করা উচিত:

ALGORITHM: Create grid
    HSPACING <ParameterNumber>
    VSPACING <ParameterNumber>
    WIDTH <ParameterNumber>
    HEIGHT <ParameterNumber>
    CENTERX <ParameterNumber>
    CENTERY <ParameterNumber>
    GRIDTYPE <ParameterSelection>
    CRS <ParameterCrs>
    SAVENAME <OutputVector>

অন্যদিকে, আপনি যদি আমদানির ক্রমটি পরিবর্তন করেন (লাইন 3 এবং 4), এইভাবে:

from PyQt4.QtGui import QApplication
from qgis.core import QgsApplication

স্ক্রিপ্টটি এখন ফিরে আসে ... None, কারণ অ্যালগরিদম খুঁজে পাওয়া যায় নি।

এই সমস্যাটি সূচিত করে যে আপনি QGIS এর বাইরে প্রক্রিয়াকরণ অ্যালগরিদমগুলি চালাতে পারবেন না যদি আপনি (যথাযথভাবে) ভুল ক্রমে আমদানি লিখেন।

আমি স্ট্যাকওভারফ্লোতে চেক করেছি তবে পাইথন আমদানি করার বিষয়টি কি আদেশ অনুসারে , অর্ডারটি সত্যিকার অর্থে গুরুত্বপূর্ণ নয়। তদতিরিক্ত, পাইথন কোডের জন্য স্টাইল গাইড আমাদের প্রথমে স্ট্যান্ডার্ড (আরও জেনেরিক) লাইব্রেরি আমদানি করতে বলে, তারপরে তৃতীয় পক্ষের সম্পর্কিত লাইব্রেরি এবং শেষ পর্যন্ত স্থানীয় অ্যাপ্লিকেশন নির্দিষ্ট আমদানি করতে বলে। আমি মনে করি পাইকিউটি 4 আমদানির ২ য় বিভাগের মধ্যে রয়েছে, যেখানে পাইকিজিআইএস স্থানীয় অ্যাপ্লিকেশন নির্দিষ্ট হবে, তাই পাইকিউটি 4 আমদানিটি প্রথম আসবে (যদিও আমি এ বিষয়ে বিশেষজ্ঞ নই)।

কেন এমন হতে পারে সে সম্পর্কে আপনার ধারণা আছে? আপনি কি কখনও অনুরূপ কিছু অভিজ্ঞতা আছে?


সম্পাদনা 1: @ মাইক-টি দ্বারা প্রস্তাবিত from abc import *সুস্পষ্টভাবে (যেমন, from abc import xyz) দ্বারা অন্তর্নিহিত আমদানি ( ) পরিবর্তিত হয়েছে ।


2
শুধু বলতে চেয়েছিলেন, একটি সংক্ষিপ্ত প্রজননযোগ্য উদাহরণ এবং সেই গবেষণার গবেষণা ও বিশ্লেষণের প্রমাণ সহ দুর্দান্ত প্রশ্ন।
user2856

উত্তর:


14

TL; ড

import qgis
import PyQt4
etc

সঠিক উপায়

দীর্ঘ সংস্করণ

হ্যাঁ আমদানি আদেশের বিষয়টি গুরুত্বপূর্ণ এবং কিউজিআইএস ২.০ এর ক্ষেত্রে এবং তারপরে এটি গুরুত্বপূর্ণ।

আপনি যে কোনও পিকিউটি স্টাফ আমদানি করার আগে আপনার সর্বদা আমদানি করা উচিত qgis.coreবা qgis.guiএমনকি কেবল import qgisযথেষ্ট।

বোকা লাগে। কেন?

কিউজিআইএস ২.০-তে আমরা এসআইপি-র সংস্করণ 2 বাইন্ডিংগুলি ব্যবহার করতে শুরু করেছি যা এপিআই আরও বেশি পাইথন কল করেছে যেমন এটি আপনার জন্য ধরণের রূপান্তর করে:

1.0 এসআইপি আপনাকে করতে হয়েছিল:

value.toString()

2.0 এ

value

এটি কাজ করবে যদি এটি সি ++ কোডে স্ট্রিং টাইপ করে।

ঠিক আছে তাই কি

কিকারটি হ'ল এপিআই সংস্করণটি আমার অন্য কিছু সেট হওয়ার আগে কোডে 2 এ সেট করতে হবে, এটি সেট হয়ে গেলে আপনি আবার সেট করতে পারবেন না। আপনি যদি প্রথমে পাইকিউটি আমদানি করেন তবে এটি মানকে ভি 1 এ সেট করবে তবে কিউজিআইএস-এর সমস্ত কিছুই এখন ভি 2 ব্যবহার করে। এটি ঠিক করার জন্য আমরা এটিকে v2 এ সেট করেছিলাম qgis.__init__.pyতবে আমাদের qgisপ্রথমে আমদানি করতে হবে বা অন্যথায় পাইকিউটি জিতবে।

কারণ কিউজিআইএস ২.০ এবং এরপরে সমস্ত প্লাগইন এসআইপি ভি 2 ব্যবহার করে যে কোনও এসআইপি ভি 1 যেমন কলগুলি চলমান চলাকালীন একটি ত্রুটি তৈরি করে।


1
আপনাকে ধন্যবাদ নাথান, আমি এই জাতীয় প্রভাব সম্পর্কে সচেতন ছিলাম না। আমি ভাবছি যদি এই সমস্যাটি পাইকিজিআইএস বিকাশকারীদের জন্য ভালভাবে নথিবদ্ধ হয়। উদাহরণস্বরূপ, এটি দেখায় যে কোনও প্লাগইনটি দেখতে কেমন হবে এবং আমদানি সম্পর্কে কোনও উল্লেখ করে না। আমার ধারণা এই সমস্যাটি প্লাগইনগুলিকে একইভাবে প্রভাবিত করে না যদিও এটি স্ট্যান্ডএলোন অ্যাপ্লিকেশন / স্ক্রিপ্টগুলিকে প্রভাবিত করে। (আমি আপনার উত্তরটি কয়েক মিনিটের মধ্যে উজ্জীবিত করব, আমি প্রতিদিনের সমস্ত ভোট ইতিমধ্যে ব্যয় করেছি :))।
জার্মানি ক্যারিলো

হ্যাঁ এটি প্লাগইনগুলিকে প্রভাবিত করে না কারণ আমরা পাইকিউটির আগে সি ++ তে কিগিস আমদানি করি।
নাথান ডাব্লু

": কোন মডিউল PyQt নামে ImportError" যখন ব্যবহার স্ট্রেঞ্জ ... আমি একটি পেতে import PyQtযদিও import qgisকাজ করে। এটি আমাকে এমন প্রশ্নে বিরক্ত করে না যে আমার একটি নতুন প্রশ্ন জিজ্ঞাসা করা দরকার, আপনি যদি জানেন যে এটি কেন। আমি উইন্ডোজ 7 ব্যবহার করি @gcarrillo হিসাবে একই প্রসেসিং / পাইথন সংস্করণ সহ।
জোসেফ

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