Daha çox

Windows-da PyQGIS skriptinin işlədilməsi


Aşağıdakı PyQGIS skriptini Windows-da çalışdıra bilmirəm (OS X-də mükəmməl işləyirdi):

import sys import os from qgis.core import * import qgis.utils from qgis.analysis import * app = QgsApplication ([], True, "") # qqgis yüklü olduğu yerə QgsApplication.setPrefixPath (os.getenv (") QGISPATH "), True) # yük təminatçıları QgsApplication.initQgis () sys.path.append (os.getenv (" QGISPATH ") +"  apps  qgis  python  plugins ") import Process # Load layer with seçki məntəqələri və poçt kodları os.path.exists ("…  external  precincts  USA_precincts.shp") layer1 = QgsVectorLayer ("…  external  precincts  USA_precincts.shp", "precincts", " ogr ") əgər layer1.isValid (): print" Loaded layer 1 "else: print" Layer 1 yüklənmədi! " layer2 = QgsVectorLayer ("…  external  zipcodes  Bnd_2008_q3_region.shp", "zipcodes", "ogr")) əgər layer2.isValid (): "Loaded layer 2" else: print "Layer 2 yüklənmədi! " # Qatlar arasındakı məkan kəsişməsi, yeni bir shapefile kimi qeyd edin overlayAnalyzer = QgsOverlayAnalyzer () overlayAnalyzer.intersection (layer1, layer2, "…  temp  precinctsZipcodes.shp") QgsApplication.exitQgis ()

Başlanğıc sətirlər yaxşı işləyir, amma sonra kod shapefiles yükləyə bilmir. Xəttin çıxışıprint os.path.exists ("… xarici precincts USA_precincts.shp")edirDoğru, amma sonra yazdırırLayer 1 yüklənmədi!təbəqənin düzgün yüklənib-yüklənmədiyini yoxlayarkən.

Niyə Windows-da işləmədiyini bilən varmı? Python konsolunda da çalışdıra bildim (yalnız aralarındakı xətləri işlətdim)layer1 = QgsVectorLayer…və sonuncu sətirdən ikincisi).

Qeyd: Əvvəlcə arxa əymələr yerinə əyiklərim var idi. Eğiklərin problem olduğunu söyləyən iki cavab aldım, amma olmadı: onları dəyişdirdim və nəticə eynidır.


Düşünürəm ki, bu sizin yol ayırıcılarınızdır. Windows-da, ikiqat arxa sətirdən istifadə edin\, və ya kimi bir xam sətirdə tək təkrarlarr "c: foo bar".

Həm Linux, həm də Windows maşınlarında skriptlərdən tez-tez istifadə edirəm və ümumiyyətlə platformanı yoxlayaraq və müəyyən bir yol üslubundan istifadə edərək fərqli yolları idarə edirəm, buna bənzər bir şey:

idxal platforması, alt prosess # Linux və ya Windows platformuUnknown = True currentPlatform = platform.system () olub olmadığını yoxlayın currentPlatform == "Linux": platformUnknown = False if currentPlatform == "Windows": platformUnknown = False əgər platformUnknown == Doğru: çap " Platforma bilinməyən "# GDAL əmr satırı alətlərinə yol seçin. gdalCL_path = currentPlatform == "Windows" olmadıqda: gdalCL_path = "C:  Program Files  QGIS Lyon  bin" # GDAL 1.11.3 QGIS vasitəsilə currentPlatform == "Linux": gdalCL_path = r "/ usr / zibil qabı"

EDIT: Bunu idarə etmək üçün daha yaxşı bir yol Python'un istifadəsidiros.pathçalışdığınız platforma (OS) üçün doğru yol təhlilini və yolların yazılmasını idarə edəcək modul. Həmişə Unix tərzli yollardan da istifadə edə bilərsiniz/əvəzinəvə Python-un bunu bildiyi kimi Windows-da düzgün idarə etməsinə icazə verin.


Problem yollarda idi. Bunu dəyişdirdim:

QgsApplication.setPrefixPath (os.getenv ("QGISPATH") + " apps  qgis", Doğru)

və indi yaxşı işlədi.


Problem ondadır ki, Windows yollar üçün arxa əyilmələrdən, unix əsaslı sistemlər irəli əyiklərdən istifadə edir. Bu, sadəcə mövcud olmayan bir yerə işarə etdiyi üçün Pythonun şəkli düzəltməyə yolu tapa bilməməsi deməkdir.

Məsələn bu sətir:

print os.path.exists ("… /external/precincts/USA_precincts.shp")

ilə dəyişdirilməlidir:

print os.path.exists ("…  xarici  precincts  USA_precincts.shp")

Niyə ikiqat geri əyilmə? Python-da arxa əyilmə bir qaçış ardıcıllığını ifadə edir, məsələn nyeni bir xətt üçün və ya ttabing üçün. Buna görə bir simli tək bir əyilmək üçün ikiqat ters eğik lazımdır.


Videoya baxın: QGIS Python PyQGIS - Show Error, Warning, and Success Messages (Oktyabr 2021).