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

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

1
ลงทะเบียน qgsfunction ที่กำหนดเองใน pyqgis
ฉันใช้ pyqgis ในแอปพลิเคชันแบบสแตนด์อโลน ตอนนี้ผมต้องการที่จะสร้างการแสดงออกที่กำหนดเองเพื่อที่จะใช้เป็น FilterExpression ruleBasedRendererV2ในการปกครองของ (ฉันลองใช้โหมดแสดงภาพกับฟังก์ชั่นที่มีอยู่ก่อนหน้าและทุกอย่างทำงานได้ดี!) Custom qgisfunction(bitwise AND-function - เนื่องจากยังไม่มีฟังก์ชั่นดังกล่าว) มีลักษณะดังนี้: from qgis.utils import qgsfunction @qgsfunction(args="auto", group='Python') def bitwise_and(value1, value2, feature, parent): return value1 & value2 ฉันพยายามลงทะเบียนผ่าน: from qgis.core import QgsExpression QgsExpression.registerFunction(bitwise_and) ทดสอบการแสดงออกผ่าน: expressionString = 'bitwise_and(2, 2) = 2' exp = QgsExpression(expressionString) if exp.hasParserError(): print(exp.parserErrorString()) (ให้2=2เสมอTrue) ทำงานหลังจากลงทะเบียนฟังก์ชั่นและล้มเหลวหากไม่ได้ แต่ถึงกระนั้นฉันไม่สามารถใช้การแสดงออกภายในกฎ …

3
การหารูปหลายเหลี่ยมโดยทางโปรแกรม> 90% ซ้อนทับโดยชั้นรูปหลายเหลี่ยมเวกเตอร์อื่นโดยใช้ QGIS?
ฉันพยายามหาวิธีใช้ python เพื่อแยกรูปหลายเหลี่ยมในเวกเตอร์หนึ่งที่ซ้อนทับด้วย> 90% โดยเวกเตอร์อื่น ฉันต้องการมีเวกเตอร์ / แผนที่ที่จะแสดงรูปหลายเหลี่ยมเหล่านั้นเท่านั้น ภาพตัวอย่างแสดงเลเยอร์ของฉัน ฉันต้องการรูปหลายเหลี่ยมสีเทาทั้งหมดที่> แดง 90% ฉันต้องทำสิ่งนี้ผ่านทาง python (หรือวิธีการแบบอัตโนมัติในทำนองเดียวกัน) ฉันมีแผนที่ประมาณ 1,000 แผนที่เพื่อดำเนินการในลักษณะเดียวกัน
9 qgis  python  pyqgis 

2
ใช้เลเยอร์หน่วยความจำเป็นอินพุตและ / หรือเอาต์พุตด้วย runalg หรือไม่
เลเยอร์หน่วยความจำสามารถใช้เป็นอินพุทและ / หรือเอาท์พุทที่มีRunalg ได้หรือไม่? ด้วยrunandloadฉันสามารถใช้งานได้: processing.runandload("qgis:mergevectorlayers","memory:bufferOne", "memory:bufferTwo", r"memory:merged") processing.runandload("qgis:dissolve", r"memory:merged", True, '', r"D:\PythonTesting\dissolved.shp") พารามิเตอร์ 2 และ 3 เป็นเลเยอร์อินพุตซึ่งอยู่ในหน่วยความจำแล้วและพารามิเตอร์ 3 คือเลเยอร์เอาต์พุตซึ่งถูกเขียนลงในหน่วยความจำและใช้ในเครื่องมือต่อไปนี้ (ละลาย) มันใช้งานได้ดี แต่เมื่อฉันพยายามใช้ตรรกะเดียวกันกับrunalgแล้วเลเยอร์ที่ผสานของฉันในหน่วยความจำดูเหมือนจะไม่ถูกสร้างขึ้นเนื่องจากเครื่องมือ Dissolve ไม่เคยทำงาน ตัวอย่างเช่นต่อไปนี้จะไม่ทำงาน: processing.runalg("qgis:mergevectorlayers","memory:bufferOne", "memory:bufferTwo", r"memory:merged") processing.runandload("qgis:dissolve", r"memory:merged", True, '', r"D:\PythonTesting\datenschrott\dissolved.shp") ฉันสามารถสันนิษฐานได้ว่าrunalgไม่ยอมรับเลเยอร์ที่อยู่ในหน่วยความจำหรือไม่สามารถส่งออกได้หรือไม่?

1
การทำการพิมพ์ผู้แต่งโครงการ QGIS โดยอัตโนมัติหรือไม่
ฉันมีโครงการขนาดใหญ่ซึ่งประกอบด้วยไฟล์โครงการ QGIS ประมาณ 10 เท่า แต่ละโครงการมีผู้แต่งเพลงพร้อมด้วยแผนที่ตั้งค่าเพื่อสร้างแผนที่ได้สูงสุด 10 แผนที่ วิธีที่ง่ายที่สุดในการเปิดแต่ละโครงการโดยอัตโนมัติและสร้าง PDF โดยใช้แอทลาสผู้แต่งคืออะไร (บางอย่างเช่นนี้จะเหมาะ - ไม่แน่ใจว่าเป็นไปได้) C: \ OSGeo4W \ bin \ qgis.bat - โครงการ MyProject1.qgs - รหัส SaveAtlasAsPdf.py C: \ OSGeo4W \ bin \ qgis.bat - โครงการ MyProject2.qgs - รหัส SaveAtlasAsPdf.py

1
การเพิ่มเลเยอร์ PostGIS จากปลั๊กอิน QGIS Python
ฉันพยายามพัฒนาปลั๊กอินเพื่อเพิ่มเลเยอร์ postgis ลงใน qgis จากปลั๊กอินซึ่งเป็นส่วนหนึ่งของการเรียนรู้ภาษาไพ ธ อน รหัสสำหรับการเพิ่มเลเยอร์ postgis ถูกนำมาจากตำราอาหารและทำงานได้ดีถ้าฉันเรียกใช้จากคอนโซล Python ภายใน qgis (หากกดปุ่ม OK ในกล่องโต้ตอบผลลัพธ์ == 1 และควรเพิ่มเลเยอร์ของฉันไปยัง qgis) แต่ถ้าฉันเรียกใช้จากปลั๊กอินมันจะพ่นข้อความ NameError: ชื่อ 'QgsDataSourceURI' ไม่ได้ถูกกำหนดไว้ เหตุใดฉันจึงได้รับข้อผิดพลาดในการเรียกใช้จากปลั๊กอิน ฉันจะเพิ่มเลเยอร์จากปลั๊กอิน / ภายในฟังก์ชั่นกับความแตกต่างจากคอนโซลหลามได้หรือไม่ def run(self): """Run method that performs all the real work""" # show the dialog self.dlg.show() # Run the dialog event loop …

1
การกำหนดทางลัดให้กับสคริปต์ PyQGIS หรือไม่
เป็นไปได้ไหมที่จะกำหนดแป้นพิมพ์ลัดให้กับสคริปต์ (กำหนดเองหรือไม่ ... ) ของเครื่องมือประมวลผลใน QGIS? ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับมัน

3
การทำ Spatial Query ในลูปใน PyQGIS
สิ่งที่ฉันพยายามทำ: วนลูปผ่านไฟล์รูปร่างจุดและเลือกแต่ละจุดที่อยู่ในรูปหลายเหลี่ยม โค้ดต่อไปนี้ได้รับแรงบันดาลใจจากตัวอย่างการสืบค้นเชิงพื้นที่ที่ฉันพบในหนังสือ: mitte_path = r"D:\PythonTesting\SelectByLocation\mitte.shp" punkte_path = r"D:\PythonTesting\SelectByLocation\punkte.shp" polygon = QgsVectorLayer(mitte_path, 'Mitte', 'ogr') points = QgsVectorLayer(punkte_path, 'Berlin Punkte', 'ogr') QgsMapLayerRegistry.instance().addMapLayer(polygon) QgsMapLayerRegistry.instance().addMapLayer(points) polyFeatures = polygon.getFeatures() pointsCount = 0 for poly_feat in polyFeatures: polyGeom = poly_feat.geometry() pointFeatures = points.getFeatures(QgsFeatureRequest().setFilterRect(polyGeom.boundingBox())) for point_feat in pointFeatures: points.select(point_feat.id()) pointsCount += 1 print 'Total:',pointsCount มันใช้งานได้และมันเลือกชุดข้อมูล แต่ปัญหาก็คือมันเลือกตามขอบกล่องดังนั้นจึงทำให้เห็นได้ชัดว่าฉันไม่สนใจจุดกลับมา: …

2
เริ่มต้น QGIS ด้วย virtualenv Python หรือไม่
มีวิธีใดบ้างที่บอกให้ QGIS ใช้การติดตั้ง Python ที่แตกต่างจากค่าเริ่มต้นระบบทั่วทั้งระบบ? เช่นใช้ virtualenv Python บาง/myvirtualenv/bin/pythonตัวแทน/usr/bin/python? แบ็คกราวน์: ฉันกำลังพัฒนาปลั๊กอินที่กำหนดเองซึ่งใช้โมดูลบางตัวที่ติดตั้งใน virtualenv เท่านั้น แต่ไม่ใช่ทั้งระบบ virtualenv ได้รับอนุญาตให้เข้าถึงแพ็คเกจทั่วทั้งระบบดังนั้น qgis core libs ควรยังคงสามารถเข้าถึงได้เมื่อใช้ virtualenv นั้น ทางออกเดียวที่ฉันเห็นในตอนนี้คือการติดตั้งโมดูลที่จำเป็นใน Python ทั้งระบบ อย่างไรก็ตามฉันต้องการเก็บไว้ใน virtualenv เท่านั้นถ้าเป็นไปได้

1
เป็นไปได้หรือไม่ที่จะมีชื่อเลเยอร์แบบไดนามิกในโครงการ QGIS
ฉันมีโครงการ QGIS พร้อมเลเยอร์ตามแบบสอบถาม PostGIS SQL ที่ใช้วันที่ปัจจุบัน เนื่องจากข้อมูลในฐานข้อมูลมีการเปลี่ยนแปลงเคียวรีเหล่านี้จึงส่งคืนข้อมูลที่แตกต่างกันทุกวัน เป็นไปได้ไหมที่จะเปลี่ยนชื่อของเลเยอร์ในเลเยอร์พาเนลแบบไดนามิกดังนั้นจึงเป็นวันที่ปัจจุบัน (เช่นชื่อเลเยอร์เช่นTraffic on 24.01.2015ที่เปลี่ยนทุกวัน) ข้อมูลสำหรับคำอธิบายภาพที่ควรจะนำมาจากแอตทริบิวต์ของคุณลักษณะใด ๆ ในชั้น - traffic_dateพวกเขาทุกคนมีค่าเท่ากันสำหรับเขตข้อมูล

4
จะเข้าถึงฟีเจอร์ที่ส่งคืนโดย QgsSpatialIndex อย่างมีประสิทธิภาพได้อย่างไร
PyQGIS ตำราอธิบายถึงวิธีการตั้งค่าดัชนีเชิงพื้นที่ แต่เพียงอธิบายถึงครึ่งหนึ่งของการใช้งาน: สร้างดัชนีเชิงพื้นที่ - รหัสต่อไปนี้สร้างดัชนีที่ว่างเปล่า index = QgsSpatialIndex() เพิ่มคุณสมบัติในการทำดัชนี - ดัชนีใช้วัตถุ QgsFeature และเพิ่มลงในโครงสร้างข้อมูลภายใน คุณสามารถสร้างวัตถุด้วยตนเองหรือใช้จากการเรียกไปยังคุณลักษณะถัดไปของผู้ให้บริการ () index.insertFeature(feat) เมื่อดัชนีเชิงพื้นที่เต็มไปด้วยค่าบางอย่างคุณสามารถทำแบบสอบถามได้ # returns array of feature IDs of five nearest features nearest = index.nearestNeighbor(QgsPoint(25.4, 12.7), 5) ขั้นตอนที่มีประสิทธิภาพมากที่สุดในการรับคุณลักษณะจริงที่เป็นของรหัสคุณลักษณะที่ส่งคืนคืออะไร

3
สำหรับการวนลูปโฟลเดอร์ไปยังชุดคลิปแรสเตอร์โดยรูปหลายเหลี่ยมโดยใช้ python และ QGIS?
ฉันใช้ python และ QGIS 2.0 ฉันพยายามที่จะคลิป rasters ในโฟลเดอร์ด้วยคุณสมบัติรูปหลายเหลี่ยมเดียว มันเป็นครั้งแรกที่ฉันใช้ (สมมุติ) "PyQGIS" ฉันเคยชินกับการโค้งก่อน อย่างไรก็ตามฉันไม่ได้รับสคริปต์ง่ายๆของฉันทำงานข้อเสนอแนะใด ๆ จะได้รับการชื่นชมมาก! import qgis.core, qgis,utils QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True) QgsApplication.initQgis() CLIP= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp" INPUT_FOLDER="C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00" OUTPUT= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/foscagno_pyqgis/" for RASTER in INPUT_FOLDER.tif do echo "Processing $RASTER" gdalwarp -q -cutline CLIP -crop_to_cutline -of GTiff RASTER OUTPUT+ "clip_"+ RASTER done QgsApplication.exitQgis() ด้านล่างนี้คือการปรับปรุงที่ฉันทำตั้งแต่ตอนนี้ไม่ได้ทำให้สคริปต์ทำงาน แต่ฉันคิดว่าฉันอาจเข้าใกล้ ... …
9 gdal  pyqgis  gdalwarp 

3
วิธีใช้โปรแกรมแต่งแผนที่ในสคริปต์แบบสแตนด์อโลน
ฉันกำลังพยายามติดตามส่วนการแสดงแผนที่จากตำรา pyqgis แต่ฉันต้องการทดสอบนี้เป็นแอปพลิเคชันแบบสแตนด์อโลน ฉันสามารถทำส่วนแรกโดยใช้การเรนเดอร์แบบง่าย ๆ แต่ฉันก็ยังคงทำตัวอย่างที่สองโดยใช้ตัวแต่งแผนที่เป็นสคริปต์แบบสแตนด์อโลน นี่เป็นตัวอย่างสำหรับบิตที่ฉันสามารถทำได้: from qgis.core import * from qgis.gui import * from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtXml import * QgsApplication.setPrefixPath("/usr/", True) QgsApplication.initQgis() fh = open("eg.csv","w") fh.write(""" x,y,name 153.0278, -27.4679, Brisbane 144.2500, -23.4500, Longreach 145.7753, -16.9256, Cairns """) fh.close() uri = "eg.csv?delimiter=%s&xField=%s&yField=%s" % …
9 qgis  python  pyqgis 

1
ความเร็วของการแก้ไขคุณสมบัติใน QGIS จากปลั๊กอิน Python
ฉันกำลังพยายามแก้ไขค่าของคุณลักษณะสำหรับแต่ละคุณลักษณะในเลเยอร์โดยใช้ปลั๊กอิน QGIS Python ฉันพบว่าการทำสิ่งนี้นอกโหมดแก้ไขจะช้ากว่าขณะแก้ไข (แม้รวมถึงการแก้ไข) ดูรหัสด้านล่าง (บรรทัดที่เปลี่ยนได้ที่จุดเดียวกันในลูป) ความแตกต่างของความเร็วสำหรับชุดข้อมูลตัวอย่างของฉันคือ 2 วินาที (โหมดแก้ไข) และ 72 วินาที (ไม่ใช่โหมดแก้ไข) การปรับเปลี่ยนแอตทริบิวต์ในโหมดแก้ไข: layer.changeAttributeValue(feature.id(), 17, QtCore.QVariant(value)) การปรับเปลี่ยนแอตทริบิวต์นอกโหมดแก้ไข: layer.dataProvider().changeAttributeValues({ feature.id() : { 17 : QtCore.QVariant(value) } }) นี่เป็นพฤติกรรมที่คาดหวังหรือไม่? ฉันไม่ต้องการให้ผู้ใช้สามารถยกเลิกการเปลี่ยนแปลงได้ดังนั้นฉันไม่คิดว่าฉันต้องใช้โหมดแก้ไข แก้ไข 1:ดูรหัสเต็มด้านล่างโดยมีทั้งสองเวอร์ชันรวมไว้ (แต่ใส่ความเห็น) def run(self): try: # create spatial index of buffered layer index = QgsSpatialIndex() self.layer_buffered.select() for feature …
9 qgis  python  pyqgis 

6
สร้างป้ายกำกับที่จัดรูปแบบเช่น“ 1,000 '” จากฟิลด์ตัวเลขหรือไม่
คำถามนี้สร้างจากคำถามก่อนหน้านี้ที่พบใน gis.stackexchange: วิธีแก้ไขข้อมูลแอตทริบิวต์อย่างง่ายดายโดยใช้นิพจน์ปกติ บางทีใครบางคนสามารถชี้ให้ฉันในทิศทางที่ถูกต้อง? ฉันมีไฟล์รูปร่างเวกเตอร์ของเส้นชั้นความสูง ในตารางคุณลักษณะฉันได้แปลงเขตข้อมูลที่ชื่อว่า FEET ซึ่งประกอบด้วยข้อมูลจำนวนเต็มที่มีค่าระดับความสูงเป็นเขตข้อมูลสายอักขระที่ชื่อว่า Label นอกจากนี้ฉันผนวกท้าย 'เพื่อสิ้นสุดของสตริงเพื่อให้เมื่อมีการติดป้ายข้อมูลมันจะถูกอ่านเป็นฟุต สิ่งต่อไปที่ฉันพยายามทำคือการใส่เครื่องหมายจุลภาคระหว่างสองค่าแรกของสตริงเฉพาะเมื่อความยาวของสตริงมากกว่า 4 หรือเครื่องหมายจุลภาคจะปรากฏระหว่างหลักพันและหลักร้อยในฟิลด์ป้ายกำกับเท่านั้น ความยาวต้องมากกว่า 4 เพราะฉันยังนับ ' รหัสของฉันคือ: case when length( "Label") >4 then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end อย่างไรก็ตามฟังก์ชั่น regexp_replace ดูเหมือนจะไม่ยอมรับตัวแปรกลุ่ม $ 1 $ 2 ในพารามิเตอร์ที่ 3 ของฟังก์ชัน ฉันดูที่http://docs.python.org/2/library/re.htmlเนื่องจากเครื่องคำนวณภาคสนามนั้นมาจากสิ่งที่ฉันเข้าใจตามการใช้ regex ของไพ ธ อน แต่ก็ไม่สามารถเข้าใจได้ บางทีสิ่งที่ฉันพยายามจะทำยังไม่สามารถทำได้ด้วยฟังก์ชั่นนี้ในเครื่องคิดเลขภาคสนามใน …

3
ใช้ปลั๊กอิน QGIS Zonal Stats จาก Python Console หรือไม่
ฉันใช้ปลั๊กอิน Zonal Stats ใน QGIS เพื่อดึงข้อมูลสถิติแรสเตอร์จากรูปหลายเหลี่ยมที่ซ้อนทับกัน (ฉันมีรูปร่างของการกระจายพันธุ์และฉันต้องการดึงข้อมูลสิ่งแวดล้อมจากภายในแต่ละสปีชีส์) ฉันมีไฟล์ 300 ไฟล์ขึ้นไปฉันจำเป็นต้องได้รับข้อมูลและต้องการที่จะเขียนสคริปต์เพื่อให้ทำงานในคอนโซล python แต่ฉันเป็นมือใหม่ที่มี python และไม่รู้ว่าจะทำอย่างไร

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