“ เลือกตามคุณสมบัติ” ใน QGIS โดยใช้ python หรือไม่


16

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

ในโซลูชันปัจจุบันของฉันฟังก์ชันเชื่อมต่อ QGIS กับฐานข้อมูล PostgreSQL และเรียกใช้คำสั่ง SQL สิ่งนี้จะสร้างตารางจากผลลัพธ์และตารางนั้นจะมองเห็นเป็น Shapefile ใน QGIS

โดยหลักแล้วจะเพียงพอที่จะเน้นคุณสมบัติและไม่สร้าง Shapefile ใหม่ของส่วนที่เลือก การใช้ฟังก์ชั่น "เลือกตามคุณสมบัติ" จะเป็นการข้ามการเชื่อมต่อฐานข้อมูลที่ไม่จำเป็น

มีวิธีการใช้ฟังก์ชั่น "Select by Attribute" ใน python เพื่อให้มีการเน้นคุณสมบัติหรือไม่? การใช้ฟังก์ชั่นใน QGIS คุณสมบัติทั้งหมดที่ไม่ตรงกับการสืบค้นนั้นเป็นการลบล้างชั่วคราวที่จะใช้ได้เช่นกัน


1
คำตอบเหล่านี้จำเป็นต้องมีการปรับปรุง qgis 3
MonsterMushroom

คำตอบ:


8

ใช่. คุณสามารถรับแอททริบิวต์ทั้งหมดผ่านการเชื่อมโยงของไพ ธ อนและใช้การกรองพิเศษในปลั๊กอินของคุณเอง ดูPyQGIS Coobook ตัดตอนมาจากบทสรุปและตัวอย่างบางส่วน จากนั้นคุณเพียงแค่แยกผลลัพธ์ที่ไม่ตรงกับผลลัพธ์จากพจนานุกรมที่ส่งคืน

สำหรับการสร้างภาพคุณอาจยังต้องสร้างเลเยอร์อีกอันเนื่องจากselect()ไม่มีข้อโต้แย้งที่เหมาะสม คุณสามารถใช้เลเยอร์หน่วยความจำเพื่อหลีกเลี่ยงการสร้างไฟล์ที่มีอยู่จริง (เพิ่มเติมในไฟล์ในตำรา)

แก้ไข:

ที่จริงแล้วคุณสามารถใช้selectedFeaturesIds()กับsetSelectedFeatures(ids)เพื่อเปลี่ยนการเลือกเป็นชุดย่อยที่คุณสร้างขึ้น การอ้างถึงการนำไปปฏิบัติโดยตรง:

/** Get a copy of the user-selected features */  
QList<QgsFeature> selectedFeatures();

/** Return reference to identifiers of selected features */
const QSet<qint64> &selectedFeaturesIds() const;

/** Change selection to the new set of features */
void setSelectedFeatures(const QSet<qint64> &ids);

น่าเสียดายมาก! ฉันคิดว่ามันเป็นไปได้ใน QGIS เพราะมันเป็นไปได้ใน ArcGIS โดยใช้ arcpy อย่างไรก็ตามขอขอบคุณสำหรับคำตอบของคุณ!
userHH

อาจจะมีวิธี; ฉันแค่ไม่รู้ ให้เวลากับผู้ใช้คนอื่น ๆ ของไซต์ - บางทีอาจมีคนทำ
lynxlynxlynx

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

มันคือฉันพบมัน QGIS ทำเช่นนี้ในแกนกลาง แต่ดูเหมือนว่าจะมีอินเทอร์เฟซมากพอที่จะปรับการเลือกได้อย่างเหมาะสม
lynxlynxlynx

คุณช่วยส่งลิงก์ให้ฉันได้ไหม
userHH

9

เริ่มต้นจาก QGIS 2.2 สิ่งนี้ได้รับการสนับสนุนอย่างเป็นธรรมชาติ สามารถทำได้ผ่านเอ็นจิ้นการแสดงออก QGIS โดยใช้QgsFeatureRequest.setFilterExpression( unicode )วิธีการ

# The important part: get the feature iterator with an expression
it = l.getFeatures( QgsFeatureRequest().setFilterExpression ( u'"Counties" = \'Norwich\'' ) )
# Set the selection
l.setSelectedFeatures( [ f.id() for f in it ] )

สิ่งที่ดีที่สุดเกี่ยวกับมัน: หากคุณมีรุ่น QGIS เมื่อเร็ว ๆ นี้ (2.10 ขึ้นไป) สิ่งนี้จะถูกกรองโดยตรงในฐานข้อมูลซึ่งมีประสิทธิภาพมากกว่าโซลูชันอื่น ๆ ในขณะที่ยังอ่านได้ง่ายมาก


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