Lưu chỉ mục không gian trong API QGIS?


9

Tôi đang cố gắng tạo một chỉ mục không gian cho một số shapefile bằng cách sử dụng API Qgis. Tôi đã làm theo các bước được mô tả trong blog của Nathan Woodrow ( https://nathanw.net/2013/01/04/USE-a-qgis-spatial-index-to-speed-up-your-code/ ) và nó hoạt động rất tốt :

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

Vấn đề của tôi là tôi không có bất kỳ tệp kết quả nào (.qix? .Sbn? .Sbx?)

Làm cách nào tôi có thể lưu chỉ mục không gian này để người dùng tương lai của các shapefile có thể hưởng lợi từ nó?

Câu trả lời:


11

Nếu bạn muốn tạo một chỉ mục không gian cho tất cả các tính năng trong lớp của mình, bạn có thể thử sử dụng như sau:

layer.dataProvider().createSpatialIndex()

Điều này sẽ tạo ra .qixtệp chỉ mục không gian.


Biên tập:

Như Matthias Kuhn đã đề cập trong các bình luận của mình dưới đây, lớp QssSpatial Index chỉ được sử dụng tạm thời như đã thấy trong blog bạn liên kết đến; trong khi đó hàm createdSpatialIndex () tạo ra một chỉ mục không gian trên nguồn dữ liệu và dẫn đến một qixtệp cho các shapefiles.


2
Tôi nghĩ sẽ tốt khi làm nổi bật sự khác biệt giữa chỉ số thời gian chạy (dựa trên tệp) và tạm thời (tạm thời) (QSSSpatial Index).
Matthias Kuhn

1
Cảm ơn các bạn ! Tôi chỉ có thể tìm thấy thông tin về QssSpatial Index. createdSpatial Index chính xác là những gì tôi đang tìm kiếm.
Lauref

@Lauref - Tuyệt vời, rất vui vì nó đã giúp :)
Joseph

Sau 4 lần cố gắng viết một cái gì đó toàn diện trong bình luận này, tôi phải đầu hàng và thừa nhận rằng nó sẽ đòi hỏi nhiều hơn cho một cái gì đó đầy đủ. Điều tôi muốn nói chỉ là thông tin mà QssSpatial Index không kiên trì cung cấp rất nhiều thông tin mà không có bất kỳ lời giải thích nào thêm.
Matthias Kuhn

@MatthiasKuhn - Cảm ơn, tôi đã chỉnh sửa bài đăng để bao gồm một lời giải thích ngắn gọn như bạn đã đề cập;)
Joseph
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.