Несколько полезных улучшений для возрастного бурава Haglof

Возрастной бурав — крайне нужный и дорогостоящий инструмент. Тем удивительнее, с какой небрежностью с ним обычно обращаются. Я даже не говорю о заточке, инструкцию по которой мне потребовалось запрашивать у компании — изготовителя, поскольку таковая на русском языке отсутствовала. Даже элементарные правила использования и хранения бурава часто не соблюдаются, отчего большинство инструментов находятся в жалком, малопригодном для работы состоянии. Здесь я расскажу о некоторых улучшениях, которые полезно произвести с буравом для обеспечения его сохранности и повышения производительности труда. Итак, погнали.

Во-первых, прежде чем выйти с буравом в лес, найдите яркий шнурок, проденьте ее через отверстие в ложечке и завяжите на конце булавку. Примерно вот так:
Ложечка возрастного бурава

Ложечка — самый повреждаемый элемент в конструкции бурава, даже хуже хрупкой режущей кромки. Когда подходишь к дереву, первое о чем приходиться думать — куда положить ложку, что-бы ненароком на нее не наступить. Лучше всего прислонить ее к дереву, но лишний раз кланяться обычно нет никакого желания, поэтому ложку мостят на ближайшую ветку, откуда она благополучно падает, теряется и обнаруживается только согнутой под чьим-то сапогом. Булавка позволяет ее легко цеплять на кору, а яркая ленточка поможет легко ее обнаружить.

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

Если есть такая потребность — на ручке бурава можно нанести не сантиметры, а сразу двух — и четырехступенчатую шкалу:
Четырехступенчатая шкала на ручке бурава

Шкалы лучше наносить аккуратно, используя масляную краску, поскольку даже перманентный маркер имеет обыкновение стираться, что уже после пяти-десяти кернов делает линейку почти незаметной:

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

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

Да, и еще. Если вам предстоит бурить старое, толстое и, вероятно, гнилое дерево, то после того как выбрано направление бурения и колонка ушла на глубину 2-3 сантиметра, воткните в отверстие тыльной части колонки небольшую веточку (можно даже иметь для этого специальный небольшой чопик). В девяносто девяти случаях из ста, он вам не потребуется. Но зато однажды вы не обнаружите себя облитым мощным потоком воды, льющимся из просверленного вами дупла, что случилось со мной однажды в момент бурения липы на Новодевичьем кладбище. Да и в недавней поездке по Чиру мы таких деревьев встретили немало:
Дупло, просверленное возрастным буравом

Поздравляю. Только что ваш скилл обращения с возрастным буравом возрос до уровня «готов преподавать магистрам лесного дела».

Красная Книга Ростовской области

Красная Книга Ростовской области

Если вы когда-нибудь занимались проектированием объектов большой протяженности, то знаете, что составлять ОВОС и ООС в этом случае — адский ад, поскольку одним из требований нормально выполненной работы является предоставление списка краснокнижных видов, попадающих в зону влияния объектов. Даже если Красная Книга в нормальном состоянии, даже если существует ее специальная электронная версия, все-равно карты в ней выглядят как говно. Составители из кожи вон лезут, что-бы вмандить в издание кучу нахуй никому не нужных узоров, блоков и текстур, но на одну из важнейших составляющих Красной Книги — карты, без которых издание теряет минимум половину своей ценности испокон веков кладется залупа размером с Тунгусский метеорит.

Меня эта ситуация заебала и я оцифровал оба тома Красной Книги Ростовской области, векторизовав положение всех охраняемых видов растений и животных, присвоив им атрибуты таксономии, охранного статуса и ссылки на приложенные в тексте изображения. Все это скомпоновал в две карты на основе leaflet.js, добавил несколько полезных плагинов, подгрузил подложки OpenStreetMap, спутник от Mapbox и залил на свой сервер для общего доступа.
Красная Книга Ростовской области

С технической точки зрения работа ничего интересного не представляет — простая визуализация геоданных с нескольких сотен карт. Но это еще удивительнее — что, блядь, для такой объемной, но несложной работы обязательно меня было ждать?
Красная Книга Ростовской области

Сам оригинал Красной Книги доступен на официальном сайте минприродыро. Из него можно получить более подробные сведения о биологии и экологии охраняемых видов. Все же, что касается их размещения доступно вам прямо сейчас:

Полную версию можно понаблюдать перейдя по ссылке на карту краснокнижных животных или растений. Переключаться между картами можно в нижней строке (там где копирайты) — я не стал лепить лишний интерфейс.

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

Код для вставки карты краснокнижных видов Ростовской области на любой сайт выглядит так,

Животные:

<iframe src="http://городшахты.рф/maps/1704_redbook61/animals/index.html" width="800" height="400" frameborder="0" allowfullscreen="allowfullscreen"></iframe>

Растения:

<iframe src="http://городшахты.рф/maps/1704_redbook61/plants/index.html" width="800" height="400" frameborder="0" allowfullscreen="allowfullscreen"></iframe>

Кроме того, список животных из Красной Книги Ростовской области можно почерпнуть из соответствующей статьи.

У меня все. Пойду чайку сбацаю.

Визуализация рельефа по данным SRTM и ASTER GDEM в QGis+SAGA

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

В качестве показательной территории взяты Соликамский и Красновишерский районы Пермского края. В качестве подложки карта OpenStreetMap Mapnik Standart:
Соликамск и Красновишерск

Инструментом для работы послужит QGis 2.18.4 с подключенными алгоритмами SAGA. Все операции, связанные с фильтрацией и созданием изолиний можно выполнять как внутри QGis, так и запуская гис SAGA в качестве автономного приложения.

Рельеф на средне- и крупномасштабных картах в настоящее время в большинстве случаев отображается с помощью данных SRTM или ASTER GDEM, что связано с их глобальным охватом, открытостью и простотой получения. Разрешение этих данных (SRTM 90 м/пикс, ASTER GDEM 30 м/пикс) позволяет, при должной обработке, показывать особенности рельефа примерно до 15 зума. Несмотря на то, что данные ASTER точнее, их использование затруднено необходимостью дополнительной фильтрации для отсеивания значений, не отражающих реальный рельеф (например, высоты леса и жилой застройки). Оптимальных алгоритмов для такой процедуры, которые дают стабильный результат для значительной территории, не разработано, в результате чего, образец визуализации менее точных данных SRTM оказывается обычно более качественным как с геодезической, так и с художественной точек зрения. Однако, севернее 60° с.ш. и южнее 54° ю.ш. данные SRTM отсутствуют, что вынуждает в конечном итоге использовать оба набора данных при визуализации рельефа на территориях, выходящих за границы покрытия SRTM.

Наш случай именно такой (снизу данные SRTM, сверху ASTER GDEM):
ASTER и SRTM

Данные SRTM доступны из различных источников, из которых наиболее удобны сайты cgiar, gis-lab и viewfinderpanoramas. Я предпочитаю использовать последний, поскольку многие сцены там объединены и загружены сразу в geotiff-растры (обычно SRTM представлен в hdt-формате).

ASTER получить немного сложнее: сайты геологической службы США и NASA позволяют скачивать различные данные ДЗЗ, что требует от пользователя определенной подготовки. Кроме того, эти сайты иногда бывают недоступны, либо работают чрезвычайно медленно. В этих случаях можно скачать всю базу через торрент. Дополнительные источники получения данных SRTM и ASTER доступны на странице получения данных.

Помимо растровых данных, для работы нам потребуется шейп-слой с границами районов, который можно скачать с сайта gis-lab или загрузить с помощью overpass.

После того как исходные получены, можно запускать QGis:
ASTER и SRTM в QGis

Для начала объединим сцены ASTER в единый растр с помощью меню «растр-прочее-объединение»:
1объединение растров

В диалоговом окне укажем директорию со сценами и название итогового файла.
2объединение растров

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

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

Выделяем в ТОСе наш ASTER, и через правую кнопку мыши вызываем диалоговое окно сохранения растра:
Сохранение растра в QGIS

Здесь обратите внимание на то, что-бы растр сохранялся как данные. Разрешение уменьшаем в три раза, т.е. вместо 18001 столбца вписываем 6000, а вместо 7201 строк вписываем 2400:
Сохранение растра в QGIS2

После сохранения растра он выглядит загрубленным, но все-равно более информативным, чем SRTM:
Сохранение растра в QGIS3

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

По той-же схеме объединим полученный растр с растром SRTM:
DEM-композит

Получившийся растр охватывает излишне большую территорию, что будет отнимать у нас лишнее время на его обработку. Что-бы избежать этого, отрежем все, что не входит в область наших интересов, указав при сохранении растра видимый охват (не забывайте сохранять растр как данные!):

image

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

Откроем панель инструментов в меню «анализ данных» и в списке геоалгоритмов SAGA-Grid-Filter выберем алгоритм «Простой фильтр»:

После нескольких минут обработки, алгоритм выдаст сглаженный растр:
отфильтрованный растр

Его мы и будем использовать для отмывки. С помощью меню «растр-морфометрический анализ-теневой рельеф»:

вызовем диалог создания карты теней:

На этом этапе следует знать одно неявное правило. В том случае, когда вы планируете использовать теневую отмывку в качестве подложки саму по себе, можно использовать значения по умолчанию. В том случае, когда ваша отмывка ложится на некую базовую карту (в нашем случае, такой картой служит OpenStreetMap), следует повернуть источник освещения на сто восемьдесят градусов. Дело в том, что стандартная отмывка представляет собой темный растр, который при наложении не только перестает читаться, но и зашумливает перекрываемые слои. Для того, что-бы это избежать, отмывку следует инвертировать, но в этом случае, горы выглядят как впадины, а каньоны напоминают холмы. Учитывая это, мы заранее изменяем источник освещения, что позволит нам при инвертировании сохранить визуальную форму отмывки. По умолчанию, источник освещения расположен в районе трехсот градусов, чего, конечно-же в природе почти никогда не бывает. Еще Салищев указывал на эту особенность — привычная отмывка рельефа обязана своему появлению лампам, которые обычно устанавливали слева от кульмана. Мы поменяем значение «300» на «120» и через несколько секунд алгоритм выдаст нам вот такой результат:

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

Через меню «растр-извлечение-обрезка»

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

В результате получим вот такую картину:

Двойным кликом по полученному растру в ТОСе вызовем меню свойств, где сменим градиент с «от белого к черному» на «от черного к белому». После применения изменений растр инвертируется. В месте сочленения данных ASTER GDEM и SRTM осталась небольшая белая полоса, однако, после того как будет установлена прозрачность, а сама отмывка наложена на подложку, заметить эту полосу будет практически невозможно:

Для того, что-бы не инвертировать растр при каждой новой загрузке, сохраним его как новый слой, но на этот раз в меню сохранения отметим его не как «данные», а как «изображение». На этом создание отмывки закончено. Установим прозрачность отмывки 95% и подложим под нее OpenStreetMap:

Так выглядит чистая карта OSM:

А так выглядит карта OSM с наложенной на нее картой теней в районе соприкосновения данных SRTM и ASTER:

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

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

С практической точки зрения эта проблема решается так. Создадим временный полигональный слой:
Новый временный слой2

Сделаем его редактируемым (иконка желтого карандаш), после чего установим режим добавления нового объекта
Редактирование в QGis

и обведем один из районов:

Сохраним фрагмент растра для этого участка (не фильтрованного растра, а исходного, мы же усложняем себе задачу!), обрежем его по обведенной области и отфильтруем с теми же параметрами, что и при создании отмывки. Затем с помощью геоалгоритма SAGA-Shapes-GRID-Горизонтали по ЦМР создадим изолинии через каждые 50 метров высоты.

Фильтрация не только убирает излишний шум, упрощая и выравнивая изолинии, но и позволяет «сцепить» наши разнородные данные. Вот пример извлечения изолиний из сырого растра:

Отчетливо просматривается линия сочетания данных ASTER и SRTM. При различных способах фильтрации растра ASTER GDEM эту линию можно делать более или менее заметной о чем я упоминал в начале данной статьи.

Изолинии из отфильтрованного растра на этот район выглядят так:

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

Аналогичные операции повторяем для второго района. Обратите внимание, что полигоны обрезки растра перекрывают друг друга:

Чем больше полигоны обрезки растров, тем дольше времени будет затрачено на обработку, но тем точнее будут соединяться изолинии:

После того, как изолинии извлечены, остается только обрезать их по контуру границ, сохранив оригинальные значения атрибутов изолиний. Для этого успешно применяется алгоритм «SAGA-Shapes-Lines-Пересечение линий и полигонов»:

Небольшая настройка стиля и изолинии готовы:

Обычная карта OpenStreetMap:

Тот же фрагмент карты, но с наложенной картой теней и горизонталями:

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

Данная проблема не имеет однозначного механистического решения. Наиболее оптимальные способы ее устранения зависят от требований к визуализации, выбранного региона и доступной вычислительной мощности. В качестве одного из способов решения я предлагаю использовать последовательное применение фильтра DTM (предельный уклон местности 10 градусов, радиус поиска 2 пикселя), заполнение пропусков в образованном в результате DTM-фильтрации растра (порог напряжения 10) и последующая фильтрация простым фильтром (круговой режим поиска, гладкий фильтр, радиус 5px). Этот метод не позволяет полностью избавиться от артефактов, но существенно снижает их число и сглаживает, что определенно положительно сказывается на визуализации рельефа:

Карта OpenStreetMap без отмывки и изолиний:

Карта OpenStreetMap с отмывкой и изолиниями:

Ладожское озеро

Открытие летнего сезона

Вы, полагаю, считаете, что уже достаточно деградировали за бездарно растраченное на интернет время. А вот хрен вам. И это легко проверить. Просто возьмите свою селфи-палку, что? у вас нет селфи-палки? Тогда о какой деградации может вообще идти речь? Я знаю о чем говорю — у меня селфи-палка есть.

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

Зимний сезон лучше закрывать рано, чем подо льдом, но хули дома сидеть? Тем более, что впереди сложная экспедиция, а у меня половина оборудования новая, ни разу в реальных условиях не испытывалась. Кстати, спасибо вам за дельные советы по поводу его приобретения. Правда половину того, что вы предложили в магазинах хер найдешь, а вторая половина стоит как полет на Марс, но пару идей я таки извлек и заимел себе внешний аккумулятор на 15000 мАч, экшн-камеру X-Try xtc200 и к ней телескопическую палку-копалку:
экшн-камера

Собственно, ее я и отправился испытывать. Взял спиннинг, выпил бутылочку пивка и с первой электричкой укатил на Ладожское озеро.
Первая электричка на Ладогу

На небе ни облачка, солнце греет совсем по-весеннему. От его тепла проснулись местные мужики и пошли в ларек за водкой.

Один из них, сжимая культяпками ампутированных пальцев сигарету, вежливо до меня доебался, посоветовав ловлю колюшки напротив местного музея. Но колюшку я на хую вертел, поэтому простившись с мужиком я направился прямиком к киоску «Пиво-воды», что стоит с незапамятных времен напротив Осиновецкого маяка:
Осиновецкий маяк

За этим киоском Карельский перешеек закачивается. Дальше берега Ладоги представляют собой болота с песчаными пляжами и зарослями тростника по мелководью. Только там можно рассчитывать на подход к воде, поскольку весь берег занесен обломками ледяного припая, которые отделяют берег от чистой воды на 20-40 метров.
припай на Ладоге

Похрен, что руки без рукавиц мерзнут, зато летний рыбацкий сезон можно считать открытым.
Заброс спининга

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

над водой
над водой

между волнами
Между волнами

во льду
во льду

под водой
под водой

в лесу
в лесу

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

К чему я вообще вам все это рассказываю? Я же только хотел вам видос отснятый показать. Тридцать секунд весны на Ладожском озере:

На обратном пути оказалось, что три ближайшие электрички отменены — хорошая возможность погулять вдоль Ладоги, посмотреть на открытые «ворота в пустыню»:
ворота в пустыню

спугнуть с сосны четырех глухарей и разглядывать как сношаются филиколистные ивы:
ива сношается

А тут еще мой старый, проверенный жизнью фотоаппарат излечился от ужасного темного пятна на снимках:

Отличная была зима. Да и весна начинается неплохо.

консоль WMS-сервера

Установка и настройка OGCServer-master

В прошлый раз мы подняли свой TMS-сервер на базе mapnik. Самое время развернуть на той-же основе свой WMS. Для этого, мы используем библиотеку OGCServer-master написанную Жаном Франсуа Дойоном. Библиотека написана на питоне специально под мапник со следующими ТТХ:

— Поддерживает WMS 1.1.1 и 1.3.0
— CGI/FastCGI, WSGI, mod_python
— Поддерживает все 3 запроса: getcapabilities, getmap и getfeatureinfo
— Выходные файлы в формате JPEG и PNG (только PNG256)
— Обрабатывают ошибки XML/INIMAGE/BLANK
— Поддерживает несколько именованных картографических стилей
— Поддерживает перепроецирование
— Поддерживаются метаданные слоя: title, abstract
— Существует возможность запросить все слои с помощью LAYERS=__all__

При использовании библиотеки следует помнить, что Getfeatureinfo поддерживает только простой текст, не поддерживаются 8-битные растры png (только 256 цветов) и для CGI/FastCGI должна быть доступна запись tempfile.gettempdir() (обычно пишется в «/tmp»). Кроме того, OGCServer-master требует установленных питоновских зависимостей мапника, питоновскую библиотеку для визуализации PIL и модули jonpy.

Подробные инструкции по настройке библиотеки можно почерпнуть из аутентичной страницы гит-хаба. Сама установка элементарна, требуется лишь закачать библиотеку на сервер, после чего в корневой директории библиотеки (она содержит файл setup.py) выполнить команду:

sudo python setup.py install

У библиотеки OGCServer-master есть ряд подводных камней о которых желательно знать до установки. Во-первых, перед установкой рекомендуется исправить имена и заголовки WMS, поскольку их дефолтные значения содержат в себе пробелы. QGis такие записи воспринимает нормально, но у других программ (например, FME) по этой причине могут возникать проблемы с загрузкой WMS-слоев. Для исправления, следует внести правки в шесть файлов из директории ogcserver. Исправленные строки в файлах (прописано «newname») будут выглядеть так:

Файл OGCServer-master\ogcserver\default.conf (2 правки):
Строка 95: wms_name = newname
Строка 98: wms_abstract = newname
Файл OGCServer-master\ogcserver\wms111.py (2 правки):
Строка 147: rootlayertitle.text = 'newname'
Строка 154: rootlayerabstract.text = 'newname'
Файл OGCServer-master\ogcserver\wms130.py (2 правки):
Строка 154: rootlayertitle.text = 'newname'
Строка 161: rootlayerabstract.text = 'newname'

Во-вторых, OGCServer-master более чувствителен к xml-файлу стиля чем сам мапник. Это значит, что при наличии ошибок в файле стиля, которые при старте рендеринга TMS проигнорируются, например line-opacity, сервис WMS не запустится, а выдаст ошибку с указанием всех строк, подлежащих исправлению. С одной стороны, это требует более тщательной работы над стилем, с другой стороны, позволяет легко отловить ошибку. По этой причине, я использую OGCServer-master даже в тех случаях, когда требуется исключительно создание TMS.

После установки, запустить WMS можно с помощью команды

ogcserver путь_к_стилю.xml

Если вы работаете через ssh, можете прописать перед командой запуска «nohup» для того, что-бы после разъединения сервер продолжал работать. После этого можно запрашивать слои в браузере командой:

http://localhost:8000/?LAYERS=__all__&STYLES=&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG%3A3857&BBOX=-20037508.34,-20037508.34,20037508.3384,20037508.3384&WIDTH=256&HEIGHT=256

Либо, через стандартный интерфейс QGis или любой другой программы.

Одним из самых больших недостатков библиотеки, является отсутствие кеша, что значительно замедляет работу. Впрочем, решение этой задачи стоит одним из первых в TODO-листе.