Salvando um índice espacial na API QGIS?


9

Estou tentando criar um índice espacial para alguns shapefiles usando a API Qgis. Eu segui os passos descritos no blog de Nathan Woodrow ( https://nathanw.net/2013/01/04/using-a-qgis-spatial-index-to-speed-up-your-code/ ) e funciona muito bem :

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

Meu problema é que não tenho nenhum arquivo resultante (.qix? .Sbn? .Sbx?)

Como posso salvar esse índice espacial para que futuros usuários dos shapefiles possam se beneficiar?

Respostas:


11

Se você deseja criar um índice espacial para todos os recursos da sua camada, tente usar o seguinte:

layer.dataProvider().createSpatialIndex()

Isso criará o .qixarquivo de índice espacial.


Editar:

Conforme mencionado por Matthias Kuhn em seus comentários abaixo, a classe QgsSpatialIndex é usada apenas temporariamente, como visto no blog ao qual você vinculou; enquanto a função createSpatialIndex () cria um índice espacial na fonte de dados e resulta em um qixarquivo para shapefiles.


2
Eu acho que seria bom destacar a diferença entre um índice de tempo de execução persistente (baseado em arquivo) e temporário (QgsSpatialIndex).
Matthias Kuhn #

11
Obrigado rapazes ! Só consegui encontrar informações sobre QgsSpatialIndex. createSpatialIndex é exatamente o que eu estava procurando.
Lauref 22/11

@Lauref - Awesome, feliz que ajudou :)
Joseph

Após quatro tentativas de escrever algo abrangente neste comentário, tenho que me render e admitir que isso exigiria mais para algo adequado. O que eu queria dizer é que as informações que QgsSpatialIndex não são persistentes já fornecem muitas informações sem nenhuma explicação extra.
Matthias Kuhn

@MatthiasKuhn - Obrigado, eu editei o post para incluir uma breve explicação como você mencionou;)
Joseph
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.