Сохранение пространственного индекса в QGIS API?


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файлу для шейп-файлов.


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

1
Спасибо, парни ! Я мог только найти информацию о QgsSpatialIndex. createSpatialIndex это именно то, что я искал.
Лауреф

@ Lauref - Отлично, рад, что это помогло :)
Джозеф

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

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