QGIS APIで空間インデックスを保存しますか?


9

Qgis APIを使用して、いくつかのシェープファイルの空間インデックスを作成しようとしています。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?)

この空間インデックスを保存して、シェープファイルの将来のユーザーがそれを利用できるようにするにはどうすればよいですか?

回答:


11

レイヤー内のすべてのフィーチャの空間インデックスを作成する場合は、以下を使用してみてください。

layer.dataProvider().createSpatialIndex()

これにより、.qix空間インデックスファイルが作成されます。


編集:

で述べたようにマティアス・クーン以下の彼のコメントで、QgsSpatialIndexのあなたはにリンクされているブログで見られるようなクラスは一時的にしか使用されています。一方、createSpatialIndex()関数はデータソースに空間インデックスを作成し、qixシェープファイルのファイルを作成します。


2
永続的な(ファイルベースの)インデックスと一時的なランタイムインデックス(QgsSpatialIndex)の違いを強調するとよいでしょう。
Matthias Kuhn

1
みんなありがとう !QgsSpatialIndexに関する情報しか見つかりませんでした。createSpatialIndexはまさに私が探していたものです。
Lauref

@Lauref-すごい、それが役に立ててうれしい:)
ジョセフ

4がこのコメントで包括的なものを書き込もうとした後、私は降伏し、適切なものにはさらに必要になることを認めなければなりません。私が言いたかったのは、QgsSpatialIndexが永続的でないという情報は、追加の説明なしにすでに多くの情報を提供しているということです。
Matthias Kuhn

@MatthiasKuhn-おかげで、私はあなたが述べたように簡単な説明を含めるように投稿を編集しました;)
ジョセフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.