Spatial Quality Control of Seismic Data with Specially Designed Geophysical Data Loader
Рассмотрены исходные предпосылки и процесс создания программы-загрузчика геофизических данных исследования недр (сейсмика в формате SGY и навигация в формате P1/90, SPS) в файловую базу геоданных ArcGIS. Приведена краткая постановка задачи, рассказано об опыте, полученном разработчиками и заказчиками в процессе ее практической реализации, и достигнутом результате. Рассматриваются некоторые идеи по дальнейшему развитию созданного и внедренного решения. Изложение ведется в форме комментариев авторов данной разработки.
Елена Александровна Ржанникова. Наша компания занимается поиском и разведкой новых месторождений нефти и газа. Основной метод изучения недр – это геологическое моделирование, такой процесс, когда строение недр воспроизводится в цифровом виде с помощью специализированного программного обеспечения. Математические методы при этом используются достаточно сложные, и все они критически зависят от точности геодезической привязки входных данных. Ошибки в геодезии снижают достоверность с таким трудом получаемых геологических результатов, причем весьма существенно. Наша группа должна обеспечивать геологов данными максимально возможного качества. Для этого мы разрабатываем специальные методические приемы и реализуем их в программном обеспечении.
Одной из процедур контроля качества является проверка на совпадение пространственного положения сейсмических и навигационных данных. Требовалось найти продукт, который умел бы обрабатывать форматы сейсмических данных и визуализировать местоположение профилей. При изучении рынка программных продуктов для реализации задачи верификации был выявлен недостаток готовых программных решений и их ограниченный функционал, поэтому было принято решение о проведении самостоятельной разработки.
Технические подробности. Одним из основных методов изучения недр является сейсморазведка. С точки зрения пространственного местоположения получаемые данные могут быть двух видов: сейсмические данные в формате SGY и навигационные данные к ним. Данные SGY содержат положение сейсмических трасс в проекционной системе координат. Главная проблема в том, что очень часто параметры этой системы неизвестны. Формат SGY не содержит встроенного, машинно-читаемого определения параметров проекционной системы координат, в которой он сформирован. В нем есть текстовый заголовок, где их требуется заносить по определенным правилам, но часто этого не делается (рис. 1 и рис. 2). Навигационные данные, напротив, всегда содержат параметры координатных систем – и географической и проекционной.
Рис. 1. Заголовок файла SGY с недостаточным количеством заполненных атрибутов.
Рис. 2. Полностью заполненный заголовок файла SGY.
Илья Викторович Чибрикин. Работать с навигацией мы стали учиться давно, еще до того, как поняли, что нам нужно что-то специализированное. Сначала написали скрипт на VBA под MS Excel, который извлекал координаты, а загружали мы их средствами ArcGIS. Затем, для избавления от промежуточных операций, скрипт был трансформирован под язык программирования Python с использованием библиотеки Arcpy (рис. 3). Такой скрипт позволил оперативно решать задачу верификации, но требовал наличия навыков программирования и затрат времени на отладку практически при каждом использовании. Дальнейшая стратегия по упрощению работы заключалась в переходе от скриптов к комплексному решению в виде полноценного геоинформационного модуля.
Рис. 3. Пример скрипта на Python, с которого все начиналось.
Сейчас, когда загрузчик создан и работает, я понимаю, как важно добиться устойчивой работы приложения без необходимости постоянно править исходный код. Отчуждаемость программных решений – важнейшее качество для загрузчика, и это результат, который нам обеспечили наши подрядчики. Это многокомпонентная задача, тут важна функциональность и удобство интерфейса, устойчивость и скорость работы. Еще важно иметь хорошую документацию. Все это теперь есть, и я сам в основном работаю с загрузчиком. Но надо учитывать, что этого результата мы достигли за почти год отладки и 23 промежуточные версии программы. А сам скрипт я писал и отлаживал только два дня. Поэтому, принимая решение о заказе той или иной разработки, нужно обязательно сравнить два подхода: сделать что-то «на коленке», кое-как, но быстро, или заказывать что-то солидное и основательное, но долго его ждать. В случае больших объемов данных, как у нас, несомненные преимущества обеспечит второй вариант, в случае малых – первый.
Для разработки модуля под рабочим названием «Загрузчик» была выбрана компания «Антереал», составлена техническая документация и продемонстрирована работа имеющегося скрипта в качестве макета-прототипа.
Нашим упущением, как выяснилось позже, стали два момента. Во-первых, мы не указали в задании требования к быстродействию; во-вторых, мы не подготовили и не предоставили подрядчику полноценный набор отладочных данных. Сейчас мне эти мои ошибки кажется глупыми. Так что тем, кто будет читать эту статью, советую не повторять их. Потратив время и силы в самом начале, вы сэкономите себе и то и другое в дальнейшем.
Основная трудоемкость в создании загрузчика пришлась на отладку. Одна сейсмическая съемка загружалась сутки, а иногда и более. На повышение быстродействия до рабочих параметров было потрачено полгода. Не раз подрядчик заявлял, что это вообще невозможно. Главным аргументом в этом споре стал первоначальный скрипт на Python, работавший в разы быстрее. Подозреваю, что алгоритмическую часть загрузчика подрядчику пришлось переписывать несколько раз, а нам пришлось срочно собирать отладочный комплект данных достаточного объема. Но казавшееся сначала невозможным в конечном итоге было достигнуто, и среднее время загрузки сократилось с первых суток до первых десятков минут.
Карим Закиджанович Валиев. В отладке мы участвовали в полном масштабе. Нам пришлось поставить вопрос о консолидации всего процесса подготовки и передачи замечаний подрядчику. А то каждый пользователь писал напрямую, вызывая у подрядчика недоумение и вопросы, а что же собственно делать и в каком порядке? Эту практику пришлось прекратить и сводить все замечания в общий список, объединять их, а потом расставлять приоритеты.
Что же мы получили в итоге? На рис. 4 представлен основной интерфейс созданной и отлаженной программы. С его помощью можно выбрать каталоги, где находятся нужные данные. Сканирование каталогов и загрузка файлов – автоматическая. Далее нужно определить несколько шаблонов: системы координат исходных файлов, преобразования координат, разборки геолого-геофизических форматов. Создание шаблонов оказалось удачным решением. Большая часть данных, с которыми нам приходится иметь дело, сводится к одному из двух десятков вариантов (рис. 5, рис. 6, рис. 7, рис. 8). Далее для каждого файла задается тройка геофизических параметров: имя сейсмической съемки, имя стадии обработки геофизических данных, имя профиля. Это делается вручную, поскольку общепринятых систем кодирования такой геофизической привязки пока не существует. Однако, загрузчик имеет встроенный механизм распространения по строкам одинаковых значений, что существенно ускоряет работу, но требует известной осмотрительности и контроля процесса.
Рис. 4. Основной интерфейс созданного Загрузчика.
Рис. 5. Интерфейс для определения проекционной системы координат сейсмических данных.
Рис. 6. Интерфейс для определения шаблона разбора навигационных данных.
Рис. 7. Интерфейс для определения шаблона разбора сейсмических файлов SGY.
Рис. 8. Выбор системы координат сейсмических данных с помощью шаблона.
В конечном итоге, конвертированные данные записываются в файловую базу геоданных ArcGIS. Процесс загрузки контролируется через протоколирование, запись идет в файл и доступна через интерфейс.
Елена Александровна Ржанникова. В заключение хотелось бы отметить, что в существующем виде Загрузчик отражает наши представления о задаче, какими они были примерно год назад. Но опыт работы показал, что нам этого уже мало. В первую очередь нужна поддержка загрузки площадных съемок 3D, а также постобработка загруженных данных. При этом возникает проблема нехватки оперативной памяти, поскольку данные площадных съемок – это огромные по размеру файлы, сотни гигабайт, В связи с этим, нам предстоит работа по оптимизации загрузчика и его производительности. Таким образом, рабочий процесс ставит перед нами новые актуальные задачи, которые нам предстоит решить.