Menyimpan indeks spasial di QGIS API?

9

Saya mencoba membuat indeks spasial untuk beberapa shapefile menggunakan Qgis API. Saya telah mengikuti langkah-langkah yang dijelaskan dalam blog Nathan Woodrow ( https://nathanw.net/2013/01/04/using-a-qgis-spatial-index-to-speed-up-your-code/ ) dan berfungsi dengan baik :

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

Masalah saya adalah bahwa saya tidak memiliki file yang dihasilkan (.qix? .Sbn? .Sbx?)

Bagaimana saya bisa menyimpan indeks spasial ini sehingga pengguna shapefile yang akan datang bisa mendapat manfaat darinya?

Lauref
sumber

Jawaban:

11

Jika Anda ingin membuat indeks spasial untuk semua fitur di lapisan Anda, Anda bisa mencoba menggunakan yang berikut:

layer.dataProvider().createSpatialIndex()

Ini akan membuat .qixfile indeks spasial.


Edit:

Seperti yang disebutkan oleh Matthias Kuhn dalam komentarnya di bawah ini, kelas QgsSpatialIndex hanya digunakan sementara seperti yang terlihat di blog yang Anda tautkan ; sedangkan fungsi createSpatialIndex () membuat indeks spasial pada sumber data dan menghasilkan qixfile untuk shapefile.

Yusuf
sumber
2
Saya pikir akan lebih baik untuk menyoroti perbedaan antara indeks runtime persisten (berbasis file) dan sementara (QgsSpatialIndex).
Matthias Kuhn
1
Terima kasih teman-teman! Saya hanya dapat menemukan informasi tentang QgsSpatialIndex. createSpatialIndex adalah persis apa yang saya cari.
Lauref
@Lauref - Luar biasa, senang itu membantu :)
Joseph
Setelah 4 mencoba menulis sesuatu yang komprehensif dalam komentar ini, saya harus menyerah dan mengakui bahwa itu akan membutuhkan lebih banyak untuk sesuatu yang memadai. Yang ingin saya katakan hanyalah bahwa informasi yang tidak gigih QgsSpatialIndex sudah memberikan banyak informasi tanpa penjelasan tambahan.
Matthias Kuhn
@MatthiasKuhn - Terima kasih, saya telah mengedit posting untuk menyertakan penjelasan singkat seperti yang Anda sebutkan;)
Joseph