กำลังบันทึกดัชนีเชิงพื้นที่ใน QGIS API หรือไม่


9

ฉันกำลังพยายามสร้างดัชนีเชิงพื้นที่สำหรับรูปร่างบางไฟล์โดยใช้ Qgis API ฉันได้ทำตามขั้นตอนที่อธิบายไว้ในบล็อกของ Nathan Woodrow ( https://nathanw.net/2013/01/04/using-a-qgis-spatial-index-to-speed-up-your-code/ ) และใช้งานได้ดี :

layer = QgsVectorLayer(path, name, 'ogr')
idx = QgsSpatialIndex()
all_features = layer.getFeatures()
map(idx.insertFeature, all_features)

ปัญหาของฉันคือฉันไม่มีไฟล์ที่เป็นผลลัพธ์ (.qix? .sbn? .sbx?)

ฉันจะบันทึกดัชนีเชิงพื้นที่นี้เพื่อให้ผู้ใช้ในอนาคตของรูปร่างไฟล์ได้ประโยชน์จากมันได้อย่างไร

คำตอบ:


11

หากคุณต้องการสร้างดัชนีเชิงพื้นที่สำหรับคุณลักษณะทั้งหมดในเลเยอร์ของคุณคุณสามารถลองใช้สิ่งต่อไปนี้:

layer.dataProvider().createSpatialIndex()

สิ่งนี้จะสร้าง.qixไฟล์ดัชนีเชิงพื้นที่


แก้ไข:

ดังที่Matthias Kuhnกล่าวไว้ในความคิดเห็นของเขาด้านล่างคลาสQgsSpatialIndexจะถูกใช้ชั่วคราวตามที่เห็นในบล็อกที่คุณเชื่อมโยงกับ; ในขณะที่ฟังก์ชั่นcreateSpatialIndex ()สร้างดัชนีเชิงพื้นที่บนแหล่งข้อมูลและผลลัพธ์ในqixไฟล์สำหรับ shapefiles


2
ฉันคิดว่ามันจะเป็นการดีที่จะเน้นความแตกต่างระหว่างถาวร (ตามไฟล์) และดัชนีชั่วคราวรันไทม์ (QgsSpatialIndex)
Matthias Kuhn

1
ขอบคุณเพื่อน ! ฉันหาข้อมูลเกี่ยวกับ QgsSpatialIndex ได้เท่านั้น createSpatialIndex เป็นสิ่งที่ฉันกำลังมองหา
Lauref

@Lauref - ยอดเยี่ยมดีใจที่มันช่วย :)
โจเซฟ

หลังจาก 4 พยายามเขียนสิ่งที่ครอบคลุมในความคิดเห็นนี้ฉันต้องยอมแพ้และยอมรับว่ามันจะต้องมีอะไรบางอย่างที่เพียงพอมากกว่า สิ่งที่ฉันอยากจะบอกก็คือข้อมูลที่ QgsSpatialIndex ไม่ขัดขืนจะให้ข้อมูลจำนวนมากอยู่แล้วโดยไม่มีคำอธิบายเพิ่มเติม
Matthias Kuhn

@MatthiasKuhn - ขอบคุณฉันได้แก้ไขโพสต์เพื่อรวมคำอธิบายสั้น ๆ ตามที่คุณพูดถึง;)
โจเซฟ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.