ฉันจะเลือกคุณสมบัติด้วย PyQGIS โดยใช้นิพจน์ได้อย่างไร
ฉันพยายามใช้QgsExpression
แต่วิธีการเลือกไม่ได้:
exp = QgsExpression("'ogc_fid' = 482")
cLayer = canvas.currentLayer()
cLayer.select(exp)
เป็นไปได้และถ้าเป็นเช่นนั้นฉันจะทำอย่างไร
ฉันจะเลือกคุณสมบัติด้วย PyQGIS โดยใช้นิพจน์ได้อย่างไร
ฉันพยายามใช้QgsExpression
แต่วิธีการเลือกไม่ได้:
exp = QgsExpression("'ogc_fid' = 482")
cLayer = canvas.currentLayer()
cLayer.select(exp)
เป็นไปได้และถ้าเป็นเช่นนั้นฉันจะทำอย่างไร
คำตอบ:
รับการอ้างอิงเลเยอร์:
layer = iface.activeLayer()
เลือกคุณสมบัติตามนิพจน์:
layer.selectByExpression( "\"ogc_fid\"=482" )
ทำตามขั้นตอนเหล่านี้:
รับการอ้างอิงเลเยอร์:
cLayer = iface.mapCanvas().currentLayer()
รับ featureIterator จากนิพจน์:
expr = QgsExpression( "\"ogc_fid\"=482" )
it = cLayer.getFeatures( QgsFeatureRequest( expr ) )
สร้างรายการรหัสคุณลักษณะจากผลลัพธ์ที่ได้ใน 2:
ids = [i.id() for i in it]
เลือกคุณสมบัติด้วยรหัสที่ได้รับใน 3:
cLayer.setSelectedFeatures( ids )
หมายเหตุ: หากคุณต้องการตั้งค่านิพจน์ด้วยค่าสตริงคุณต้องเพิ่มเครื่องหมายคำพูดเป็นค่าดังกล่าวด้วยวิธีนี้:
expr = QgsExpression( " \"name\" = 'my string' " )
หากค่าสตริงของคุณมาจากตัวแปรคุณสามารถทำสิ่งนี้ได้:
myVariable = 'my string'
expr = QgsExpression( " \"name\" = '{}' ".format(myVariable) )
"\"ogc_fid\"=482 AND \"name\"='hello world'"
. BTW ลิงก์ที่คุณรวมไว้ในความคิดเห็นของคุณกำลังระบุว่าแอตทริบิวต์คงBinaryOperatorText
ไม่พร้อมใช้งานในการผูก Python แต่ตัวดำเนินการทำงานQgsExpression
ได้แม้ว่าจะถูกใช้ผ่านการผูก Python
expr = QgsExpression("\"police_ref\" = 'P0580996'")
คอลัมน์ประกอบด้วยสตริงเพื่อให้ฉันได้ใช้ ฉันได้ลองเพิ่มตัวแบ่งในคำค้นหา (สำหรับคำพูดเดียว) แต่มันก็ไม่ได้สร้างความแตกต่าง ที่น่าสนใจถ้าฉันเปิดตารางคุณลักษณะที่ฉันสอบถามและใช้ตัวสร้างนิพจน์ที่นั่นมันจะทำการเลือกถ้า police_ref ฉันใช้เป็นตัวอย่างอยู่ในแถวแรกมาก แต่ไม่เป็นอย่างอื่น
สิ่งนี้ใช้ได้กับฉันใน QGIS Python Console
layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))
คุณจะต้องทดสอบในอินเทอร์เฟซ GUI: "Select by Expression" หากใช้งานได้คุณสามารถวางในโค้ด Python ของคุณล้อมรอบด้วยเครื่องหมายคำพูดคู่ ""
exp = QgsExpression("ogc_fid=482")
หากคุณเปรียบเทียบกับสตริงคุณสามารถเพิ่มเครื่องหมายคำพูดเดี่ยว ''
exp = QgsExpression("ogc_fid='482'")
มันเป็นหลักการเดียวกันในไพ ธ อนมันสามารถสร้างความแตกต่างระหว่างอัญประกาศคู่และอัญประกาศเดี่ยวได้
"\"ogc_fid\"=482 AND name=\"hello world\""
อย่างไร ที่นี่มีข้อความระบุว่าไม่สามารถใช้งานได้ในภาษาไพธ อน : qgis.org/api/… . คุณอาจรู้วิธีหลีกเลี่ยงข้อ จำกัด นี้หรือไม่?