ฉันได้ลองใช้ IRC เพื่อดูว่าผู้คนสามารถช่วยฉันได้หรือไม่ แต่สื่อดูเหมือนจะเงอะงะเล็กน้อยสำหรับการตอบคำถามที่ชัดเจนดังนั้นฉันจะลองทำแทน
ฉันต้องการตั้งโปรแกรมแอปพลิเคชันแบบสแตนด์อโลนโดยใช้ PyQGIS วิธีที่ฉันสามารถโปรแกรมแอปพลิเคชันแบบสแตนด์อโลนโดยใช้ ArcPy
PyQGIS นั้นตรงไปตรงมา ฉันไม่มีปัญหาในการใช้งานสคริปต์ Python ภายในเอดิเตอร์คอนโซล QGIS อย่างไรก็ตามเพื่อที่จะใช้การผูก Python ในสคริปต์แบบสแตนด์อโลนฉันแนะนำให้ฉันต้องเปลี่ยนการตั้งค่าสภาพแวดล้อมโดยใช้ชุดสคริปต์ (ฉันใช้ Windows Vista ที่บ้านดังนั้นเราจึงกำลังพูดถึงการเขียนสคริปต์ชุดสำหรับ Windows) สิ่งนี้ส่งผลให้เกิดความยุ่งเหยิงในตอนท้ายของฉันเนื่องจากฉันไม่เข้าใจการเขียนสคริปต์แบบชุดและฉันไม่ชอบความคิดที่ว่าฉันกำลังรีเซ็ตสภาพแวดล้อมที่ต้องเป็นวิธีหนึ่งสำหรับแอปพลิเคชันอื่นที่ฉันใช้
ฉันมีปัญหาในการทำความเข้าใจว่าทำไมคำแนะนำในการสร้างการตั้งค่าเหล่านี้จึงมีความซับซ้อนเกินความจำเป็นและเหตุใดพวกเขาจึงไม่ถึงจำนวนหนึ่งบรรทัดของรหัสว่า "ไปยังที่ที่มีการเชื่อมโยงทำให้ไลบรารีที่ฉันต้องการ ) แน่นอนว่า ArcPy ไม่ต้องการให้ผู้คนยุ่งกับการตั้งค่าสภาพแวดล้อมของคอมพิวเตอร์ดังนั้นฉันจึงมีปัญหาในการเข้าใจว่าทำไม PyQGIS ทำเช่นนั้นดูเหมือนว่าฉันจะยอมแพ้แทนที่จะสอนภาษา Windows Batch Script ให้ตัวเอง
ตอนนี้ฉันสังเกตเห็นว่าเมื่อฉันเรียกใช้สคริปต์ในตัวแก้ไขคอนโซลของ QGIS มันทำงานได้ ได้รับมันยังทำให้ส่วนที่เหลือของ QGIS ใช้งานไม่ได้หลังจากที่สคริปต์ทำงานดังนั้นฉันต้องรีสตาร์ท QGIS อีกครั้งหลังจากนั้น แต่สคริปต์ทำงานตรงตามที่ฉันได้ตั้งโปรแกรมให้ทำงาน แต่เมื่อฉันทำนอกเหนือจากแอปพลิเคชัน QGIS มันไม่ได้ ปัญหาดูเหมือนว่าฉันไม่ได้นำเข้าแพคเกจ Python บางอย่างที่นำเข้าโดยอัตโนมัติโดยแอปพลิเคชัน QGIS (qgis.core และ qgis.utils) - ฉันมีคำสั่งการนำเข้าเหล่านั้นในสคริปต์แบบสแตนด์อโลนของฉันพร้อมกับการนำเข้าแพ็คเกจอื่น ๆ สคริปต์ต้องการ สิ่งนี้ทำให้ฉันเชื่อว่าความแตกต่างคือแอปพลิเคชัน QGIS ตั้งค่าตัวแปรสภาพแวดล้อมภายนอกอย่างถูกต้อง แต่ตัวแปรเหล่านั้นไม่ได้ตั้งค่าอย่างถูกต้องเมื่อฉันเรียกใช้เป็นสคริปต์แบบสแตนด์อโลน
นอกจากนี้เมื่อฉันเรียกใช้สคริปต์เป็นสคริปต์แบบสแตนด์อโลนมันจะได้รับรหัสทั้งหมดโดยไม่เกิดข้อผิดพลาด มันไม่ได้ทำสิ่งที่รหัสคำสั่ง เมื่อฉันเรียกใช้สคริปต์ในตัวแก้ไขคอนโซลมันทำได้ทั้งหมดอย่างถูกต้อง เมื่อฉันรันมันเป็นแบบสแตนด์อโลนมันจะสร้างหน้าต่างจากนั้นก็ทำลายมันทันทีในขณะที่ไม่มีข้อผิดพลาดเกิดขึ้น ดังนั้นผู้บุกรุกจึงเข้าใจทุกอย่างที่ฉันขอให้สคริปต์ทำ - มันจะไม่ทำอย่างนั้น
นี่คือสคริปต์:
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()
ได้โปรด ... มีวิธีใดบ้างที่ฉันสามารถเรียกใช้สคริปต์นี้นอก QGIS และใช้งานได้เหมือนใน QGIS (โดยไม่ต้องปิดท้ายที่สุด)
QGIS เป็นโปรแกรมที่ยอดเยี่ยมและ PyQGIS นั้นใช้งานง่ายเหมือน ArcPy และจะเป็นข้อได้เปรียบที่แท้จริงสำหรับซอฟต์แวร์โอเพนซอร์ซที่จะมี - แต่ถ้าผู้คนต้องผ่านทุกห่วงที่ฉันเคยผ่านมาแล้วและยังไม่มีแอปพลิเคชันแบบสแตนด์อโลน การเข้าถึงห้องสมุด PyQGIS ในแบบที่พวกเขามีการเข้าถึง ArcPy ดูเหมือนว่า PyQGIS ของฉันจะไม่ใช้งานกับผู้คนมากนัก ฉันหวังว่าฉันผิดและมันง่ายกว่านี้มาก ไม่มีใครมีทางออกหรือไม่?