¿Guardar un índice espacial en la API QGIS?

9

Estoy tratando de crear un índice espacial para algunos archivos de forma usando la API Qgis. He seguido los pasos descritos en el blog de Nathan Woodrow ( https://nathanw.net/2013/01/04/using-a-qgis-spatial-index-to-speed-up-your-code/ ) y funciona muy bien :

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

Mi problema es que no tengo ningún archivo resultante (.qix? .Sbn? .Sbx?)

¿Cómo puedo guardar este índice espacial para que los futuros usuarios de los shapefiles puedan beneficiarse de él?

Lauref
fuente

Respuestas:

11

Si desea crear un índice espacial para todas las entidades en su capa, puede intentar usar lo siguiente:

layer.dataProvider().createSpatialIndex()

Esto creará el .qixarchivo de índice espacial.


Editar:

Como lo menciona Matthias Kuhn en sus comentarios a continuación, la clase QgsSpatialIndex solo se usa temporalmente como se ve en el blog al que se vinculó; mientras que la función createSpatialIndex () crea un índice espacial en el origen de datos y da como resultado un qixarchivo para archivos shape.

José
fuente
2
Creo que sería bueno resaltar la diferencia entre un índice de tiempo de ejecución persistente (basado en archivos) y temporal (QgsSpatialIndex).
Matthias Kuhn
1
Gracias chicos ! Solo pude encontrar información sobre QgsSpatialIndex. createSpatialIndex es exactamente lo que estaba buscando.
Lauref
@Lauref - Impresionante, me alegro de que haya ayudado :)
Joseph
Después de 4 intentos de escribir algo exhaustivo en este comentario, tengo que rendirme y admitir que requeriría más para algo adecuado. Lo que quería decir es que la información de que QgsSpatialIndex no es persistente proporciona mucha información sin ninguna explicación adicional.
Matthias Kuhn
@MatthiasKuhn - Gracias, he editado la publicación para incluir una breve explicación como mencionaste;)
Joseph