Динамическое вычисление блоков

Некоторые процедуры, вычисляющие растры, по умолчанию не записывают весь блок целиком, а создают динамические блоки. При использовании данных такого блока они не читаются с диска, а вычисляются на лету. Эти блоки отображаются в дереве значком DB. Во многих случаях это ускоряет работу программы и уменьшает требования к месту на диске.

Источники данных для динамических блоков

Каждый раз, когда происходит обращение к данным блока (например, пользователь просматривает таблицу значений растра или запускает процедуру, использующую этот растр как аргумент), программа вычисляет данные блока, обращаясь к его источнику. Источником может служить либо другой растр, использованный в качестве аргумента при вычислении данного растра, либо внешний файл, импортированный в проект. Если растр-источник сам является динамическим, то его данные в этот момент тоже вычисляются динамически. Таким образом, можно осуществить целую цепочку преобразований растра, не записывая полные данные растров в проект (например, импорт WSP-файла, энергетическую калибровку и выбор подмножества каналов).

Из вышесказанного следует, что источник данных должен быть доступен при каждом обращении к данным динамического блока. Не следует удалять вручную данные блока, который использовался для получения динамического растра. Также следует следить за тем, чтобы внешний файл, использующийся как источник данных, оставался доступен программе.

Вычисление блока полностью

Вычисление блока полностью имеет смысл в следующих случаях:

  • Требуется, чтобы доступность данных блока не зависела от наличия внешнего файла или наличия данных в файле-источнике.
  • Планируется выполнять много вычислений с динамическим растром целиком (например, несколько раз выполнять классификацию по всем каналам). Доступ к данным после полного вычисления станет быстрее.

Для этого выберите в контекстном меню блока пункт Вычислить полностью. В отличие от редактирования блока, вычисление его полностью не меняет его данные и поэтому не затрагивает просмотрщики и процедуры, использующие этот блок.

Чтобы превратить вычисленный блок обратно в динамический, достаточно перезапустить процедуру, из которой он был получен. При этом полные данные блока будут удалены с диска.

Пример

При импорте файла Hyperion создается следующее дерево:

_images/dynamic_blocks1.png

Все растры в нем являются динамическими. Поэтому, когда пользователь обращается к данным любого из них, программа читает данные из внешнего файла и преобразовывает их в соответствии с примененными процедурами. Поскольку в папку проекта эти данные не записаны, то папка проекта занимает мало места на диске, а создание проекта и доступ к данным работают одинаково быстро независимо от скорости записи на диск.

Допустим, что пользователь не использует два промежуточных растра, а использует только финальный растр. Для ускорения работы с ним лучше вычислить его полностью. Дерево будет при этом выглядеть примерно так:

_images/dynamic_blocks2.png

Если теперь перенести этот проект на другой компьютер, то данные главного растра останутся на месте, а процедуры, использующие его, можно успешно перезапустить. Это возможно благодаря тому, что данные главного растра вычислены полностью и записаны в папку проекта. А данные двух предыдущих растров станут недоступны, и при попытке обратиться к ним программа выдаст ошибку об отсутствии файла. Однако эти растры нигде не используются, поэтому это не представляет проблемы.

Если бы пользователь вычислил полностью самый первый растр, то проект перестал бы зависеть от внешнего файла. Остальные два растра могут остаться динамическими, но они теперь будут брать данные из первого растра, а не из внешнего файла.

Также пользователь может вычислить полностью все динамические блоки. После этого в проекте останутся только обычные блоки, данные каждого из которых доступны независимо от остальных. Однако это увеличит размер папки проекта и количество обращений к диску, что замедлит работы программы.

Пути к внешним файлам

Как сделать проект или его части независимыми от наличия внешних файлов, было описано выше. Однако можно оставить все блоки динамическими, если поддерживать доступность внешних файлов.

Начиная с версии 3.1.3, при импорте файлов сохраняется не абсолютный, а относительный путь к файлу. Например, если внешний файл и папка находятся в одной папке, то можно переместить их вместе в другую папку или на другой компьютер. При этом доступ к динамическим блокам, использующим этот файл, сохранится.

Если внешний файл был импортирован в программе до версии 3.1.3, либо если пользователь изменил имя файла вручную в параметрах процедуры, либо если файл и папка проекта находятся на разных дисках, то в проект записывается абсолютный путь к файлу. Если удалить или переместить этот файл, либо если переместить проект на компьютер, где нет такого же файла в той же папке, то внешний файл станет недоступен для программы.

Оглавление

Предыдущий раздел

Отбор каналов растра

Следующий раздел

Проекции