เลือก feature ที่มี Attribute บางตัวตรงกัน โดยอัตโนมัติ แบบเร็ว ๆ ใน QGIS ทำอย่างไร? ตัวอย่าง ถ้าคลิกที่รูปแปลงที่ดินใดแล้ว หากค่า Attribute ในฟิลด์ ST_Value ตรงกันกับแปลงที่เลือก ก็ให้เลือกขึ้นมาทั้งหมด จะได้รู้ว่าอยู่ตรงไหนบ้าง
ท้าวความ…เมื่อไม่กี่วันก่อน ได้พูดคุยกับผู้ร่วมงาน ซึ่งกำลังทำงานใน QGIS แล้วต้องค้นหาว่า ข้อมูลที่ดินซึ่งต้องการนั้นมีแปลงอื่นที่มีข้อมูลแบบเดียวกัน อยู่ตรงไหนบ้าง สมมติ จะดูว่าแปลงที่ดินนี้ มีข้อมูล St_Value เท่าไหร่ แล้วแปลงอื่น ๆ ที่มีข้อมูล ST_Value นี้เท่ากัน อยู่ตรงไหนบ้าง
ซึ่งวิธีที่ผู้ร่วมงานท่านนี้ใช้คือ คลิกเลือกแปลงที่ต้องการ เปิด Attribute Table มาดูว่า ST_Value เป็นเท่าไหร่ แล้วใช้ Query หา แปลงที่ดินที่มี ST_Value เท่ากัน
ตอนแรก ก็สอบถามไปว่า ทำไมไม่กำหนด Symbology แยกตามค่าของ ST_Value ที่ต้องการเลยล่ะ จะได้เห็นชัด ๆ โดยไม่ต้องคลิกเลือกอะไรด้วยซ้ำ ก็ได้รับคำตอบว่าเนื่องจากข้อมูลในฟิลด์ ST_Value นี้มีความหลากหลายมาก ถ้ากำหนดสีตามค่า น่าจะมีความลายพร้อยลานตาไปหมด และอาจจะเห็นสีที่ใกล้เคียงกันเป็นสีเดียวกันหรือเปล่า?
พอเอาข้อมูลมาดู ค่า ST_Value มีความหลากหลายตั้งแต่ 500 จนถึงหลักล้าน น่าจะแยกด้วย Symbology ไม่ไหวจริง ๆ
ก็โอเค พอจะเข้าใจอยู่ว่าทำไมถึงต้องมาคลิกเลือกทำ Query กันทีละครั้ง
คือจริง ๆ วิธีนี้มันก็ง่ายอยู่แล้วแหละ แต่จะหาวิธีที่ง่ายกว่านี้อีก มีหรือไม่? ก็ค้นไปจนเจอ https://docs.qgis.org/3.16/en/docs/training_manual/create_vector_data/actions.html (ตอนที่เขียนอยู่นี้ ใช้ QGIS 3.16.6 นะจ๊ะ) วิธีนี้เป็นการสร้าง Actions หรือ “ชุดกลุ่มคำสั่ง” (อันนี้เรียกเอง ไม่รู้ภาษาไทยใช้อะไร) คืออะไรที่เราทำซ้ำ ๆ แบบเดิม เราก็สร้าง Action มาใช้ แบบเดียวกับ macro ใน excel หรือ access นั่นแล สาธุชน
วิดีโอแสดงตัวอย่าง
สร้าง Actions เลือก feature ที่มี Attribute บางตัวตรงกัน
ทำความเข้าใจกันก่อน ครั้งนี้จะกำหนดว่า ถ้าคลิกที่รูปแปลงที่ดินใดแล้ว หากค่า Attribute ใน ST_Value ตรงกันกับรูปแปลงที่เลือก ก็ให้เลือกขึ้นมาทั้งหมด จะได้รู้ว่าอยู่ตรงไหนบ้าง
ตัวอย่างนี้ จะทำงานกับ layer ชื่อ parcel_10050000_47
- คลิกขวา Properties ตรงชื่อ Layer
- ดูตรงฝั่งซ้ายมือ เลือกหัวข้อ Actios
- คลิกเครื่องหมาย + (เพิ่ม Action ใหม่ – Add a New Action)
- เลือก Type เป็น Python ใส่ คำอธิบาย (Description) และชื่อเรียก (Shot Name) อย่างที่ต้องการ (แนะนำอย่างจริงใจอย่าใส่ 1234 หรืออะไรแบบนั้น ควรเขียนเพื่อให้รู้ว่า Action นี้ใช้ทำอะไร)
ตรงช่อง Action Text ใส่โค้ด
layer = QgsProject.instance().mapLayer('[% @layer_id %]') layer.selectByExpression('"ST_VALUE"=\'[%ST_VALUE%]\'')
หมายเหตุ ใส่ชื่อฟิลด์ให้ถูก (ในที่นี้คือ ST_VALUE) ถ้าไม่แน่ใจ ดูตัวเลือกด้านล่าง จะมีช่องให้กดสามเหลี่ยมเพื่อเลือกชื่อฟิลด์ แล้วกด insert เพื่อแทรกได้
อ่านเพิ่มเติมเกี่ยวกับการใช้คำสั่ง python ได้ที่ เอกสารของ QGIS
คลิก OK
ใช้งาน
เวลาใช้งาน เจ้า Action ที่เราสร้างมานี้ จะไปอยู่ในเมนูด้านบน รูปหน้าตาจะเป็นฟันเฟือง (ถ้าไม่พบ ลองคลิกขวาที่เมนูบาร์ด้านบน เรียก Attribute Toolbar ขึ้นมา)
ลองคลิกปุ่มที่เราสร้างขึ้นมา อย่างในนี้เราเรียก Select_Attribute ที่สร้างไว้ แล้วมาคลิกเลือกแปลงที่ต้องการ หลังจากนั้น แปลงใดก็ตามที่มีข้อมูลในฟิลด์ ST_VALUE ตรงกับรูปแปลงที่เราคลิกก็จะโดนเลือกมาพร้อมกัน
อันนี้ก็เป็นวิธีหนึ่งที่หวังว่าจะเป็น Trick ในการทำงาน