¿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?

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.