ฉันแค่อยากจะโพสต์การปรับปรุงบางอย่างเพื่อให้คำตอบก่อนหน้านี้ในแง่ของการเปลี่ยนแปลง QGIS หลาม API ตั้งแต่รุ่น 2.0
ก่อนที่คุณจะได้รับรายชื่อของคุณสมบัติที่เลือกมีiface.activeLayer().selectedFeatures()
แต่ในQGIS
รุ่น>= 2.0
คุณตอนนี้ใช้ฟังก์ชั่นแทนQgsFeature.attributes()
QgsFeature.attributeMap()
ทั้งสองฟังก์ชั่นไม่ได้เหมือนกัน: attributes()
ตอนนี้ส่งกลับรายการในขณะที่เก่าattributeMap()
กลับพจนานุกรม ใช้เวลาสักครู่เพื่อเรียกดูเอกสาร API สำหรับQgsFeature.attributes()
, QgsAttributes
ฯลฯ ที่จะเข้าใจว่าแอตทริบิวต์จะถูกเก็บไว้ / เข้าถึงได้
หากคุณสนใจคุณสามารถอ่านเกี่ยวกับบางส่วนของเหตุผลที่อยู่เบื้องหลังการเปลี่ยนแปลง API ในหัวข้อรายชื่อผู้รับจดหมายนี้: [QGIS นักพัฒนา] ใหม่เวกเตอร์ API คุณลักษณะเลือก สั้น ๆ (ในคำพูดของนักพัฒนา QGIS Martin Dobias):
เข้าถึงคุณลักษณะ: ไม่มีf.attributeMap()
อีกต่อไปเพราะแอตทริบิวต์จะถูกเก็บไว้ในขณะนี้ในเวกเตอร์ (Python: list
) แทนของแผนที่ (Python: dict
) QgsFeature
คลาสเลียนแบบภาชนะหลามของออบเจ็กต์
4เพื่อให้คุณสามารถเข้าถึงแอททริบิวราวกับว่าQgsFeature
อินสแตนซ์เป็นรายการหรือพจนานุกรมโดยมีคีย์เป็นดัชนีฟิลด์หรือชื่อฟิลด์:
f[0]
... คุณลักษณะแรก
f["type"]
... แอตทริบิวต์ชื่อ "type"
ยังคงเป็นไปได้ที่จะได้รับคุณลักษณะทั้งหมด: f.attributes()
ส่งคืนรายการค่า
ดังนั้นเป็นตัวอย่างของสิ่งที่คุณถามว่าจะทำอย่างไร (รับข้อมูลสำหรับฟีเจอร์เดียวที่คุณเลือก) สมมติว่าคุณมีเลเยอร์ที่ประกอบด้วยcity
ฟีเจอร์ที่แต่ละรายการมีแอททริบิวรวมถึงแอcounty
ททริบิวต์ ในการรับcounty
ค่าของเมืองที่คุณเลือก (พูดHelena, AR
) ให้ทำดังต่อไปนี้ในคอนโซล Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
หากคุณต้องการค่าของเขตข้อมูลทั้งหมดในตารางแอตทริบิวต์ของเมืองคุณก็จะใช้:
cityData = city.attributes()