Saya sudah mencoba, bersama dengan posting ini , untuk menjalankan skrip di OSGeo4w Shell , di luar QGIS. Tapi saya mendapatkan kesalahan berikut:
ImportError: Tidak ada modul bernama qgis.core
Saya juga membaca posting berikut dan mencoba mengimpor berbagai modul tetapi tidak berhasil:
- Bagaimana menjalankan algoritma sextante di luar konsol python QGIS?
- Bagaimana menjalankan skrip python sederhana untuk QGIS dari luar (mis. Sublime Text)?
- Menulis skrip Python mandiri menggunakan PyQGIS?
Berikut ini adalah skrip sederhana yang membuat kisi dan klip shapefile poligon ke atasnya.
Catatan: Skrip ini telah diuji dan berhasil ketika dijalankan di QGIS.
##Test=name
import os
import glob
import sys
sys.path.append("C:\Program Files\QGIS Brighton\lib;%OSGEO4W_ROOT:\=/%/apps/qgis;%OSGEO4W_ROOT%\apps\qgis\bin;%OSGEO4W_ROOT%\apps\grass\grass-6.4.3\lib;%PATH%")
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
QgsApplication.setPrefixPath("C:\Program Files\QGIS Brighton\apps\qgis", True)
QgsApplication.initQgis()
from os.path import expanduser
home = expanduser("~")
# Folder path of the Results for shapefiles
path_dir = home + "\Desktop\Test\\"
path_res = path_dir + "Results\\"
def run():
# Set directory, search for all polygon .shp files and run the Create Grid and Clip algorithms then output results into Results folder
os.chdir(path_dir + "Shapefiles\\")
for fname in glob.glob("*.shp"):
outputs_1=processing.runalg("qgis:creategrid", 1000, 1000, 24108, 18351.157175, 258293.802316, 665638.226408, 1, 'EPSG:7405', None)
outputs_2=processing.runalg("qgis:clip", outputs_1['SAVENAME'], fname, path_res + "/"+ fname)
run()
QgsApplication.exitQgis()
# Remove the above line when running in QGIS
Mengikuti jawaban dan skrip yang diposting oleh @ gcarrillo, saya akhirnya dapat mengimpor qgis.core.
modul dengan sukses. Skrip yang disediakan oleh @gcarrillo berjalan tetapi saya menerima kesalahan Traceback:
Traceback (most recent call last):
File "Test.py", line 55, in <module>
run()
File "Test.py", line 53, in run
algClip.processAlgorithm(progress)
File "C:\Users\username\.qgis2\python\plugins\processing\algs\qgis\ftools\Clip.py", line 59, in processAlgorithm
layerA.pendingFields(),
AttributeError: 'NoneType' object has no attribute 'pendingFields'
pyqgis
qgis-processing
Yusuf
sumber
sumber
Jawaban:
Akhirnya menemukan cara yang tepat untuk menjalankan algoritma pemrosesan dalam skrip mandiri PyQGIS.
Jawaban ini didasarkan pada jawaban untuk Masalah dengan impor qgis.core saat menulis skrip PyQGIS yang berdiri sendiri dan untuk Kesalahan: Algoritma tidak ditemukan , yang pada gilirannya didasarkan pada diskusi milis Qgis-dev .
Saya menyarankan Anda untuk mengikuti alur kerja yang diberikan dalam Masalah dengan impor qgis.core saat menulis skrip PyQGIS yang berdiri sendiri untuk mengaktifkan pustaka QGIS Anda di OSGeo4W Shell Anda. Setelah pustaka QGIS Anda berfungsi dengan baik, kami dapat melanjutkan ke bagian ke-2 dari pertanyaan Anda: menjalankan algoritma pemrosesan dalam skrip PyQGIS mandiri.
Saya telah sedikit memodifikasi skrip asli Anda dan mengujinya pada Windows 7 dan GNU / Linux. Saya menggunakan pemrosesan versi 2.2.0-2 dan menyarankan Anda untuk menggunakan versi ini, yang merupakan versi saat ini pada saat menulis jawabannya.
Perhatikan bahwa saya telah mengeluarkan kreasi grid dari for for, karena Anda tidak benar-benar membutuhkan kisi baru untuk melakukan setiap klip.
Ini harus melakukan trik!
sumber
Processing
folder di Desktop, mirip dengan yang ada di/qgis.2
folder. Haruskah ini terjadi?Jawaban ini didasarkan pada jawaban untuk Masalah dengan impor qgis.core saat menulis skrip PyQGIS yang berdiri sendiri dan untuk Bagaimana saya dapat mengakses `pemrosesan` dengan Python? .
Saya menyarankan Anda untuk mengikuti alur kerja yang diberikan dalam Masalah dengan impor qgis.core saat menulis skrip PyQGIS yang berdiri sendiri untuk mengaktifkan pustaka QGIS Anda di OSGeo4W Shell Anda. Setelah pustaka QGIS Anda berfungsi dengan baik, kami dapat melanjutkan ke bagian ke-2 dari pertanyaan Anda: menjalankan algoritma pemrosesan dalam skrip PyQGIS mandiri.
Seperti pada Bagaimana saya bisa mengakses `pemrosesan` dengan Python? , Saya akan memberi Anda solusi sampai saya dapat menjalankan algoritma berdasarkan nama (mis.,
processing.runalg('provider:algorithm_name')
). Saya menggunakan pemrosesan versi 2.2.0-2 dan menyarankan Anda untuk menggunakan versi ini.Kita dapat menggunakan konsol Python QGIS untuk mencari tahu di mana skrip algoritme berada dalam pemrosesan folder plugin. Misalnya, untuk mengetahui dari mana mengimpor
qgis:creategrid
, tulis di konsol Python QGIS:Anda harus mendapatkan:
yang cukup bagi kita untuk memperhatikan jalur modul (
processing.algs.qgis.mmqgisx.MMQGISXAlgorithms
) dan kelas algoritma (mmqgisx_grid_algorithm
). Anda akan menggunakan informasi ini dalam skrip di bawah ini.Saya telah sedikit memodifikasi skrip Anda dan mengujinya pada Windows 7. Anda mungkin perlu menyesuaikan jalur untuk menjalankan skrip di lingkungan Anda sendiri.
Ini harus melakukan trik!
Seperti yang Anda lihat, saya telah membuat folder Test / Grids sehingga Anda menyimpan satu kotak Shapefile alih-alih membuat file temporal di setiap for loop, yang sepertinya tidak diperlukan.
sumber
Test/Grids/
sebelum menjalankan skrip./Grids/
folder dan file grid.shp dibuat. Itu bekerja dengan sempurna! Sesuatu yang lain adalah masalahnya.path_dir + "Grids\grid.shp"
, yang akan menjadiC:\Users\your_username\Desktop\Test\Grids\grid.shp
Saya harus membuat perubahan kecil pada skrip yang disediakan oleh @ gcarrillo untuk memasukkan jalur OSGEO4W64 (saya harus menginstal ulang QGIS melalui installer OSGEO4W64 karena saya menggunakan installer mandiri pada awalnya) dan untuk memasukkan double-slash. Ini skrip terakhir dan terima kasih banyak untuk semua orang atas bantuan mereka:
sumber