yellow-sky писал(а):1) При открытии шейпфайла, ни qgis, ни ogr не проводит его сканирование и сканирование его индекса. Так что всё, что я предполагал о лишнем переборе шейпфайла ogr'ом - мои безосновательные домыслы.[]
2) Тип геометрии и максимальный охват читаются из заголовка самого шейпфайла. Эта операция очень быстрая и не может быть причиной, такой задержки при добавлении слоя на карту.
Все как я и говорил парой постов выше.
yellow-sky писал(а):3) Пространственный индекс. В архиве вообще нет индекса qix. Есть только езривский sbn. Потому, если у вас старый gdal (не транк), то работа с шейпфайлом ведется вообще без индекса. Это не есть проблема ogr, так как gdal - всего лишь библиотека унифицированного доступа к геоданным.
Когда я говорил про OGR и индекс, имел в виду то, что именно OGR должен использовать индекс (разумеется, если он есть) при чтении объектов из файла. А то как-то странно выглядит ситуация, когда библиотека, занимающаяся непосредственно чтением данных, игнорирует индекс и для доступа к объекту в средине файла выполняет полный перебор.
yellow-sky писал(а):Тут появляется вопрос к QGIS. В аналогичный ситуации, АркГИС пытается молча создать файл с индексом. Может QGIS должен вести себя схожем образом - при добавлении шейпфайла, если тот не имеет индекса, предлагать пользователю создать его?
Такой тикет уже давно есть.
yellow-sky писал(а):Не все пользователи знают, что есть специальная кнопка, для создания индекса. Еще меньше догадывается, что добавленный слой может не иметь его в данный момент.
ИМХО, проблема пользователя
yellow-sky писал(а):4) Предварительная причина долгого открытия - отрисовка. Пока у меня выходит, что львиную долю на открытии съедает именно она. Маленький тест - попробуйте перед добавлением отключить рендеринг и добавить слой. У меня добавляется мгновенно.
Я тебе даже больше скажу (благо, ковырял эту часть кода, когда переносил threading на 1.7.х). Это основная и единственная причина.
yellow-sky писал(а):Индекс тоже не причем, так как отрисовывается весь охват слоя.
А индекс тут и не поможет. От него еще есть какая-то польза если при открытии отображается не весь слой, а лишь его небольшая часть. Если же слой рисуется в полном охвате то наличие/отсутствие индекса ничего не меняет.
yellow-sky писал(а):Боле глубоких тестов пока не проводил. Предстоит выяснить, какая из операций занимает больше всего времени - получение данных или их непосредственный вывод на холст. Буду продолжать копать.
А они (тесты) и не нужны. Больше всего времени занимает отрисовка.
FYI, в QGIS 2.0 планируется многопоточный доступ к данным и многопоточная же отрисовка.