คำถามติดแท็ก pyqgis

งูเหลือมผูกสำหรับ QGIS


3
ข้อผิดพลาดในการนำเข้าสำหรับ qgis.core เมื่อรันเชลล์สคริปต์ OSGeo4w
ฉันได้ลองใช้พร้อมกับโพสต์นี้เพื่อเรียกใช้สคริปต์ในOSGeo4w Shellนอก QGIS แต่ฉันได้รับข้อผิดพลาดต่อไปนี้: ImportError: ไม่มีโมดูลชื่อ qgis.core ฉันได้อ่านโพสต์ต่อไปนี้แล้วและพยายามนำเข้าโมดูลต่างๆ แต่ก็ไม่มีประโยชน์: วิธีการเรียกใช้อัลกอริทึม sextante นอกคอนโซล QGIS หลาม? วิธีการเรียกใช้สคริปต์ python อย่างง่ายสำหรับ QGIS จากภายนอก (เช่น Sublime Text) การเขียนสคริปต์ Python แบบสแตนด์อโลนโดยใช้ PyQGIS? นี่เป็นสคริปต์ง่าย ๆ ที่สร้างกริดและคลิปไฟล์รูปหลายเหลี่ยมเข้าไว้ หมายเหตุ:สคริปต์นี้ได้รับการทดสอบและทำงานได้สำเร็จเมื่อทำงานใน 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 …

4
กำลังบัฟเฟอร์ใน pyQGIS?
ฉันกำลังมองหาตัวอย่างเพื่อทำสคริปต์หลามแบบง่าย ๆ ใน QGIS ฉันจะทำการวิเคราะห์บัฟเฟอร์บนชุดข้อมูลได้อย่างไร ฉันไม่สามารถพบได้มากในคู่มือและงูเหลือม QGIS ที่ค่อนข้างตรงกับเอกสาร Esri

1
การเขียนสคริปต์ Python แบบสแตนด์อโลนโดยใช้ PyQGIS?
ฉันได้รับการเรียนรู้วิธีการใช้คอนโซลการหลามใน QGIS โดยใช้การอ้างอิงจากqgisworkshop.org ฉันคุ้นเคยกับการเขียนสคริปต์แบบสแตนด์อโลนใน ArcGIS และต้องการเรียนรู้วิธีการทำเช่นเดียวกันกับ QGIS ตัวอย่างเช่นใน ArcGIS 10 สคริปต์หลามแบบสแตนด์อโลนอย่างง่ายจะเป็น: import arcpy setFolder = '' doProcess ฉันเข้าใจวิธีการใช้คอนโซล python ใน QGIS แต่ฉันไม่สามารถหาตัวอย่างเพื่อทำตามขั้นตอนเดียวกันโดยใช้สคริปต์แบบสแตนด์อโลน ฉันสงสัยว่าฉันเพิ่งโชคร้ายกับการค้นหาของฉัน มีตัวอย่างที่ชัดเจนเกี่ยวกับวิธีการออนไลน์นี้หรือไม่?
17 pyqgis 

1
การเขียนสคริปต์ประมวลผลหลามด้วย QGIS 3.0
หลังจากการอัพเดตเป็น QGIS 3.0 มันยากมากที่จะค้นหาข้อมูลใด ๆ ที่เกี่ยวข้องกับการเขียนสคริปต์การประมวลผลใน QGIS 3.0 @ Underdark (ดูที่นี่ ) ได้ให้พื้นฐานสำหรับโครงกระดูก ดูเหมือนว่ารหัสนี้จะถูกเพิ่มใน QGIS เมื่อเขียนสคริปต์ใหม่จากเทมเพลต (QGIS 3.0.2) อย่างไรก็ตามฉันไม่สามารถหาวิธีที่จะช่วยให้ Python ใหม่ ๆ เหมือนฉันเข้าใจวิธีการเปลี่ยนรหัสนั้นโดยเฉพาะอย่างยิ่งสำหรับเลเยอร์อินพุตและเอาต์พุต เป้าหมายของฉันคือการเขียนสคริปต์โดยใช้ 2 เลเยอร์แรสเตอร์และสองเท่าเป็นอินพุต การเปลี่ยนแปลงที่จำเป็นต้องมีในโค้ดตัวอย่างคืออะไร สำหรับ QGIS 2.x ฉันจะใช้ไวยากรณ์ต่อไปนี้: ##Layer1=raster ##Layer2=raster ##myDouble=Double ##OutLayer1=output raster ##OutLayer2=output raster จากสิ่งที่ฉันเข้าใจการเปลี่ยนแปลงจะต้องทำในขั้นตอนต่อไปนี้ แต่ฉันไม่แน่ใจว่าจะต้องทำอะไร def initAlgorithm(self, config=None): self.addParameter(QgsProcessingParameterFeatureSource( self.INPUT, self.tr("Input layer"), [QgsProcessing.TypeVectorAnyGeometry])) self.addParameter(QgsProcessingParameterFeatureSink( self.OUTPUT, …
17 qgis  pyqgis  qgis-3 

1
ปล่อยไฟล์ล็อค PyQGIS หรือไม่
ฉันสงสัยว่าอะไรเป็นสาเหตุให้เกิดการปลดล็อคไฟล์ใน pyQGIS? ฉันกำลังพยายามลบแหล่งข้อมูลไม่กี่แห่ง (ใช้ชั่วคราว) โดยการโทรQgsVectorFileWriter.deleteShapeFileแต่ฉันต้องออกจาก QGIS ก่อนจึงจะทำได้ ฉันโหลดแหล่งข้อมูลลงในวัตถุ QgsVectorLayer วัตถุและการอ้างอิงถึงวัตถุเหล่านี้ทั้งหมดจะต้องถูกเก็บรวบรวมขยะก่อนที่ฉันจะสามารถลบแหล่งที่มาได้หรือไม่ มีวิธีบังคับนี้หรือไม่ ฉันจัดการเพื่อสร้างตัวอย่างรหัสขั้นต่ำที่ล้มเหลว ตรวจสอบว่า temp dir ว่างเปล่าก่อนเรียกใช้ from qgis.core import * import processing, os, gc project_temp_dir = "C:/Path/To/My/Dir/" layer1_path = project_temp_dir + "layer1.shp" layer2_path = project_temp_dir + "layer2.shp" input_layer = QgsMapLayerRegistry.instance().mapLayersByName('in_layer')[0] if not input_layer.isValid(): raise Exception("Failed to grab input layer") # …
16 pyqgis  lock 

4
กรองตามคุณสมบัติของพวกเขาโดยใช้ Python หรือไม่
วิธีรับฟีเจอร์ตามคุณสมบัติ (คล้ายกับ Iqueryfilter ใน arcobjects) ใน Qgis โดยใช้ python? แทนที่จะได้รับคุณสมบัติทั้งหมดและกรองด้วยตนเองจะมีตัวเลือกให้ใช้ในกรณีที่ข้อเพื่อกรองออก? ตัวอย่าง: ฉันมีชื่อเขตข้อมูลที่เรียกว่า 'มณฑล' มีฟีเจอร์มากกว่าห้าหมื่นรายการไม่สามารถดึงข้อมูลคุณลักษณะทั้งหมดและกรองได้เนื่องจากใช้เวลานาน ดังนั้นฉันสามารถค้นหาโดยใช้ iqueryfilter.whereclause = 'Counties = Norwich' ใน arcobjects สิ่งที่ฉันต้องการใน PyQgis
16 qgis  pyqgis 

3
“ เลือกตามคุณสมบัติ” ใน QGIS โดยใช้ python หรือไม่
มีวิธีการใช้ฟังก์ชั่น "Select by Attribute" ใน QGIS โดยใช้คำสั่ง python หรือไม่? ในปลั๊กอินของฉันผู้ใช้ควรป้อนค่าผ่านทาง GUI และควรใช้ค่านี้ในฟังก์ชั่นที่เลือกคุณสมบัติทั้งหมดที่มีคุณสมบัตินี้ ชื่อคอลัมน์ได้รับการแก้ไขในรหัสฟังก์ชั่นควรค้นหาเฉพาะค่าที่ถูกต้อง ในโซลูชันปัจจุบันของฉันฟังก์ชันเชื่อมต่อ QGIS กับฐานข้อมูล PostgreSQL และเรียกใช้คำสั่ง SQL สิ่งนี้จะสร้างตารางจากผลลัพธ์และตารางนั้นจะมองเห็นเป็น Shapefile ใน QGIS โดยหลักแล้วจะเพียงพอที่จะเน้นคุณสมบัติและไม่สร้าง Shapefile ใหม่ของส่วนที่เลือก การใช้ฟังก์ชั่น "เลือกตามคุณสมบัติ" จะเป็นการข้ามการเชื่อมต่อฐานข้อมูลที่ไม่จำเป็น มีวิธีการใช้ฟังก์ชั่น "Select by Attribute" ใน python เพื่อให้มีการเน้นคุณสมบัติหรือไม่? การใช้ฟังก์ชั่นใน QGIS คุณสมบัติทั้งหมดที่ไม่ตรงกับการสืบค้นนั้นเป็นการลบล้างชั่วคราวที่จะใช้ได้เช่นกัน
16 qgis  pyqgis 

6
กำหนดเลเยอร์ CRS และหลีกเลี่ยงไดอะล็อก CRS ใน PyQGIS?
มี Shapefile ที่มีอยู่ซึ่งฉันต้องการเพิ่ม ในขณะนี้รหัสของฉันดูเหมือนว่า: self.iface.addVectorLayer(self.shpFilePath, "Track", "ogr") มันใช้งานได้ดี แต่ฉันต้องการกำหนด crs ภายในโค้ด เป็นไปได้ไหม? ฉันพบคำถามที่คล้ายกันดังนี้: เลือก CRS ใน QGIS 2.4 โดยทางโปรแกรมโดยใช้ Python แต่ฉันไม่ได้ทำงาน

2
เข้าถึงการประมวลผลด้วย Python หรือไม่
ฉันต้องการเข้าถึงฟังก์ชั่นบรรทัดระเบิดใน Pythonนอก QGIS จากสคริปต์แบบสแตนด์อโลน ฉันต้องโหลดโมดูลใดเพื่อใช้งาน ฉันจะเข้าถึงได้processingอย่างไร from qgis.core import * layerInput = QgsVectorLayer('test.shp', 'test', 'ogr') processing.runalg('qgis:explodelines', layerInput, 'temp.shp')

4
เขียนแบบทดสอบอัตโนมัติสำหรับปลั๊กอิน QGIS?
ฉันกำลังมองหาคำแนะนำในการเขียนการทดสอบอัตโนมัติสำหรับปลั๊กอิน QGIS ที่เขียนใน Python ฉันได้เขียนการทดสอบสำหรับสคริปต์ Python ในอดีตโดยใช้ PyUnit ( unittestโมดูล) แต่ไม่เคยทำเช่นนั้นสำหรับแอปพลิเคชันที่มี GUI ฉันพบหน้าอธิบายวิธีใช้ PyQt4.QTest เพื่อทำการทดสอบหน่วยในวิดเจ็ต Qt ( http://www.voom.net/pyqt-qtest-example ) แต่ฉันพยายามดิ้นรนเพื่อดูว่าฉันสามารถใช้สิ่งนี้ได้อย่างไร ด้วยวิดเจ็ตที่ได้รับการออกแบบให้เรียกใช้จากภายใน QGIS ส่วนที่เกี่ยวกับ "การทดสอบ" ในเอกสารประกอบ PyQGISนั้นไม่มีอยู่ สิ่งที่ฉันมีอยู่คือ: เก็บการประมวลผลข้อมูลจริงในโมดูลหรือฟังก์ชั่นแยกและเขียนการทดสอบหน่วยสำหรับสิ่งเหล่านั้น ทำการทดสอบพื้นฐานของ UI โดยใช้ QTest โปรดอธิษฐานให้ทุกอย่างอยู่ด้วยกันเมื่อใช้ปลั๊กอินจากภายใน QGIS มีวิธีที่ดีกว่า?

1
แสดงข้อความเริ่มต้นบน QGIS splashscreen
ในช่วงเริ่มต้นของ QGIS จะมีข้อความแสดงสถานะที่ส่วนล่างของ Splashscreen เช่น "เรียกคืนปลั๊กอินที่โหลด" ฉันกำลังใช้คุณลักษณะ startup.py ซึ่งฉันต้องการแจ้งให้ผู้ใช้ทราบว่าสคริปต์ส่วนใดของสคริปต์เริ่มต้นทำงานในขณะนี้ เป็นไปได้ไหมที่จะแสดงข้อมูลนี้บน splashscreen? Edit1: เป็นวิธีแก้ปัญหาฉันจัดการเพื่อใช้ splashscreen ของตัวเองในระหว่างการเริ่มต้น: from qgis.gui import * from qgis.utils import * from qgis.core import * from PyQt4.QtGui import * from qgis.PyQt.QtCore import QSettings, Qt import time template=QgsApplication.qgisSettingsDirPath() + "python/" app=QgsApplication.instance() splash_pix = QPixmap(template+'splashscreen.png') splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint) splash.setWindowFlags(Qt.WindowStaysOnTopHint …
15 qgis  pyqgis  pyqt4 

1
จะใช้การเปลี่ยนแปลงใน QSettings ได้อย่างไร
ด้วย PyQGIS คุณสามารถเปลี่ยนการตั้งค่าต่าง ๆ เช่นทำให้กลุ่มในแผงเลเยอร์ (หรือสารบัญ) เป็นตัวหนา: from PyQt4.QtCore import QSettings QSettings().setValue("/Qgis/legendGroupsBold", True) การตั้งค่าถูกเขียนขึ้นซึ่งสามารถเห็นได้จากตัวเลือกหรือจากการพิมพ์: QSettings().value("/Qgis/legendGroupsBold") >>> u'true' แต่มันไม่ได้ถูกนำไปใช้ ฉันคิดว่าใช้ QSettings().sync() อาจช่วยได้ แต่น่าเสียดายที่ไม่ใช่ วิธีเดียวที่จะให้มันใช้ได้คือไปที่ GUI ( Settings > Options) จากนั้นคลิกOKหรือรีสตาร์ท QGIS มีวิธีการทำสิ่งนี้ผ่าน PyQGIS หรือไม่? บริบท : ฉันต้องการเพิ่มสิ่งนี้เป็นมาโครในไฟล์โครงการเพื่อให้แน่ใจว่า (สำหรับจุดประสงค์ด้านสุนทรียภาพ) ว่าชื่อกลุ่มเป็นตัวหนาเท่านั้นและชื่อเลเยอร์ไม่ได้ ดังนั้นจะเหมาะถ้าใช้ QSettings เมื่อโหลดโครงการ (การตั้งค่าเริ่มต้นจะถูกนำมาใช้อีกครั้งเมื่อปิดโครงการ)

3
การควบคุมการติดฉลากตามกฎโดยใช้ PyQGIS?
ตามจากคำถามนี้: วิธีเปิด / ปิดเลเบลทั้งหมดของเลเยอร์ทั้งหมดใน QGISนั้น OP ได้กล่าวถึงในความคิดเห็นของเขาว่าเขาใช้เลเบลแบบอิงกฎ ฉันพยายามค้นหาแบบออนไลน์เพื่อดูว่าสามารถอ่านและแก้ไขป้ายกำกับประเภทเหล่านี้ได้อย่างไร แต่จัดการเพื่อค้นหาโพสต์นี้จาก lutraconsulting : เพื่อความสะดวกในการเพิ่มการติดฉลากตามกฎการเปลี่ยนแปลงภายในบางอย่างเกิดขึ้นกับส่วนต่อประสานของเอ็นจิ้นการติดฉลาก QGIS ขณะนี้การติดฉลากถูกขับเคลื่อนด้วยคลาสใหม่QgsLabelingEngineV2ซึ่งอาจมีผู้ให้บริการป้ายกำกับหลายรายที่เกี่ยวข้อง ฟังดูดี. อย่างไรก็ตามเมื่ออ่านผ่านคลาส QgsLabelingEngineV2จะกล่าวถึง: คลาสนี้ยังไม่ได้เป็นส่วนหนึ่งของ API สาธารณะ ในปัจจุบันเป็นไปได้หรือไม่ที่จะควบคุมการติดฉลากตามกฎโดยใช้ python

3
การดำเนินงานขนาน GIS ใน PyQGIS?
ข้อกำหนดทั่วไปใน GIS คือการใช้เครื่องมือประมวลผลกับไฟล์จำนวนหนึ่งหรือใช้กระบวนการสำหรับคุณสมบัติจำนวนหนึ่งในไฟล์หนึ่งไปยังไฟล์อื่น การดำเนินการส่วนใหญ่เหล่านี้ขนานกันอย่างน่าอายซึ่งผลลัพธ์ของการคำนวณไม่ได้มีอิทธิพลต่อการดำเนินการอื่นใดในลูป ไม่เพียงแค่นั้น แต่บ่อยครั้งที่ไฟล์อินพุตนั้นแตกต่างกันไป เคสแบบคลาสสิกคือไฟล์แบบเรียงต่อกันออกจากไฟล์ที่มีรูปหลายเหลี่ยมเพื่อคลิป นี่คือวิธีการแบบคลาสสิก (ทดสอบ) เพื่อให้ได้สิ่งนี้ในสคริปต์ไพ ธ อนสำหรับ QGIS (fyi การส่งออกของไฟล์หน่วยความจำชั่วคราวไปยังไฟล์จริงมากกว่าครึ่งเวลาในการประมวลผลไฟล์ทดสอบของฉัน) import processing import os input_file="/path/to/input_file.shp" clip_polygons_file="/path/to/polygon_file.shp" output_folder="/tmp/test/" input_layer = QgsVectorLayer(input_file, "input file", "ogr") QgsMapLayerRegistry.instance().addMapLayer(input_layer) tile_layer = QgsVectorLayer(clip_polygons_file, "clip_polys", "ogr") QgsMapLayerRegistry.instance().addMapLayer(tile_layer) tile_layer_dp=input_layer.dataProvider() EPSG_code=int(tile_layer_dp.crs().authid().split(":")[1]) tile_no=0 clipping_polygons = tile_layer.getFeatures() for clipping_polygon in clipping_polygons: print "Tile no: "+str(tile_no) tile_no+=1 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.