วิธีรับข้อมูลที่อยู่ในตารางคุณลักษณะพูดในคอลัมน์ 2 แถว 2 โดยใช้ pyqgis คืออะไร
วิธีรับข้อมูลที่อยู่ในตารางคุณลักษณะพูดในคอลัมน์ 2 แถว 2 โดยใช้ pyqgis คืออะไร
คำตอบ:
ในการวนซ้ำทุกคุณลักษณะในเลเยอร์ให้ใช้ตัวgetFeatures()
สร้าง ส่งคืนตัววนซ้ำของคุณลักษณะ ( QgsFeature
) ในเลเยอร์
for feature in layer.getFeatures():
pass # do something with feature
หากคุณสนใจคุณสมบัติเฉพาะแทนที่จะเป็นคุณสมบัติทั้งหมดในเลเยอร์คุณสามารถเข้าถึงได้โดยใช้ a QgsFeatureRequest
และเป็น FID:
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
เมื่อคุณมีQgsFeature
วัตถุคุณสามารถใช้attributes()
วิธีการดึงข้อมูลคุณสมบัติ (คอลัมน์หรือช่อง aka) ที่เกี่ยวข้องกับสถานที่นั้น (แถว aka) เช่น:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
หากคุณต้องการจัดทำดัชนีฟิลด์ตามชื่อแทนที่จะเป็นตัวเลขคุณต้องใช้การแมปฟิลด์:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
ดัชนีฟิลด์ไม่ควรเปลี่ยนแปลงระหว่างการวนซ้ำดังนั้นคุณจะต้องเรียกมันครั้งเดียวเท่านั้น
มีข้อมูลเพิ่มเติมและตัวอย่างในตำราอาหาร PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
ปรับปรุง
คุณสามารถเข้าถึงคุณลักษณะคุณลักษณะได้ง่ายขึ้นโดยใช้สิ่งที่QgsFeature
ต้องการdict
เช่น
for feature in layer.getFeatures():
name = feature["name"]
ฉันไม่แน่ใจว่าจะมีเวอร์ชั่นใดเข้ามา
คิดว่าฉันจะเพิ่มรหัสบางส่วนเนื่องจาก googling ปัญหานี้ส่งคืนคำถามนี้ ... คนส่วนใหญ่ต้องการคำอธิบายสั้น ๆ หรือตัวอย่างรหัสไปยังลิงก์ที่นำไปสู่หน้าเว็บที่มีข้อมูลเพิ่มเติมมากมาย
ในการรับข้อมูลในตารางคุณต้องเข้าถึงฟีเจอร์ของเลเยอร์ก่อน ในกรณีของฉันฉันใส่คุณสมบัติในตัวแปร แล้วคุณห่วงผ่านคุณสมบัติและคุณลักษณะแต่ละครั้งที่คุณโทรหาคุณลักษณะของมันซึ่งจากนั้นจะสามารถพิมพ์โดยใช้ของพวกเขาดัชนีคอลัมน์ ตัวอย่างเช่นหากฉันต้องการรับค่าทั้งหมดในคอลัมน์ที่สองฉันจะทำสิ่งนี้:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
คำตอบข้างต้นแสดงเฉพาะวิธีการนี้สำหรับเลเยอร์ที่ใช้งานอยู่ ฉันคิดว่าในหลายกรณีคุณอาจต้องการหาคุณลักษณะที่กล่าวว่าสำหรับเลเยอร์ที่ไม่ใช่เลเยอร์ที่ใช้งานอยู่หรือตรวจสอบเลเยอร์ในหน้าต่างเลเยอร์ รหัสด้านล่างจะได้รับรายการเลเยอร์ทั้งหมดที่คุณเพิ่มลงในหน้าต่างเลเยอร์ของคุณ (ไม่ว่าพวกเขาจะได้รับการตรวจสอบหรือใช้งานอยู่) และค้นหาแอททริบิวที่แถว 2, คอลัมน์ 2
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
หมายเหตุ mapLayersByName ส่งคืนรายการเลเยอร์ที่มีชื่อที่กำหนด ฉันสมมติว่ามีอยู่สำหรับตัวอย่างนี้