কিউজিআইএস এবং পরিবেশের ভেরিয়েবলগুলি ব্যবহার করে স্বতন্ত্র অ্যাপ্লিকেশন


12

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

আমি ইতিমধ্যে আরকিপি ব্যবহার করে স্ট্যান্ডএলোন অ্যাপ্লিকেশনগুলি যেভাবে প্রোগ্রাম করতে পারি সেইভাবে পাইকিজিআইএস ব্যবহার করে একটি স্বতন্ত্র অ্যাপ্লিকেশনটি প্রোগ্রাম করতে চাই।

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

কেন এই সেটিংস তৈরির জন্য নির্দেশাবলী এত অযথা জটিল, এবং কেন "বাইন্ডিংগুলি সেখানে যান, এই প্রোগ্রামটির জন্য আমি যে লাইব্রেরিগুলি ব্যবহার করতে চাই তার জন্য যে লাইব্রেরিগুলি ব্যবহার করতে চাই সেগুলি তৈরি করে কেন এই কোড কোডের এক লাইনের মতো নয় কেন তা বুঝতে আমার সমস্যা হচ্ছে having )। অবশ্যই আর্কপাই কম্পিউটারের পরিবেশগত সেটিংগুলির সাথে লোকজনকে গোলযোগের প্রয়োজন হয় না, তাই পাইকিজিআইএস কেন হয় তা বুঝতে আমার অসুবিধা হচ্ছে It আমার কাছে মনে হয় লোকেরা নিজেকে উইন্ডোজ ব্যাচের স্ক্রিপ্টিং ল্যাঙ্গুয়েজ শেখানোর চেয়ে নিজেকে ছেড়ে দেবে।

এখন, আমি লক্ষ্য করেছি যে আমি যখন QGIS এর কনসোল সম্পাদকটিতে একটি স্ক্রিপ্ট রান করি তখন এটি কার্যকর হয়। মঞ্জুর, এটি স্ক্রিপ্টটি চলার পরে বাকী কিউজিআইএসকে ব্যবহারযোগ্য করে তোলে না, সুতরাং আমাকে আবারও কিউজিআইএস পুনরায় চালু করতে হবে, তবে স্ক্রিপ্টটি ঠিক তেমন কাজ করে যা আমি এটি কাজ করার জন্য প্রোগ্রাম করেছিলাম। তবে আমি যখন কিউজিআইএস অ্যাপ্লিকেশনটির বাইরে করি তখন তা হয় না। সমস্যাটি মনে হচ্ছে না যে আমি QGIS অ্যাপ্লিকেশন (qgis.core এবং qgis.utils) দ্বারা স্বয়ংক্রিয়ভাবে আমদানিকৃত কিছু পাইথন প্যাকেজ আমদানি করতে ব্যর্থ হয়েছি - অন্য সমস্ত প্যাকেজ আমদানির সাথে আমার স্ট্যান্ডলোন স্ক্রিপ্টে আমার সেগুলি আমদানি বিবরণী রয়েছে স্ক্রিপ্ট প্রয়োজন। এটি আমাকে বিশ্বাস করতে পরিচালিত করে যে পার্থক্যটি হ'ল কিউজিআইএস অ্যাপ্লিকেশন সঠিকভাবে বাহ্যিক পরিবেশের ভেরিয়েবলগুলি সেট করে, তবে আমি যখন স্ট্যান্ড্যালোন স্ক্রিপ্ট হিসাবে চালনা করি তখন সেই পরিবর্তনগুলি সঠিকভাবে সেট করা হয় না।

অতিরিক্ত হিসাবে, যখন আমি স্ক্রিপ্টটি স্বতন্ত্র স্ক্রিপ্ট হিসাবে চালিত করি তখন এটি কোনও ত্রুটি না ছড়িয়ে সমস্ত কোডের মধ্যে দিয়ে যায়; কোডটি যা আদেশ করে তা কেবল তা করে না। আমি যখন কনসোল সম্পাদকটিতে স্ক্রিপ্টটি চালিত করি তখন এটি সমস্ত সঠিকভাবে করে। আমি যখন এটি স্ট্যান্ডেলোন হিসাবে চালিত করি তখন এটি একটি উইন্ডো তৈরি করে, ততক্ষণে ত্রুটি না ছড়িয়ে দিয়ে তা ধ্বংস করে দেয়। স্ক্রিপ্টটি করতে বলার জন্য দোভাষী সমস্ত কিছু বুঝতে পারে - এটি কেবল এটি করবে না।

লিপিটি এখানে:

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()

দয়া করে ... কিউজিআইএস-এর বাইরে এই স্ক্রিপ্টটি চালানোর কোনও উপায় আছে এবং কিউজিআইএস-এর অভ্যন্তরে যেমন এটি কাজ করা যায় (আদর্শভাবে জিনিসগুলি একেবারে শেষ না করে বন্ধ করে দেওয়া হয়)?

কিউজিআইএস একটি দুর্দান্ত প্রোগ্রাম, এবং পাইকিজিআইএস আর্কপাইয়ের মতো স্বজ্ঞাত হিসাবে মনে হয় এবং এটি একটি মুক্ত উত্স সফ্টওয়্যারটি পাওয়ার জন্য সত্যিকারের সুবিধা হবে - তবে লোকেরা যদি ইতিমধ্যে আমি ইতিমধ্যে যে সমস্ত হুপগুলি পেরিয়েছি, এবং এখনও স্ট্যান্ডেলোন অ্যাপ্লিকেশন না পেয়ে থাকে পাইকিজিআইএস লাইব্রেরিগুলিতে অ্যাক্সেস যেমনভাবে তারা অর্পপাইতে অ্যাক্সেস করে থাকে, আমার কাছে মনে হয় পাইকিজিআইএস লোকজনের খুব বেশি কাজে আসবে না। আমি আশা করি আমি ভুল এবং এটি এতদূর থেকে সহজ এটি। কারো কাছে কি কোন সমাধান আছে?

উত্তর:


6

আপনাকে Qt ইভেন্টের লুপটি ব্যবহার করে শুরু করতে হবে:

app.exec_()

আমি QgsApplication.exitQgis () সরিয়ে ফেলব। এটি আদর্শভাবে কোনও স্লটে পরিচালনা করা উচিত যা অ্যাপ্লিকেশনের লাস্ট উইন্ডো ক্লোজড () সিগন্যালের সাথে যুক্ত।


জানা ভাল. আমি আমার শক্তিগুলি পাইকিউটি 4 এ পড়ার দিকে পরিচালিত করব যাতে ভবিষ্যতের কাজে আমি যে কোনও জিইআইআই করার চেষ্টা করি তার জন্য আমার আরও কী করা উচিত তা আমি আরও জানতে পারি। যদি স্ক্রিপ্ট রানার প্লাগইন খ্যাতির জি। শেরম্যান ... আমি খেয়াল করেছিলাম যখন আমি এই কোডটি চালানোর চেষ্টা করছিলাম তখন কিউজেএসপ্লিকেশন সম্পর্কিত কোনও রেফারেন্স ছাড়াই এবং ডিএফ রান_স্ক্রিপ্ট শিরোনাম স্ক্রিপ্ট রানারের প্রয়োজনমতো, আমার স্ক্রিপ্ট ঠিক কী করেছিল যখন এটি করছে আমি স্ট্যান্ডলোন স্ক্রিপ্ট হিসাবে উপরে দেখানো স্ক্রিপ্টটি চেষ্টা করছিলাম ... একটি উইন্ডো তৈরি করে এবং ততক্ষণে এটি বন্ধ করে দেওয়া। এটি কেন আমি ধরে নিয়েছিলাম যে আমি পরিবেশগত ভেরিয়েবলের সমস্যা অবিরত করছি of
জাক ক্লাস

7

পাইকিউজিস ডকুমেন্টেশনের সাথে পরামর্শ করে আপনি দেখতে পাবেন যে পাইকিউজিস এপিআই ব্যবহারের জন্য চারটি প্রধান উপায় রয়েছে:

  1. পাইথন কনসোলে কমান্ডের মাধ্যমে
  2. প্রসেসিংয়ে পাইথন স্ক্রিপ্টগুলির মাধ্যমে বা গ্যারি শেরম্যানের স্ক্রিটরুনার প্লাগইন সহ
  3. কিউজিস অ্যাপ্লিকেশনটিতে কাস্টম প্লাগইনগুলির বিকাশের মাধ্যমে
  4. কিউজিআইএসের বাইরে (পাইথন শেলের মধ্যে বা পাইকিউটি 4 দিয়ে অ্যাপ্লিকেশন তৈরি করে এবং টিকিটার নয় (কেন টিনকিটার দুবার আমদানি করবেন?)

এবং আপনি এই শেষ পয়েন্ট আগ্রহী:

  • আপনি পাইকিজিআইএসকে অন্য পাইথন মডিউল হিসাবে ব্যবহার করতে পারেন। পাইথন পিআইকিজিআইএস কোথায় পাবেন তা জানে না পাইথন। তার জন্য, আপনাকে পাইথজিআইএস ফোল্ডারটি পাইথনপথে যুক্ত করতে হবে (উইন্ডোজের জন্য, উইন্ডোজ in-তে পাইথনপথে কীভাবে যুক্ত করতে হয় তা দেখুন? )

অবশ্যই কম্পিউটারের পরিবেশগত সেটিংসে আরকিপির লোকজনকে গোলমাল করতে হবে না, তাই পাইকিজিআইএস কেন হয় তা বুঝতে আমার অসুবিধা হচ্ছে

আপনি আর্কজিআইএসের পাইথন সংস্করণ ব্যবহার করার কারণে, অন্য ক্ষেত্রেও একই কথা , উদাহরণস্বরূপ, উইন্ডোজটিতে কিউজিআইএস (এবং এখনও আরকিপি ব্যবহার করে) ব্যবহারের জন্য আরকিপ্যাটের বাইরে আরকিপি ব্যবহার করে বা পাইস্ক্রিপ্টার কনফিগার করুন

আপনার এখানে পাইকিউ 4, টিন্টার বা কিগিস.গুই দরকার নেই:

from qgis.core import *
QgsApplication.setPrefixPath("yourpath", True)
QgsApplication.initQgis()
# or your solution
# read a shapefile 
layer = QgsVectorLayer('your.shp', 'your', 'ogr')
layer.isValid()
True
# loop through layer 
for elem in layer.getFeatures():
    geom= elem.geometry()
    attr =elem.attributes()
    (processing)

 # interaction with other Python module: Shapely, for example
 from shapely.geometry import shape
 from json import loads
 for elem in layer.getFeatures():
       shapely_geometry = shape(loads(elem.geometry().exportToGeoJSON()))
  • আপনি একটি অ্যাপ্লিকেশন তৈরি করতে পারেন। আপনার এখানে PyQt4 (এবং টিনকিটার নয়) এবং কিগিস.গুই দরকার need

আমি ইতিমধ্যে আরকিপি ব্যবহার করে স্ট্যান্ডএলোন অ্যাপ্লিকেশনগুলি যেভাবে প্রোগ্রাম করতে পারি সেইভাবে পাইকিজিআইএস ব্যবহার করে একটি স্বতন্ত্র অ্যাপ্লিকেশনটি প্রোগ্রাম করতে চাই।

সুতরাং, তার জন্য, আপনাকে অবশ্যই পাইকিউটি 4 শিখতে হবে, যেমন আপনাকে টিকিন্টার (বা ডাব্লুএক্সপিথন) শিখতে হবে, উদাহরণস্বরূপ। এটি আরেকটি সমস্যা: gsherman প্রদত্ত সমাধানটি পাইকিউটি 4-র একটি সমস্যা, পাইকিজিআইএসের নয় ( উদাহরণস্বরূপ পাইকিউটি 4 টিউটোরিয়ালটি দেখুন )


ধন্যবাদ। আমি এখনও কাউকে পাইকটি 4-এর বর্ণনা এমন কিছু হিসাবে শুনিনি যা টিন্টিরের একধরণের একচেটিয়া বিকল্প ছিল, যা আমি এখন বেশ ভাল জানি (উপরের কোডে কেন আমি এটি দুবার ঘোষণা করলাম তা নিশ্চিত নয় ... এটি কেবল একটি ভুল ছিল)। আপনার পাইকিউটি 4 টিউটোরিয়ালের লিঙ্কটি দেখে মনে হচ্ছে এটি খুব সহায়ক হবে। আজ পরীক্ষা-নিরীক্ষার পরে, আমি কনসোল সম্পাদকের মাধ্যমে আমার সমস্যাটি সমাধান করার জন্য এবং স্ক্রিপ্টটি QGIS GUI এর উইন্ডোটি ন্যূনতম করার জন্য বেছে নিয়েছি যাতে আমার স্ক্রিপ্টটির উইন্ডোটি স্বতন্ত্র বলে মনে হয়, ব্যাকগ্রাউন্ডে QGIS চলমান রয়েছে - সুতরাং আমি অনুমান করি যে এটি 1 নম্বর আপনার 4 টি সম্ভাবনার তালিকায়।
জাক ক্লাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.