01/12/2023

Установка последней версии SagaGIS в QGIS

В профильном сообществе попросили написать гайд по установке актуальной версии SagaGIS в QGIS. Исполняю обещание. В принципе, в составе QGIS SagaGIS уже включён, но во-первых, это временное явление (вроде как в новых версиях решили исключить SagaGIS из ядра), а во-вторых, в составе установочного пакета QGIS поставляется какая-то уж очень древняя версия Saga — кажется 7-я, тогда как актуальная версия на момент написания заметки — 9.2. 
По пунктам, кратенько. Потом постараюсь добавить подробностей, когда будет больше свободного времени. 
  1. Скачиваем последнюю версию SagaGIS
  2. Распаковываем скачанный архив в какую-нибудь папку. Я предпочитаю OSGeo4W64\apps\, но можно любую другую.
  3. В QGIS отключаем плагин ядра SAGA GIS provider и скачиваем Processing Saga NextGen Provider. В Настройках последнего указываем путь к SagaGIS — куда мы его распаковали на предыдущем шаге. Закрываем QGIS. 
  4. В папке с SagaGIS лежит архив saga4qgis.zip, внутри которого есть инструкция, что надо делать с содержимым этого архива. Не буду повторять её, но суть такова: содержимое архива надо распаковать (удалив предварительно уже существующее) в папку     C:\Users\...\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\processing_saga_nextgen 
    Только не делайте это «в лоб», сперва найдите где конкретно лежит файл SagaNameDecorator.py и папка \description\ — удалите их и скопируйте на их место содержимое архива.
  5. В принципе всё готово, можно запускать QGIS и радоваться возможности работать с последней версией SagaGIS. Но есть еще одна маленькая хитрость, сильно облегчающая работу. Надо открыть файл SagaAlgorithm.py и заменить
elif isinstance(param, (QgsProcessingParameterString, QgsProcessingParameterField)):
                command += ' -{} "{}"'.format(param.name(), self.parameterAsString(parameters, param.name(), context))
на
elif isinstance(param, (QgsProcessingParameterString, QgsProcessingParameterField)):
                command += ' -{} "{:.10}"'.format(param.name(), self.parameterAsString(parameters, param.name(), context))
Для чего нужен последний пункт: дело в том, что инструменты SagaGIS, работающие с векторными исходниками, на входе принимают только shape файлы SHP. А те, в свою очередь, согласно стандарту не поддерживают имена полей длиннее 10 символов. Поэтому если вы попробуете подсунуть в SagaGIS на вход какой-нибудь Geopackage с именем поля 11 символов и больше, то в исходном варианте SagaAlgorithm.py вы получите ошибку. Мой же код автоматически обрезает имя поля по 10 символу и в результате формируется правильный shape-файл. 
К слову сказать, похожие улучшения можно вставлять и в другие Processing Provider плагины — они все сделаны более или менее похожим образом. Однако важно понимать, что если вы ухитрились создать в Geopackage несколько столбцов (полей) длинными именами, первые 10 символов которых побуквенно совпадают, то готовьтесь к удивительным глюкам.

16/10/2023

Фриланс и гидрогеология

По мотивам увлекательной беседы в одном профильном сообществе в Telegram родилась идея поделиться советами и мыслями с начинающими фрилансерами на ниве гидрогеологии. Если кто не знает, то сам я «фрилансю» уже более 10 лет, так что опыт какой-никакой, да имеется.
  1. Переходить на 100% фриланс имеет смысл только тогда, когда доход от «леваков и шабашек» начнет существенно превышать зарплату. Причем не в месяц, а в среднем за год, а лучше полтора-два.
  2. Очень сложно не психануть в периоды кризисов, когда по несколько месяцев вообще нет работы. Соответственно надо иметь подушку безопасности минимум на полгода привычной жизни.
  3. Из п. 2 следует несколько выводов:
      • Перед уходом в свободное плавание эту подушку следует сперва наполнить. Т.е. сначала подушка, потом увольнение из офиса.
      • Если у вас ипотека или кредиты, то вероятно оптимальным вариантов будет сперва досрочно закрыть их за счет дохода с «леваков», а уж потом увольняться. Однако это плохо сочетается с актуальным рынком ипотеки, которую внезапно стало невыгодно досрочно погашать (но это отдельный большой вопрос, в котором я не сильно разбираюсь, просто краем уха слышал).
      • Хочешь-не-хочешь, но придется вникать в тему инвестиций. С нынешним уровнем инфляции хранить деньги на депозите — равно терять по 2-3% накоплений в год.
  4. Крайне рекомендую перед уходом в свободное плавание обзавестись как минимум одним, а лучше 2-3 постоянными клиентами с регулярными заказами. Будьте готовы к тому, что для этого костяка либо придется надолго зафиксировать цены, либо изначально обговорить постепенное повышение тарифа на уровень инфляции.
  5. Поток заказов имеет довольно чёткую сезонность с двумя пиками (догадайтесь с трёх раз, с чем они связаны): конец весны и конец года. Соответствующим образом следует подходить к тайм-менеджменту: к началу мая и ноября крайне желательно подходить с минимумом текучки, иначе новые заказы не переварите.
  6. Не стесняйтесь отказываться от работы. Чувствуете, что не сдюжите — скажите, чтоб писали мне. Я постараюсь что-нибудь придумать. Не хапайте всё подряд, особенно если чувствуете, что заказчик «мутный». Да, таких в последнее время тоже полно. И ладно бы просто не платили. Бывает и гораздо хуже — можно за 100 рублей и «срок с пола поднять».
  7. Не беритесь за срочные заказы в области, в которой плохо разбираетесь, но если чувствуете  себе желание расти и развиваться, то при гуманных сроках не стоит огульно отказываться от всего нового. 
  8. Держите связь с коллегами и если уж отказываете заказчику, то обязательно посоветуйте пару человек, к которым можно обратиться.

23/08/2023

О новостройках

Недавно довелось принять участие в комплексных инженерно-геологических изысканиях под строительство весьма пафосного жилого комплекса. Ну очень пафосного, в очень недешевом месте. При этом наблюдалось довольно редкое явление: к изыскателям и проектировщикам прикрепили куратора из весьма уважаемого института. Так вот по совершенно непонятной мне причине, этот самый куратор с усердием достойным лучшего применения занимался кроиловом буквально на карандашах. И не только на них: «насыпухи много набурили — убирайте, а то мы на сваях разоримся», «вода слишком солёная в пробах — поправьте, а то вода слишком к арматуре агрессивна» (а там реально рассол из-за того, что рядом находится склад поваренной соли), ну и вишенка уже по моей части: «что-то у нас зона влияния от водопонижения слишком большая — сделайте коэффициент фильтрации в 2 раза меньше и пересчитайте прогноз, а то нам придется половину района на аварийность обследовать». Причем редкий случай, когда изыскатели таки соизволили сделать реальные откачки. Не очень представительные, но всё-же. Похожие запросы у него и к проектировщикам, но тут я не специалист — просто по тону их ответов во время совместной телеконференции понял, что требуют от них подобной залипухи.
В общем, если уж в уважаемых институтах такой бардак и развал, то всё, приехали. Меня иногда спрашивают, каким застройщикам можно доверять при покупке недвижимости в столице — по всей видимости, никаким. Беда в том, что с такими строителями нельзя успокаиваться и тем, кто живёт в старом жилом фонде — вот построят такие вот молодцы свою башню у тебя во дворе по программе реновации, а у тебя по дому трещины из-за неравномерных осадок.

28/06/2023

Дайджест ссылок

List of Links to Educational Videos in Groundwater Project Books. Подборка обучающих видео на дружественном ресурсе gw-project.org.
The Groundwater Project now has a list of these videos available on the site in both spreadsheet and PDF format. Instructors are welcome to download it and add or delete lines to customize the list for individual courses.
20 трюков и приемов QGIS для начинающих (2021). Хороший канал. Рекомендую.
Кьюгисовцы, планирую активно развивать канал и записывать по 2 ролика в неделю на интересные темы: рецепты создания карт, подборки инструментов, гайды, ответы на вопросы.
Переводы инструкций по PEST. Впечатляющий труд от уважаемого коллеги, моё почтение.
Коллеги! Многие захотели изучить возможности ПО PEST. Поэтому публикую свои переводы инструкций, а то лежат пылятся в папках Надеюсь, кому-нибудь они пригодятся и будут полезны. Успехов в освоении! P.S. Переводил с помощью Гугла и после корректировал под себя, поэтому могут быть нюансы) Всегда есть первоисточник.

17/02/2023

Гриневский С.О. - Гидрогеология

О, смотрите какую красоту в одном из профильных телеграм-сообществ выложили.
Ссылка на плейлист

15/02/2023

Гидрогеолухи

В последнее время появилась очень странная тенденция: почти все новые клиенты жалуются на проблемы с гидрогеологами, с которыми они сотрудничали раньше. Мол те исправно делают модель, пишут и сдают отчёт, получают деньги и... всё, пропадают с радаров. Причем всегда фокус с исчезновением случается после получения замечаний экспертизы. Доходит до смешного: эксперт просит добавить на прогнозную карту гидроизогипс глубины залегания. Приключение, как говорится, на пять минут, а коллега просто не выходит на связь или морозится.
Случай далеко не однократный и мне достоверно известно, что это не один и тот же человек (помнится у гидрологов была история, когда один довольно известный и толковый гидролог в какой-то момент перегорел и стал срывать заказы), а как минимум трое специалистов. И вроде бы дело не в оплате, т.к. никто из новых заказчиков не просил от меня работу вперёд и более того — настаивали на авансе. Я же, в свою очередь, не люблю авансы и предпочитаю оплату 80/20 - 80% после демонстрации готового отчета (есть способы как с одной стороны показать, что работа готова, но сделать невозможной её передачу в экспертизу) и 20% после успешного прохождения экспертизы.
Такое ощущение, что некоторые «нам_не_товарищи» решили под прикрытием происходящих ныне трагических событий забить на не самую приятную часть своих обязанностей. Хотя может действительно кого-то мобилизовали, или пришлось ему податься в бега, не знаю, но тенденция странная, вам не кажется?

04/01/2023

Генерация пользовательской СК QGIS

В рамках семинара для коллег по основам работы в QGIS «родилась» вот такая утилитка для генерации пользовательской СК в формате строки "proj.4" на основе уже существующей СК и высчитанных сдвижек по осям X и Y.
Задача традиционная: нам прислали какой-то там DXF в «левых» метровых координатах (далее пусть будет СК-X) с нулём координат у местной водокачки и надо худо-бедно положить его на спутниковую  (или любую другую в общеупотребимой СК) подложку в QGIS. Сразу хочу предупредить, что если вы не можете похвастаться отменным везением, то результат будет именно что «худо и бедно», но хоть как-то.
Простейший вариант решения проблемы: сместить карту прямо в автокаде так, что б общие точки на на карте и подложке более или менее совпадали. Вариант хороший и рабочий, но если вам начнут присылать другие данные в этой «левой» СК-X, то придется и их смещать вручную.
Я предлагаю подойти к решению этой проблемы с другого бока: взять одну из общеупотребимых  спроецированных метровых СК (далее СК-А) и на её основе сгенерировать новую пользовательскую СК (СК-Б - иными словами, это та же СК-X, но с известными параметрами), подобрав для неё смещения по X и Y так, чтоб DXF с присвоенной СК-Б совмещался с подложкой. Тут самое сложное: найти такую СК-А, чтоб угол совпадал с СК-X. По опыту, в 90% случаев подходит либо одна из 3-градусных зон Pulkovo 42, либо соответствующая региональная МСК (частенько эта таинственная СК-X и вовсе является какой-нибудь «МСК-59 зона 2»). Ну а дальше всё просто: «скалываем» координаты общей точки в СК-X (в автокаде, к примеру) и в СК-А (для этого можно использовать один из множества плагинов в QGIS, не забыв сделать СК-А системой координат проекта), копируем их в соответствующие ячейки моей таблицы, потом вставляем строку proj.4 от СК-А и строкой ниже получаем новую строку proj.4 уже для нашей новой кастомной СК-Б. Теперь эту строку можно добавить в качестве пользовательской проекции к QGIS и открывать в ней наш DXF, каталоги скважин и прочие данные.
Отлично понимаю, что с точки зрения тру топографов, географов и картографов все эти ужимки - жуткая ересь, прошу отнестись снисходительно.
P.S.: Добавил усреднение по нескольким общим точкам с проверкой на несовпадение угла поворота.

28/12/2022

Подборка гидрогеологических ссылок

Python code of "Analytical Groundwater Modeling". Репозиторий с кодом на Python из отличной книги «Аналитическое моделирование подземных вод: теория и приложения с использованием Python» Марка Баккера и Винсента Поста.
This repository contains the Python code of "Analytical Groundwater Modeling: Theory and Applications Using Python" by Mark Bakker and Vincent Post
The Groundwater Modeling Challenge. Для моделирования временных рядов уровней подземных вод могут применяться различные типы моделей, начиная от чисто статистических моделей (черный ящик) и заканчивая сосредоточенными концептуальными моделями (серый ящик) и моделями, основанными на процессах (белый ящик). Традиционно для решения проблем с грунтовыми водами преимущественно используются физически обоснованные распределенные модели. В последние годы повышенное внимание уделяется использованию моделей серого и черного ящиков. С помощью этого челенджа (термин «соревнование» тут не совсем подходит) предполагается получение различных моделей, применяемых для решения гидрогеологических задач и их сравнение. Предполагается, что любой желающий может скачать набор данных, сделать модель и загрузить её в репозиторий.
This repository contains all the information and materials for the Groundwater Time Series Modeling Challenge, as announced at the 2022 EGU General Assembly. We invite every interested groundwater modeler to model the five different hydraulic head time series found in the data folder, and send in their best possible simulated head time series.
The Water Cycle (PNG). Шикарный плакат в высоком разрешении, иллюстрирующий круговорот воды в природе.
EPANET Python Toolkit (EPyT). Библиотека Python для работы с известной программой для моделирования гидравлики в трубах.
The EPANET-Python Toolkit is an open-source software, originally developed by the KIOS Research and Innovation Center of Excellence, University of Cyprus which operates within the Python environment, for providing a programming interface for the latest version of EPANET, a hydraulic and quality modeling software created by the US EPA, with Python, a high-level technical computing software. The goal of the EPANET Python Toolkit is to serve as a common programming framework for research and development in the growing field of smart water networks.
Tupaccloud. Веб-интерфейс к MODFLOW6 от HatariLabs. Поковырялся немного, но так и не понял, как оно работает.
The least painful tool for groundwater modeling