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

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

1
ทำไมลำดับการนำเข้ามีความสำคัญในสคริปต์ประมวลผล PyQGIS แบบสแตนด์อโลน
ฉันเจอปัญหาแปลก ๆ ในขณะที่เรียกใช้สคริปต์ประมวลผล PyQGIS แบบสแตนด์อโลน ลำดับการนำเข้าในสคริปต์มีผลต่อการดำเนินการตามปกติ คุณสามารถทำให้เกิดปัญหาได้อีกครั้งโดยเปิดคอนโซล Python และป้อนสคริปต์ต่อไปนี้ (ฉันใช้ GNU / Linux, QGIS 2.6.1, กำลังประมวลผลปลั๊กอิน v.2.2.0-2 และ Python 2.7.3): # Prepare the environment import sys from qgis.core import QgsApplication from PyQt4.QtGui import QApplication app = QApplication([]) QgsApplication.setPrefixPath("/usr", True) QgsApplication.initQgis() # Prepare processing framework sys.path.append('/home/YOUR_USER/.qgis2/python/plugins') from processing.core.Processing import Processing Processing.initialize() …

7
ปลั๊กอิน QGIS: ปัญหาการนำเข้าไฟล์ (resources_rc) - ปลั๊กอินไม่โหลด - ปัญหาของ PATH
ฉันกำลังสร้างปลั๊กอิน qgis และไม่สามารถหาวิธีแก้ไขสำหรับข้อผิดพลาดนี้ได้ File "/usr/lib/python2.7/dist-packages/qgis/utils.py", line 478, in _import mod = _builtin_import(name, globals, locals, fromlist, level) ImportError: No module named resources_napoved_rc สำหรับทุกคนที่จะถามว่าฉันได้สร้างไฟล์ทรัพยากรหลามแล้ว: pyrcc4 -o resources_napoved_rc.py resources_napoved.qrc ฉันยังหาวิธีทำให้มันใช้งานไม่ได้ ฉันได้รับข้อผิดพลาดเดียวกันเสมอ ด้านบนของสคริปต์ฉันมี: import resources_napoved_rc.py ฉันใช้ไฟล์ ui โดยตรงจาก qtbuilder แนวคิดใดที่จะก้าวไปข้างหน้า? ฉันสมมติว่านี่จะต้องมีปัญหาเส้นทางบางอย่างหรือบางอย่างที่คล้ายกัน

3
การเลือกคุณสมบัติโดยใช้นิพจน์ด้วย PyQGIS
ฉันจะเลือกคุณสมบัติด้วย PyQGIS โดยใช้นิพจน์ได้อย่างไร ฉันพยายามใช้QgsExpressionแต่วิธีการเลือกไม่ได้: exp = QgsExpression("'ogc_fid' = 482") cLayer = canvas.currentLayer() cLayer.select(exp) เป็นไปได้และถ้าเป็นเช่นนั้นฉันจะทำอย่างไร

2
การตั้งค่าคุณสมบัติคุณสมบัติตามชื่อผ่านทาง QGIS python api?
ฉันพยายามตั้งค่าคุณสมบัติตามชื่อคุณลักษณะด้วยรหัสนี้ pr = layer.dataProvider() pr.addAttributes([QgsField("test", QVariant.Int)]) layer.updateFields() for feature in layer.getFeatures(): attrName = 'test' feature[attrName] = 1 แต่ในผลลัพธ์ฉันมีค่าว่างในทุกสาขา ถ้าฉันใช้ feature.setAttributes([1]) มันทำงานได้อย่างถูกต้อง ฉันทำอะไรผิด ทำไมคุณสมบัติ [attrName] = 1 ไม่ทำงาน อัปเดต : ค้นหาโซลูชันนี้ pr = layer.dataProvider() pr.addAttributes([QgsField("test", QVariant.Int)]) layer.updateFields() for feature in layer.getFeatures(): attrName = 'test' feature[attrName] = 1 pr.changeAttributeValues({feature.id() : {pr.fieldNameMap()[attrName] : …
13 pyqgis 

1
จะดูคำสั่งพิมพ์ผ่าน Python Script ในขณะที่เขียนโปรแกรมเสริมสำหรับ QGIS ได้อย่างไร?
มีวิธีการใช้งานปลั๊กอินที่กำหนดเองที่สร้างขึ้นสำหรับ QGIS ที่ Python Shell สามารถปรากฏขึ้นพร้อมกันเมื่อมีการเรียกใช้ปลั๊กอินเช่นหน้าจอดีบักหรือไม่? ฉันขอให้สิ่งนี้รู้ว่ามีวิธีดูคำสั่งพิมพ์ผ่าน Python Script หรือไม่ขณะเขียนโปรแกรมเสริมสำหรับ QGIS

1
อัลกอริธึมการเปลี่ยนแปลงขั้นต่ำของกล่องการเปลี่ยนแปลง
ฉันกำลังพยายามสร้างอัลกอริทึมที่คล้ายกับกล่อง bounding ต่ำสุด (แม้ว่ามันอาจจะดูไม่มีอะไรเหมือน) ในกรณีนี้มุมจะถูกส่งผ่านเป็นพารามิเตอร์และกำหนดมุมที่ฉันต้องการสี่เหลี่ยมเล็กที่สุดที่ครอบคลุมทุกจุด / รูปหลายเหลี่ยมของฉัน จนถึงแนวความคิดของฉันคือการหาจุดศูนย์กลางของจุดของฉัน (อัลกอริธึมเซนทรอยด์) และจากนั้นสร้างเส้นคู่ขนานสองเส้นที่มีมุมเดียวกับมุมพาราเมตริกและอีกสองเส้นตั้งฉากกับพวกเขา จากนั้นใช้การวนซ้ำย้ายบรรทัดเหล่านี้ออกด้านนอก (ในทิศทางตรงกันข้าม) จนกว่าจะมีจุดทั้งหมด ยังไม่จำเป็นต้องเป็นกล่องขั้นต่ำที่แน่นอนงานประมาณ (ฉันเดาว่าจะขึ้นอยู่กับขนาดของแต่ละขั้นตอนการทำซ้ำ) นี่คือรหัสของฉันจนถึงตอนนี้ ฉันได้ยุบรูปหลายเหลี่ยมทั้งหมดของฉันเป็นหนึ่งเดียว ฉันจะใช้เปลือกนูนเพื่อลดจุดยอด ฉันใส่จุดยอดทั้งหมดในรายการ - ไม่แน่ใจว่าจะช่วยได้หรือไม่ a = layer.getFeatures() for feat in a: geom = feat.geometry() a = geom.convexHull() vertexId = QgsVertexId() vertices = [] b = a.constGet().nextVertex(vertexId) while b[0]: vertices.append(b[1]) b = a.constGet().nextVertex(vertexId) หมายเหตุ: …

3
ทำปลั๊กอิน QGIS หลามสำหรับทั้งรุ่น 2.x และ 3.x?
ฉันอยู่ระหว่างการโอนย้ายปลั๊กอิน QGIS python จากและQGIS 2ไปยังQGIS 3แหล่งข้อมูลต่างๆ ยังไม่ชัดเจนว่าเป็นไปได้หรือไม่ที่จะมีปลั๊กอินที่เข้ากันได้กับทั้งสองเวอร์ชันหรือหากจำเป็นต้องมีสองจุดจับสำหรับปลั๊กอินเวอร์ชัน ปัญหาที่ฉันได้รับจนถึงตอนนี้คือวิธีจัดการการนำเข้า PyQt (PyQt4 / PyQt5)?

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

1
วิธีล้างการยกเลิกสคริปต์ประมวลผล QGIS จาก gui
ฉันได้เขียนสคริปต์ประมวลผล QGIS ที่ดำเนินการวิเคราะห์สิ่งอำนวยความสะดวกที่ใกล้เคียงที่สุด นำชุดข้อมูลอินพุตที่สมบูรณ์ (ที่อยู่ 20k เป็นจุดเริ่มต้น ~ 100 คะแนนเป้าหมายเครือข่ายถนน OSM พร้อม ~ 13k linestrings) สคริปต์ทำงานประมาณ 3 ชั่วโมงและใช้ตัวบ่งชี้ความคืบหน้าต่างๆเพื่อสร้างความมั่นใจให้กับผู้ใช้ว่าเป็น ยังมีชีวิตอยู่ (บันทึกออก, แถบความคืบหน้า, เวลาที่เหลือ, แถบยางบ่งบอกถึงวิธีการอำนวยความสะดวกที่ใกล้เคียงที่สุดเพียงแค่ประมวลผล, หน้าจอ cp. ด้านล่าง): ตอนนี้ฉันต้องการยกเลิกสคริปต์ที่ใช้งานอยู่และเท่าที่ฉันสามารถเห็นได้สิ่งนี้สามารถทำได้ที่[X]มุมบนขวาในหน้าต่างประมวลผลสคริปต์ gui เท่านั้น แต่การทำเช่นนั้นสคริปต์ยังคงดำเนินการตามที่ระบุโดยแถบยางสีฟ้ารวมถึงเวลาในการประมวลผลและแถบความคืบหน้า ... ... และทรัพยากรระบบในตัวจัดการงาน: อย่างไรก็ตามสองสามนาที (~ 14 นาที) ในสคริปต์จะหยุดการประมวลผลและระบบจะไม่ใช้ทรัพยากรอีกต่อไป: เนื่องจากช่วงเวลาระหว่างการปิดหน้าต่างและการหยุดการประมวลผลดูเหมือนจะคาดเดาไม่ได้สำหรับฉันคำถามของฉันคือ: นี่เป็นวิธีที่แนะนำในการยกเลิกสคริปต์การประมวลผล QGIS หรือมีวิธีอื่นในการยกเลิกสคริปต์แบบหมดจดจาก gui หรือไม่

2
การตั้งค่าเริ่มต้นในฟิลด์ QGIS
ฉันต้องการเพิ่มค่าเริ่มต้นในฟิลด์ของเลเยอร์ ฉันหมายความว่าทุกครั้งที่มีการสร้างคุณลักษณะใหม่ฟิลด์นั้นจะถูกเติมด้วยค่าเริ่มต้นโดยอัตโนมัติ ในกรณีของฉันค่าเริ่มต้นจะเป็นตัวแปร @project_filename (ชื่อไฟล์ของโครงการ) ฉันไม่พบฟังก์ชันการทำงานนี้ทุกที่ ความนับถือ,

1
PyQGIS บันทึกแรสเตอร์เป็นรูปภาพที่แสดงผลแล้วใช้เครื่องมือ GDAL ในนั้น
ฉันได้พยายามที่จะใช้รหัสจากQGIS บันทึก Raster เป็นภาพการแสดงผล iเป็นเลเยอร์แรสเตอร์: pipelayer = i pipeextent = pipelayer.extent() pipewidth, pipeheight = (pipelayer.width(), pipelayer.height()) piperenderer = pipelayer.renderer() pipeprovider = pipelayer.dataProvider() crs = pipelayer.crs().toWkt() pipe = QgsRasterPipe() pipe.set(pipeprovider.clone()) pipe.set(piperenderer.clone()) pipedFile = os.path.join(tempfile.gettempdir(), safeLayerName + '_pipe.tif') print pipedFile file_writer = QgsRasterFileWriter(pipedFile) file_writer.writeRaster(pipe, pipewidth, pipeheight, pipeextent, pipelayer.crs()) in_raster = pipedFile prov_raster …

3
เป็นไปได้หรือไม่ที่จะใช้เลเยอร์หน่วยความจำในอัลกอริทึมการประมวลผล QGIS?
ฉันกำลังสร้างปลั๊กอิน QGIS ที่เชื่อมต่อกับฐานข้อมูล MySQL ในเครือข่ายท้องถิ่นแล้วเพิ่มส่วนย่อยของหนึ่งในตารางไปยังเลเยอร์ในหน่วยความจำ เซตย่อยจะขึ้นอยู่กับสกุลเงินของข้อมูล (ทำการสังเกตล่าสุดสำหรับแต่ละตำแหน่งที่ทำการวัดเท่านั้น) สร้างเลเยอร์หน่วยความจำนี้สำเร็จ อย่างไรก็ตามฉันต้องการเรียกใช้อัลกอริทึมการประมวลผลทางภูมิศาสตร์บางอย่างและฉันมีปัญหาในการใช้เลเยอร์ในหน่วยความจำในส่วนใด ๆ ของพวกเขา self.stationuri = "point?crs=epsg:4326&field=id:integer&field={}:double&index=yes".format(self.cb_field.currentText()) self.vlayer = QgsVectorLayer(self.stationuri,"scratch","memory") if not self.vlayer.isValid(): raise Exception("Failed to create in-memory layer") self.vlayer.startEditing() for i,r in enumerate(result): # Result is row-by-row result of SQL query # Add features ... self.vlayer.commitChanges() self.vlayer.updateExtents() # Add layer to map …

3
แยกคุณสมบัติเมื่อตัดกันด้วยคุณสมบัติของอีกชั้นหนึ่งโดยใช้ PyQGIS / Python หรือไม่?
ฉันมีเลเยอร์บัฟเฟอร์ (รูปหลายเหลี่ยมสีเขียว) ซึ่งฉันต้องการแยกเป็นรูปหลายเหลี่ยมสองรูปเมื่อใดก็ตามที่ข้ามสิ่งกีดขวาง (เส้นสีน้ำเงิน) ฉันพยายามใช้วิธี "splitGeometry" แต่ฉันไม่สามารถใช้งานได้ รหัสของฉันคือ: while ldbuffprovider.nextFeature(feat): while barprovider.nextFeature(feat2): if feat.geometry().intersects(feat2.geometry()): intersection = feat.geometry().intersection(feat2.geometry()) result, newGeometries, topoTestPoints=feat.geometry().splitGeometry(intersection.asPolyline(),True) ซึ่งส่งคืน 1 สำหรับผลลัพธ์ (ข้อผิดพลาด) และรายการว่างสำหรับ newGeometries ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก

1
วิธีการจัดการ QgsMessageBar“ ภารกิจเสร็จสมบูรณ์” ใหม่ใน Python?
ฉันประหลาดใจจริง ๆ ว่าขั้นตอนใหญ่ ๆ ที่การพัฒนา QGIS เกิดขึ้นในช่วงหลายเดือนที่ผ่านมา ชุดไอคอนใหม่ตัวแต่งการพิมพ์ที่ได้รับการปรับปรุงและการเปลี่ยนแปลงอื่น ๆ อีกมากมายใน QGIS 2.0 นั้นยอดเยี่ยมมาก! ท่ามกลางการปรับปรุงที่ยอดเยี่ยมอื่น ๆ อีกมากมายนอกจากนี้ยังมีแถบงานสีน้ำเงินที่ดีซึ่งฉันพบว่าน่าดึงดูดมาก เป็นไปได้หรือไม่ที่จะกำหนดแถบนี้เป็นไพ ธ อนสำหรับสคริปต์และปลั๊กอิน (เช่นเพื่อแสดงข้อความเล็ก ๆ หลังจากการคำนวณเสร็จสิ้น)? ฉันถามคำถามนี้ที่นี่เพราะฉันเชื่อว่านักพัฒนา QGIS จำนวนมากยังเยี่ยมชมเว็บไซต์ถามตอบนี้ PS: แถบจะปรากฏเฉพาะใน QGIS dev และสำหรับการดำเนินการบางอย่างเท่านั้น
12 qgis  python  pyqgis 

4
รับรหัสหลาม QGIS 2.x เพื่อทำงานใน QGIS 3.x? วัตถุไม่มีแอตทริบิวต์ 'legendInterface'
โค้ดต่อไปนี้ทำงานได้ดีใน QGIS 2.x แต่มันไม่ทำงานใน QGIS 3.x myDir = 'd:/work/output_folder/' layers = iface.legendInterface().layers() pipe = QgsRasterPipe() for layer in layers: extent = layer.extent() width, height = layer.width(), layer.height() renderer = layer.renderer() provider=layer.dataProvider() crs = layer.crs().toWkt() pipe.set(provider.clone()) pipe.set(renderer.clone()) opts = ["COMPRESS=LZW"] file_writer = QgsRasterFileWriter(myDir + layer.name() + ".tif") file_writer.setCreateOptions(opts) file_writer.writeRaster(pipe, width, height, …

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