Speichern eines räumlichen Index in der QGIS-API?

9

Ich versuche, mithilfe der Qgis-API einen räumlichen Index für einige Shapefiles zu erstellen. Ich habe die in Nathan Woodrows Blog ( https://nathanw.net/2013/01/04/using-a-qgis-spatial-index-to-speed-up-your-code/ ) beschriebenen Schritte befolgt und es funktioniert hervorragend ::

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

Mein Problem ist, dass ich keine resultierende Datei habe (.qix? .Sbn? .Sbx?)

Wie kann ich diesen räumlichen Index speichern, damit zukünftige Benutzer der Shapefiles davon profitieren können?

Lauref
quelle

Antworten:

11

Wenn Sie einen räumlichen Index für alle Features in Ihrer Ebene erstellen möchten, können Sie Folgendes verwenden:

layer.dataProvider().createSpatialIndex()

Dadurch wird die .qixräumliche Indexdatei erstellt.


Bearbeiten:

Wie von Matthias Kuhn in seinen Kommentaren unten erwähnt, wird die QgsSpatialIndex- Klasse nur vorübergehend verwendet, wie in dem von Ihnen verlinkten Blog zu sehen ist. Die Funktion createSpatialIndex () erstellt einen räumlichen Index für die Datenquelle und führt zu einer qixDatei für Shapefiles.

Joseph
quelle
2
Ich denke, es wäre gut, den Unterschied zwischen einem persistenten (dateibasierten) und einem temporären Laufzeitindex (QgsSpatialIndex) hervorzuheben.
Matthias Kuhn
1
Danke Leute ! Ich konnte nur Informationen über QgsSpatialIndex finden. createSpatialIndex ist genau das, wonach ich gesucht habe.
Lauref
@ Lauref - Super, froh, dass es geholfen hat :)
Joseph
Nach 4 Versuchen, etwas Umfassendes in diesen Kommentar zu schreiben, muss ich mich ergeben und zugeben, dass es mehr für etwas Angemessenes erfordern würde. Was ich sagen wollte, ist nur, dass die Information, dass QgsSpatialIndex nicht persistent ist, bereits viele Informationen ohne zusätzliche Erklärung liefert.
Matthias Kuhn
@ MatthiasKuhn - Danke, ich habe den Beitrag bearbeitet, um eine kurze Erklärung aufzunehmen, wie Sie erwähnt haben;)
Joseph