Збереження просторового індексу в API QGIS?


9

Я намагаюся створити просторовий індекс для деяких файлів форм за допомогою API Qgis. Я дотримувався кроків, описаних у блозі Натана Вудроу ( 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файл просторового індексу.


Редагувати:

Як згадував Маттіас Кун у своїх коментарях нижче, клас QgsSpatialIndex використовується лише тимчасово, як це спостерігається в блозі, з яким ви пов’язані; тоді як функція createSpatialIndex () створює просторовий індекс джерела даних і приводить до qixфайлу для shapefiles.


2
Я думаю, було б добре виділити різницю між стійким (на основі файлів) та тимчасовим індексом виконання (QgsSpatialIndex).
Маттіас Кун

1
Дякую, хлопці ! Я міг знайти лише інформацію про QgsSpatialIndex. createSpatialIndex - саме те, що я шукав.
Лауреф

@Lauref - Дивовижно, радий, що це допомогло :)
Джозеф

Після 4-х спроб написати щось вичерпне в цьому коментарі, я повинен здатися і визнати, що для чогось адекватного потрібно більше. Що я хотів сказати, це лише те, що інформація, яку QgsSpatialIndex не є стійкою, дає багато інформації вже без зайвих пояснень.
Маттіас Кун

@MatthiasKuhn - Дякую, я відредагував пост, щоб включити коротке пояснення, як ви згадали;)
Джозеф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.