在QGIS API中保存空间索引?


9

我正在尝试使用Qgis API为某些shapefile创建空间索引。我已按照内森·伍德罗(Nathan Woodrow)博客(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?)

如何保存该空间索引,以便Shapefile的未来用户可以从中受益?

Answers:


11

如果要为图层中的所有要素创建空间索引,则可以尝试使用以下方法:

layer.dataProvider().createSpatialIndex()

这将创建.qix空间索引文件。


编辑:

正如Matthias Kuhn在下面的评论中提到的那样,QgsSpatialIndex类仅在您链接到的博客中被临时使用。而createSpatialIndex()函数在数据源上创建空间索引,并生成qixshapefile文件。


2
我认为最好突出显示持久性(基于文件)和临时运行时索引(QgsSpatialIndex)之间的区别。
马提亚斯·库恩

1
谢谢你们 !我只能找到有关QgsSpatialIndex的信息。createSpatialIndex正是我想要的。
劳瑞夫,2016年

@Lauref-太好了,很高兴能为您带来帮助:)
约瑟夫

经过4次尝试在此评论中写出一些综合性内容之后,我不得不屈服并承认,对于足够的内容,它还需要更多。我只想说QgsSpatialIndex不是持久性的信息已经提供了很多信息,而没有任何额外的解释。
马提亚斯·库恩

@MatthiasKuhn-谢谢,我对帖子进行了编辑,以包括您提到的简短解释;)
Joseph
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.