QGIS API'sında uzamsal bir dizin kaydediliyor mu?


9

Qgis API kullanarak bazı şekil dosyaları için bir uzamsal dizin oluşturmaya çalışıyorum. Nathan Woodrow'un blogunda ( https://nathanw.net/2013/01/04/using-a-qgis-spatial-index-to-speed-up-your-code/ ) açıklanan adımları uyguladım ve harika çalışıyor :

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

Benim sorunum, sonuçta ortaya çıkan herhangi bir dosya (.qix? .Sbn? .Sbx?)

Şekil dosyalarının gelecekteki kullanıcılarının bundan yararlanabilmesi için bu uzamsal dizini nasıl kaydedebilirim?

Yanıtlar:


11

Katmanınızdaki tüm özellikler için bir uzamsal dizin oluşturmak istiyorsanız, aşağıdakileri kullanmayı deneyebilirsiniz:

layer.dataProvider().createSpatialIndex()

Bu, .qixuzamsal dizin dosyasını oluşturur.


Düzenle:

Matthias Kuhn tarafından aşağıdaki yorumlarında belirtildiği gibi, QgsSpatialIndex sınıfı yalnızca bağlantı kurduğunuz blogda görüldüğü gibi geçici olarak kullanılır; oysa createSpatialIndex () işlevi, bir de veri kaynağı ve sonuçları üzerinde mekansal dizin oluşturur qixŞekil dosyaları için dosyanın.


2
Kalıcı (dosya tabanlı) ve geçici, çalışma zamanı dizini (QgsSpatialIndex) arasındaki farkı vurgulamak iyi olur.
Matthias Kuhn

1
Teşekkürler beyler ! Yalnızca QgsSpatialIndex hakkında bilgi bulabilirim. createSpatialIndex tam da aradığım şeydi.
Lauref

@Lauref - Harika, yardımcı oldu sevindim :)
Joseph

4 Bu yorumda kapsamlı bir şey yazmaya çalıştıktan sonra teslim olmak ve yeterli bir şey için daha fazla gerektireceğini itiraf etmeliyim. Ne demek istedim sadece QgsSpatialIndex kalıcı değil bilgi ekstra bir açıklama olmadan zaten çok fazla bilgi verir olduğunu.
Matthias Kuhn

@MatthiasKuhn - Teşekkürler, bahsettiğiniz gibi kısa bir açıklama eklemek için gönderiyi düzenledim;)
Joseph
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.