fleur.js

Оценка кормовых угодий на JavaScript

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

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

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

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

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

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

Принцип влияния экологических факторов на организм выражается пословицей «Все хорошо в меру». Задача — сравнить между собой «меры» различных видов и применить к ним школьный принцип «меньше большего, больше меньшего». Если мы нашли одуванчик, значит условия жизни для одуванчика подходят. Если рядом с одуванчиком сныть, значит условия жизни подходят для одуванчика и сныти одновременно. Если мы собрали тридцать разных видов, значит условия подходят одновременно для каждого из них. Чем больше видов, тем уже диапазон факторов произрастания:
Сужение диапазона факторов произрастания

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

В одну из ночей опустите луч фонарика вертикально вниз. На землю ляжет тень от травы — проекция растений на плоскость. Если забыть, что луч бьет из одной точки или взять громадный прожектор, то площадь тени будет пропорциональна густоте растений. В геоботанике этот показатель называется проективным покрытием. Глазомерно он вычисляется как доля покрытой растениями территории. Сумма проективных покрытий всех видов больше общего покрытия травостоя, поскольку разные виды перекрывают друг друга. Псевдоматематики называют проективное покрытие вероятностью обнаружения вида в точке со случайными координатами или говорят о других диких концепциях, но на практике без инструментов никто не способен оценить густоту растений точнее 5-10 процентов (хоть все говорят, что могут), поэтому описание дополняют словами «единично», «незначительно» и прочей гуманитарной фигней.

Идя по градиенту влажности от сырого к сухому месту, вы встретите новые виды. Пока еще чахлые и редкие. Они едва выживают при такой влажности. Скоро этих растений станет больше. В идеальных условиях проективное покрытие возрастет до ста процентов — вспомните непроходимые заросли крапивы urtica dioica. На подходе к сухому месту проективное покрытие уменьшается, в сухих условиях остаются лишь единичные растения. В очень сухих ваши они уступают другим видам. За время похода вы пройдете несколько куполообразных изменений проективного покрытия, которые вспомните составляя шкалу:
Градиент изменения условий среды

Когда первая шкала готова, делим весь массив описаний на группы по влажности территорий и для каждой группы тем же методом строим шкалу «бедность-богатство-засоленность». Затем итеративно повторяем процесс для переменности увлаженения, аллювиальности почв, пастбищной дегрессии (вытоптанности) и чего душа пожелает.

Для работы необходимы десятки лет, миллиарды рублей и армия ботаников. Сегодня такие ресурсы получить невозможно, но по счастью кровавый сталинизм оставил в наследство не только сопливый дудевский фильм, но и результат работы института луговой и болотной культуры (сейчас НИИ кормов имени Вильямса), где под руковоством Л.Г. Раменского подготовлена прекрасная монография «Экологическая оценка кормовых угодий по растительному покрову». Книга содержит короткую пояснительную записку, методы анализа и таблицу на сотни страниц, где указано размещение видов растений на экологических шкалах в зависимости от проективного покрытия.
Книга Экологическая оценка кормовых угодий по растительному покрову

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

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

Казалось бы, любой первокурсник-технарь напишет алгоритм за пару часов, любой школьник, отличающий инкремент от компиляции закодит его за вечер. Все просто как две копейки. Но все программные реализации (включая мою работу десятилетней давности) напоминали сплетенные из вареных макарон костыли для безруких. Потому что легче «Анну Каренину» на машинный язык перевести, чем автоматизировать работу с экологическими шкалами Раменского.

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

Геоботаническое описание обычно содержит в себе метаданные (где, кем, когда и др.), описание древостоя (при наличии оного и отсутствии отдельных таксационных работ), подроста, подлеска и таблицы проективных покрытий травяно-кустарничкового и мохово-лишайникового ярусов. Камеральная обработка сводится к переносу данных в эксель, часто в том же виде, в каком они представлены на бланке. Форма бланков у всех разная, поэтому данные разных авторов не сравнимы без мучительной корректорской работы. Я опускаю разность методик, разность понимания видов, здесь разговор только о технической стороне вопроса.
Образец геоботанического описания

Без общепринятого формата, любой код автоматизации придется переписывать под каждого автора. Но это не спасет без решения проблемы субъективных оценок. Нельзя вместо оценки проективного покрытия скормить алгоритму понятия «единично», «изредка», «две куртины» и прочий бред (все из реальных описаний). Предположим, мы исключим такие данные из выборки. Если речь об экологическом шкалировании, то это допустимо. Но следом возникает проблема таксономии.

Линней, работая с номенклатурой не думал о том, что латынь уйдет в прошлое, а коробка размером с небольшой саквояж уместит в себе всю ботаническую литературу. Сегодня виды сохраняют латинское название (и это правильно), но саму латынь никто не помнит, герундий от герундива не отличает, рода путают между собой. В результате окончания видов обычно записаны с ошибками. Другое проблемное место — нечитаемые буквы. Попробуйте спустя месяц по памяти верно воспроизвести krascheninnikovii, krascheninnikoviana, или krascheninnikoviorum. Тут ботаники с лицом честного гаишника воскликнут, что они, дескать все выверяют по справочнику Черепанова. Клевер луговой у них трифолиум пратенсе, а клевер ползучий — амория репенс. Не верьте. При мне за несколько лет луговик извилистый из дешампсии стал лерхенфельдией, а из последней превратился в авенеллу. Все обсуждают подобные мелочные вопросы и никто не ничего хочет менять всерьез. А без изменений весь накопленный материал стоит дешевле макулатуры.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
var descript = [
{
time:20160602,
note:'GR-0602-1',
tags:'Сосняк, Мяглово-Карьер',
lat:59.82739,
lng:30.69896,
datum:'4326',
author:'S.N.Golubev',
feedback:'schwejk-rpnt@rambler.ru',
license:'CC-BY-NC-SA-3.0',
source:'fieldobserve',
aream:2411,
dendro:{   /*Характеристики древостоя*/
	allvolumemcb:329,   /*Запас, куб. м*/
	allfullmsq:34.4,    /*Абсолютная полнота, кв. м*/
	pins__sylrs:{       /*Данные по сосне - pinus sylvestris*/
		volumemcb:329,   /*Запас, куб. м*/
		fullmsq:34.4,    /*Абсолютная полнота, кв. м*/
		diasm:23,        /*Средний диаметр, cм*/
		heightm:24.7,    /*Высота, м*/
		age:70,          /*Возраст, лет*/
	},
},
grass:{   /*Данные по живому напочвенному покрову*/
	allcover:50,   /*Общее проективное покрытие яруса*/
	cover:{        /*Повидовое проективное покрытие*/
		vacnm_myrls/*Черника - Vaccinium_myrtillus_L*/:20,
		vacnm_vitd/*Брусника - Vaccinium_vitisidaea_L*/:30,
		conlr_majls/*Ландыш - Convallaria_majalis_L*/:5,
		trils_eurp_/*Седмичник - Trientalis_europaea_L*/:0.1,
		desps_flexs/*Луговик - Deschampsia_flexuosa_Trin*/:10,
		melrm_prans/*Марьянник - Melampyrum_pratense_L*/:0.1,
		luzl__pils_/*Ожика - Luzula_pilosa_L_Willd*/:0.1,
		calln_vulrs/*Вереск - Calluna_vulgaris_L_Hull*/:0.1,
		charn_anglm/*Кипрей - Chamerion_angustifolium_L_Holub*/:0.1,
		fragr_vesc_/*Земляника - Fragaria_vesca_L*/:0.1,
		soldg_virgr/*Золотарник - Solidago_virgaurea_L*/:0.1,
		maimm_biflm/*Майник - Maianthemum_bifolium_L_FW_Schmidt*/:0.1,
		desps_cests/*Щучка - Deschampsia_cespitosa_L_Beauv*/:0.1,
		},
	},
undergrass:{/*Данные по мохово-лишайниковому ярусу*/
	allcover:40/*Общее проективное покрытие яруса*/,
	cover:{
		polhm_specs:0.1/*Политрихум*/,
		plezm_schbr:40/*Плеуроциум*/,
		},
	},
},
]

Структура данных повторяет бланк описания (метаданные-древостой-живой напочвенный покров-мохово-лишайниковый ярус). Видам с незначительным обилием присвоено проективное покрытие 0.1%. Видовые названия записаны в виде одиннадцати символов: пять на род, пять на вид и символ нижнего подчеркивания между ними. Род и вид преобразуются в код вида по такому принципу:
— Первые три буквы таксона берутся без изменений (Convallaria — con);
— Последние две соответствуют двум последним согласным таксона (Convallaria — lr);
— Если букв в таксоне меньше пяти, пропуски заполняются нижним подчеркиванием (Poa pratense — poa___prans);
— Если после первых трех букв одна согласная или согласных нет — пустые места заполняются нижним подчеркиванием (Luzula_pilosa — luzl__pils_).

Это не самый удачный принцип, поскольку требует исключений. Например, одуванчики Taraxacum laticordatum и Taraxacum latisectum кодируются одинаково: tarcm_lattm. К более простому решению, которое обеспечивает автоматическую кодировку списка таксонов я пока не пришел. К счастью исключения редки даже для региональной флоры, для локальной совсем незначительны и легко отлавливаются простой проверкой по сортированному массиву.

После я перевел таблицу из книги Л. Г. Раменского в js-массив следующего вида:

1
2
3
4
5
6
7
8
9
10
11
12
var ramen = [
["КОД", "ВИД", "ШКАЛА", "ЗОНА", "ПОЧВА", "ПОКРЫТИЕ", "MIN", "MAX"],
["acalm_punns", "Acanthophyllum pungens (Bunge) Boiss.", "water", false, false, 0.3, 10, 15],
["acalm_punns", "Acanthophyllum pungens (Bunge) Boiss.", "water", false, false, 0.1, 8, 1000],
["acalm_punns", "Acanthophyllum pungens (Bunge) Boiss.", "rich", false, false, 0.3, 12, 15],
["acapr_schhr", "Acarospora schleicheri (Ach.). Mass.", "water", false, false, 2.5, 15, 19],
["acapr_schhr", "Acarospora schleicheri (Ach.). Mass.", "water", false, false, 0.3, 11, 22],
["acapr_schhr", "Acarospora schleicheri (Ach.). Mass.", "water", false, false, 0.1, 10, 35],
["acer__plads", "Acer platanoides L.", "water", false, false, 0.1, 65, 71],
["acer__plads", "Acer platanoides L.", "water", false, false, 0, 0, 91],
...
]

Массив состоит из 11 673 элементов, включая заголовок. Каждый элемент содержит информацию о видовом коде, таксоне, экологической шкале, минимальном и максимальном балле шкалы. Информация о типе почв и природно-климатической зоне отсутствует, но на случай развития проекта для этих данных оставлено место. В тех случаях, когда минимальный балл в книге не указан, в таблице стоит 0. Если не указан максимальный балл, в таблице стоит 1000.

Скрипт расчета Fleur.js содержит всего полторы сотни строк, но его следует сократить вдвое, поскольку вторая функция на 99% дублирует первую. На момент написания я вконец обленился и просто скопипастил свою же функцию, дополнив ее несколькими строками. Функция «ramenall(e)» подхватывает первое описание в серии, переводит абсолютные значения проективного покрытия из геоботанического описания в группы проективных покрытий шкал Л. Г. Раменского (единично-0.1, 0.1-0.3, 0.3-2.5, 2.5-8, 8 и более процентов). После сравнивает видовые списки из описания и таблицы экологических шкал на основе общего ключа кода видов. Найдя совпадение в коде, функция заполняет массив номером и таксонами описания с присвоением минимального и максимального балла для каждого вида. Если для вида информация отсутствует, скрипт выдает «-Infinity, Infinity;». После программа переходит к следующему описанию из серии. Когда описания заканчиваются, программа выводит собранный массив на html-страницу.

Функция «ramenbase(e)» выполняет те же самые операции, только для каждого описания в серии формирует массив с минимальными и максимальными значениями баллов. Из массива минимальных баллов отбирает наибольший, из массива максимальных — наименьший. Итогом выпадает таблица с номером описания, минимальным и максимальным значением на экологической шкале.
Больше меньшего, меньше большего

Обе функции потребляют на вход одинаковые аргументы: «rich» — богатство и засоленность почвы, «water» — влажность почвы, «waterwave» — переменность увлажнения, «alluvium» — аллювиальность почвы и «degrade» — пастбищная дегрессия.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// Полный расчет (значения для всех видов)
function ramenall(e){
 
  for(var a=0; a<descript.length; a++)
  {
	  var gbo = descript[a]; // Текущее описание в обработке
	  var spec=[];           // Вид
	  var pokr=[];           // Проективное покрытие в процентах
	  var pokrball=[];       // Балл покрытия по Раменскому
	  var spectable=[];      // Обертка для spec, pokr, pokrball
 
// Перевод % покрытия в % покрытия по Раменскому	  
	  for(var key in gbo.grass.cover)
	  {
		  spec.push(key);
		  pokr.push(gbo.grass.cover[key]);
		  if(gbo.grass.cover[key]>=8.0 &&
				gbo.grass.cover[key]<100){pokrball.push(8.0);}
		  if(gbo.grass.cover[key]>=2.5 &&
				gbo.grass.cover[key]<8.0){pokrball.push(2.5);}
		  if(gbo.grass.cover[key]>=0.3 &&
				gbo.grass.cover[key]<2.5){pokrball.push(0.3);}
		  if(gbo.grass.cover[key]>=0.1 &&
				gbo.grass.cover[key]<0.3){pokrball.push(0.1);}
		  if(gbo.grass.cover[key]>=0.0 &&
				gbo.grass.cover[key]<0.1){pokrball.push(0.0);}
		}
 
// Заполнение таблицы для сравнения со шкалами    
	  spectable.push(spec);
	  spectable.push(pokr);
	  spectable.push(pokrball);
 
// Сравнение со шкалами   
	  for(var i=0; i<spec.length; i++)
	  {
		  for(var k=0; k<ramen.length; k++)
		  {
			  if(spectable[0][i]==ramen[k][0] && //Код вида
				ramen[k][2]==e && // Шкала (указана в HTML)
				ramen[k][3]==false && // Природная зона (игнорируется)
				ramen[k][4]==false && // Тип почвы (игнорируется)
				ramen[k][5]==spectable[2][i] // Проективное покрытие
				)
				{
// Публикация отчета в HTML
				var str = document.getElementById('tableResult');
				var add = str.insertRow(-1);
				var addTr = document.createElement("tr");
				var addTd = document.createElement("td");
					addTd.innerHTML=descript[a].note+", ";
					addTr.appendChild(addTd); // Номер описания
				var addTd = document.createElement("td");
					addTd.innerHTML=ramen[k][1]+", ";
					addTr.appendChild(addTd); // Название вида
				var addTd = document.createElement("td");
					addTd.innerHTML=spectable[1][i]+"%,      ";
					addTr.appendChild(addTd); // Покрытие
				var addTd = document.createElement("td");
					addTd.innerHTML=ramen[k][6]+",      ";
					addTr.appendChild(addTd); // Максимум
				var addTd = document.createElement("td");
					addTd.innerHTML=ramen[k][7];
					addTr.appendChild(addTd); // Максимум
				str.appendChild(addTr);
				};
		};
	};
};
}
 
// Краткий расчет (классический, результаты для пробной площади в целом)
function ramenbase(e){
	for(var a=0; a<descript.length; a++)
	{
		var gbo = descript[a];
		var spec=[];
		var pokr=[];
		var pokrball=[];
		var spectable=[];
 
		for(var key in gbo.grass.cover)
		{
			spec.push(key);
			pokr.push(gbo.grass.cover[key]);
			if(gbo.grass.cover[key]>=8.0 &&
				gbo.grass.cover[key]<100){pokrball.push(8.0);}
			if(gbo.grass.cover[key]>=2.5 &&
				gbo.grass.cover[key]<8.0){pokrball.push(2.5);}
			if(gbo.grass.cover[key]>=0.3 &&
				gbo.grass.cover[key]<2.5){pokrball.push(0.3);}
			if(gbo.grass.cover[key]>=0.1 &&
				gbo.grass.cover[key]<0.3){pokrball.push(0.1);}
			if(gbo.grass.cover[key]>=0.0 &&
				gbo.grass.cover[key]<0.1){pokrball.push(0.0);}
		}
 
		spectable.push(spec);
		spectable.push(pokr);
		spectable.push(pokrball);
 
		var ecoscalemin=[];// Шкала минимумов
		var ecoscalemax=[];// Шкала максимумов
 
		for(var i=0; i<spec.length; i++)
		{
			for(var k=0; k<ramen.length; k++)
			{
				if(spectable[0][i]==ramen[k][0] &&
				ramen[k][2]==e &&
				ramen[k][3]==false &&
				ramen[k][4]==false &&
				ramen[k][5]==spectable[2][i]
				)
				{
					ecoscalemin.push(ramen[k][6]);
					ecoscalemax.push(ramen[k][7]);
				};
			};
		};
 
		var str = document.getElementById('tableResultKratk');
		var add = str.insertRow(-1);
		var addTr = document.createElement("tr");
		var addTd = document.createElement("td");
			addTd.innerHTML=descript[a].note+",  ";
			addTr.appendChild(addTd); // Номер описания
		var addTd = document.createElement("td");
 
			// Максимальное значение шкалы минимумов
			addTd.innerHTML=Math.max.apply(Math, ecoscalemin)+",  ";
			addTr.appendChild(addTd); // Минимум
		var addTd = document.createElement("td");
 
			// Минимальное значение шкалы максимумов
			addTd.innerHTML=Math.min.apply(Math, ecoscalemax)+";  ";
			addTr.appendChild(addTd); // Максимум
		str.appendChild(addTr);
	};
}

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

Финализировать эту эпопею нужно тремя вопросами: почему JavaScript?, что дальше? и как использовать полученные результаты анализа?. JavaScript — потому что эти расчеты иногда требуется выполнять на чужих компьютерах без установленного R, Wine или другого софта. Что дальше — не знаю. Есть пару идей, но я три года ничего не менял, могу еще три года ничего не менять. А как использовать результаты я не расскажу, поскольку строки этой статьи все-равно никто не увидит. Программисты бросят читать на втором слове, а ботаники на четвертом.


По адресу городшахты.рф/source/fleur/ лежит готовая к использованию программа. Можете указать ссылку на свой набор геоботанических описаний в указанном выше формате и рассчитать богатство, увлажнение, переменность водного режима, аллювиальность и пастбищную дегрессию почв.
Полноценное теоретическое обоснование, альтернативные методы и материалы для контроля доступны в книге: Л. Г. Раменский, И. А. Цаценкин, О. Н. Чижиков, Н. А. Антипин «Экологическая оценка кормовых угодий по растительному покрову» Всесоз. науч. -исслед. ин-т кормов им. В. Р. Вильямса. М. : Сельхозгиз , 1956 470, [2] с.: ил., 1 л. граф.

Непростой GeoLive 11

Последний раз, я писал про этот дистрибутив аж в сентябре пятнадцатого года. Тогда как раз только-только вышла девятая версия, которую я в тот же день установил. А потом началась такая смесь из суеты и работы, что было мне совершенно не до обновления. Лишь недавно терпение иссякло, я полез на сайт OSGeo, где заимел себе дистрибутив одиннадцатой версии, содержимое которого мы будем сегодня рассматривать.

OSGeoLive — это дистрибутив лубунты с предустановленными картографическими приложениями. На этот раз основой стала Ubuntu 16.04.3 LTS. LXDE по прежнему неудобная, глючная и раздражающая. Спасает только то, что при наличии Тильды и небольшой настройке, видеть ее практически нет нужды.

После первого обновления системы, при загрузке возникает системная ошибка, которая никак на дальнейшую работу не влияет. Этот баг кочует из версии в версию уже энный год и скоро станет визитной карточкой OSGeoLive:
Ошибка при загрузке Lubuntu

По традиции, перед началом список дефолтных логинов и паролей от некоторых приложений в нотации Application,UserName,Password:

General,user,user
52nWPS,wps,wps
52nWSS,alice,alice or bob,bob
Cartaro,admin,geoserver
Geoserver,admin,geoserver
Geonetwork,admin,admin
MySql,administrative,user
Mapbender3,root,root
Postgres,user,user
rasdaman,rasadmin,rasadmin
Sahana,admin,admin
tomcat6-manager,user,user
EOxServer-admin,admin,admin
GeoNode,admin,admin

У одиннадцатой версии дистрибутива два основных отличия. Во-первых, система работает гораздо плавнее и быстрее. Даже мой компьютер, который собран из найденных на помойке счетов, открывает все с нетерпеливой нежностью. Не нужно по пол-часа ждать открытия QGis или Gimp, а привычное «Дамп памяти переполнен» осталось где-то в далеком прошлом.

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

Как обычно, в наличии справка, составленная в экспериментальных целях, лично Рихардом фон Эбингом.

Весь интересный софт собран в привычные категории Geospatial: веб-клиенты, базы данных, настольные гис, навигация и карты, пространственные инструменты и веб-сервисы. Системы кризисного управления не включены — поклонники сахана и ушахиди могут далее не читать.

Веб-клиенты:
Cartaro — отсутствует.

Geomajas — Присутствует, но после минутного ожидания запуска, открывает браузере страницу http://localhost:3420/showcase/, которая первые несколько минут недоступна, но после выдает такую картинку:
Geomajas

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

GeoNode — система для просмотра и обмена геоданными. Столь же прекрасная и никому не нужная, что и раньше:
GeoNode

Cesium — библиотека JavaScript для создания трехмерных глобусов и плоских карт в веб-браузере без плагина. Со времен прошлого дистрибутива существенно выросла и развилась, но как была тормозной и неподъемной на слабых компьютерах, так ей и осталась.
Cesium

GeoMoose — Веб-ГИС портал для штата Дакота. Как была непонятна в возможности применения, так и осталась. Двухлетнее развитие выразилось в том, что на демке появились красные точки:
GeoMoose

Leaflet и OpenLayers — Нет смысла описывать эти популярные библиотеки. Для картографа они то же, что Регина Дубовицкая для «Аншлага». В OSGeoLive обе предустановлены. Leaflet версии 1.0.3, OL версии 4.1.1

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

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

Тут из-за всех этих приложений компьютер стал так тупить, что пришлось перезагружаться. И вновь ошибка при запуске. Стабильность — знак качества:
Еще одна ошибка при запуске lubuntu

DB Browser for SQLite — Графический интерфейс для управления SQL-базой.
sqlitebrowser

pgAdmin III — Набор инструментов PostgreSQL. Все как обычно: запускается, работает.
pgAdmin III

QGIS Browser — Менеджер файлов и баз данных. Аналог арккаталога у Эсри. Вещь вроде полезная, но на практике нифига не используется. Разве что в виде встроенного окна в QGIS.

Shp2pgsql — Утилита для экспорта и импорта файлов в PostGIS. Работает как и раньше, без замечаний.
Shp2pgsql

Spatiallite-gui — Графический интерфейс для управления базой SpatialLite. Как и раньше, проблем никаких, работает. Впрочем, полноценно пока не тестировалось, поэтому непонятно, что будет при реальной работе.
Spatiallite_gui

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

QGis — Наконец вышла OSGeoLive с адекватной версией QGis! До этого постоянно в репозитории хранилось одно старье. Текущая версия Essen 2.14.14. хоть и не самая свежая, но вполне пригодна для нормальной работы. Никаких проблем — все как доктор прописал.
QGis

gvSIG — гисовина для тех, кто ностальгирует по арквью. Не тому, который после аркинфо и аркэдитор, а тому, который 3,2а. Тут все точно также, только появился цвет в оформлении, исчезла иконка могилки с крестом, через которую добавлялись слои, но появилась фича с подключением WMS и TMS. Собственно, кроме целей ностальгии, запускать ее больше незачем.

OpenJUMP — Вот как я в последний раз написал что это «Достаточно мощная ГИС-программа с уютным интерфейсом десятилетней давности», так больше и добавить ничего не могу. Ах да, в ней векторные данные можно привязывать. Но об этом я тоже, кажется, говорил.
OpenJUMP
Ossim Planet
В этой версии дистрибутива эта милая, но бесполезная хрень запускается и даже показывает вращающийся глобус без зависания. Но толку от нее все равно никакого нет. Проще уж тогда гифку сделать и подвесить ее во вкладке, что-бы начальник видел, что вы работаете.
OSSIM Planet

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

uDig — небольшая ГИС с простыми возможностями редактирования. Сколько я ее не разглядывал, так и не нашел фичи, которую бы она делала, а другие нет. Да что там говорить, даже просто фичи никакой не нашел.
uDig

Навигация и карты:
JOSM — Основной редактор в OpenStreetMap. Версия как обычно, нуждается в обновлении (текущая версия: 11427, актуальная: 13367), но теперь хотя-бы это не мешает править данные.
JOSM

АААААА! В Дистре нет Меркаартора! Я понимаю, что никто им не пользуется, но нельзя же так взять и выбросить Меркаартор нахрен.

GPSPrune — программа для обработки и конвертации GPS. На вид интересная, но за последние годы я так ни разу ей и не воспользовался. Все необходимое для работы с GPS у меня в QGis-е есть. А привязка фотографий и аудиозаписей мне нахрен пока не нужна.
GPSPrune

Marble virtual globe — Виртуальный глобус, похожий на Google Earth. Интересен как учебное и развлекательное пособие, особенно тем, у кого есть дети. Детализация невелика, но когда надоест Земля можно переключиться на другие планеты:

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

ZyGRIB — программа для визуализации погодных данных. Идея прекрасная, но исполнение — говно.
ZyGRIB

За два года программа никак не изменилась и по прежнему выглядит слишком топорно для своих возможностей. Спасает только то, что она по прежнему работоспособна. Вот, например гифка с вероятным выпадением снегопада в Ростовской области на ближайшие восемь дней (кстати, гифку программа тоже не делает, ее приходится отдельно собирать из джипегов):
Вероятность снегопада

Пространственные инструменты:
Jupyter Notebook — На сайте проекта сказано, что «Jupyter существует для разработки открытого программного обеспечения, открытых стандартов, и услуг для интерактивных вычислений на десятки языков программирования». А еще там картинки с аттракторм Лоренца, которые меня сразу завлекли. Но увы, при старте выпадает консоль с сообщением, что какое-то окно не может быть создано и все пропадает. Даже скриншотить нечего.

MapSlicer — нарезка растров на тайлы. Раньше для этого был удобный сервис Яндекса, но он мирно загнулся. Теперь я всем рекомендую легонькую утилиту LeafletPano-master. Она под винду, но думаю под вайном запустится без проблем. Единственное, ради чего стоит использовать MapSlicer — сохранение привязки. Да и под рукой всегда.
MapSlicer

Monteverdi и ORFEO Toolbox (OTB) — Вот было же раньше хорошо, зачем опять эти дизайны? Только я решил, что появилась стоящая вещь — объединенный набор инструментов OTB с просмотрщиком Monteverdi, как программисты опять все извратили и вернули к состоянию, представленному аж в дистрибутиве Geolive 8.5. Если кратко — OTB это годнота для обработки растров, устроенная по принципу SAGA. Monteverdi — это просмотрщик для этого набора. Программисты то объединяют их в один пакет, то опять разносят в разные. Сейчас ORFEO Toolbox выглядит так:
OTB

а Монтеверди вот так:
Monteverdi

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

OSSIM-geocell — еще одна бесполезная хрень под заголовком OSSIM. Единственная польза от него — выбор лучших способов интерполяции для растра, тайлмилла-то нет теперь.
OSSIM-geocell

R-Statistics — эр, он и в Африке эр. Гуев для него в дистрибутиве нет, поэтому либо консоль, либо доставлять нужные пакеты самостоятельно.
R-Statistics

Mapnik & TileStache — собственно, готовый к работе Мапник — это одна из веских причин установить OSGeoLive. В текущей версии он определенно установлен, но, как обычно, хрен что разберешь. В системе одни пакеты, в справке другие. Тестовые примеры не работают. Не удивлюсь, если окажется, что проще все снести и установить заново:
Карта с Мапника

Веб-сервисы:
52°North SOS и 52°North WPS — Пакеты разные, но оба трешовые. Первый предназначен для чтения оперативных и архивных данных с локальных и удаленных сенсоров, второй экспортирует в веб алгоритмы обработки пространственной информации, которые предоставляет Sextante, ArcGIS Server, R, GRASS 7 или пользовательские функции. В девятой версии OSGeoLive запускался только один пакет, в нынешней вообще ничего не запускается.

deegree — Как было в девятой версии: «Cтандартизованный набор веб-сервисов для веб-картографии, объектовых и каталоговых сервисов, а также сервисов для работы с сенсорами и процессами который отказывается запускаться», так и осталось.

GeoNetwork — Каталог метаданных с мощными функциями поиска, редактирования и просмотра данных, который… правильно, хрен запустишь.

GeoServer — В девятой версии после загрузки прогресс-бара выдавал 404 ошибку. В этой 503. Прогресс налицо. А ведь пакет-то годный!

MapProxy — Сервис кеширования тайлов WMS. На удивление работает без замечаний, все как в инструкции написано. Сразу после запуска открывается демка на локалхосте:
MapProxy

QGis подгружает слои с адреса http://localhost:8011/service? без всякого промедления (правда не все):
QGis+MapProxy

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

EOxServer — Фреймворк на питоне для отображения ДДЗ Earth Observation (EO) и их метаданных. Работает без замечаний, но сами данные особого интереса не представляют (если вы не занимаетесь средиземноморьем, конечно):
EOxServer

IstSOS — система управления сенсорами и распределением данных. В справке про нее ни слова, но она хотя бы запускается:
IstSOS

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

pycsw — Сервис для публикации метаданных в XML-формате. Работает, но мне ни разу не пригодился.
pycsw

QGIS Mapserver — Сервис, выдающий WMS-слой на базе библиотек QGIS. Сколько я не развлекался в его изучении, ничего полезного для себя не извлек. Хелп начинается с того, что вы должны запустить сервис и увидеть контуры материков. Два года назад после запуска появлялось это:

Теперь появляется вот это (пятно и точки я сам нарисовал):
QGIS Mapserver

Думаю, еще пару лет и контуры материков наконец-таки проступят.

ZOO-Project — Интересный проект, который развивается ооочень медленно. В теории он должен предоставлять доступ к различным алгоритмам геобработки (например, триангуляция Делоне), но на практике пока это только выставочный экземпляр.
ZOO-Project

Собственно, это все. К одиннадцатой версии в OSGeoLive не осталось таких программ как GeoKettle (свободный аналог FME), Viking (работа с GPS), Merkaartor (редактор OpenStreetMap), Ushahidi (великолепнейший фреймворк для создания систем по сбору данных от населения, Cartaro (неплохая система управления геоконтентом) и, конечно-же, TileMill. Зато осталась куча всякой хрени, которая не только не помогает в работе, но и вообще не запускается. Больших, интересных и новых пакетов в сборнике нет. С другой стороны, многие программы обновлены до приемлемых версий. Кроме того, в OSGeo догадались, наконец, потереть несколько десятков игр, которые кочевали из версии в версию. Стороннего софта в этот раз очень мало, даже офисных программ нет никаких. А справка по дистрибутиву как была говно-говном, так и осталась.

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

Эскиз реласкопического полнотомера Анучина

Эскиз реласкопического полнотомера Анучина

Несколько лет назад я хотел заказать небольшую партию полнотомеров. Для оценки уровня денежных затрат и предмета разговора нарисовал небольшой эскиз по мануалам создателя. Но выяснилось, что даже за такую работу хер кто готов взяться. Нашелся только один исполнитель, но он заломил охренительно большую цену за мелкую партию, а большую мне и девать некуда: ни в НИИЛХе, ни в Сепзаплеспроекте, ни в Лесотехническом, прости Господи, университете призма Анучина нахуй никому не нужна. Я даже не уверен, что они вообще помнят как ей пользоваться.

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

Оригинальный мануал: Анучин Н.П. Лесная таксация: Учебник для вузов. — 5-е изд., доп., — М.; Лесн. пром-сть, 1982. — 552 с.
Учебник Н.П. Анучина

Частично, об использовании призмы я писал в статье про модернизацию wzpr-метода.

Байдарка Тайга-280

Байдарка «Тайга-280»

Как вы знаете, в конце прошлого года, я обеспокоился организацией географической экспедиции по реке Чир. Одним из технических вопросов стал выбор плавсредства. Моя старая добрая лодка Не-Птун, с которой я путешествовал по Аксаю, по-прежнему в целости и сохранности:
Лодка Не-Птун

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

И знаете, что я вам скажу? Это просто оргазмично!

Я решился на покупку в декабре 2016 года. Позвонил по телефону на сайте. Ответил мужик, заявивший, что лодки сейчас не изготавливают, поскольку все производство занято ватрушками (если кто не в курсе — это такая фигня для детских катаний по снежной горке). Но есть одна на складе, синего цвета.

Вообще-то, я хотел камуфляжную расцветку. Но раз уж одна единственная лодка дожидалась моего звонка, я решился и сделал заказ через официального питерского дилера (магазин «Снаряжение«). Заказывать напрямую не рискнул, ибо при попытке заказа интернет-магазин отчаянно пытался совокупить мне мозг. Да, забыл сказать, мне за эту статью никто не платил, хотя после того как по моей рекомендации «Тайгу» (280-ю и 340-ю — которая фигурировала в недавнем фильме) купили еще два человека, меня посещает мысль о том, что я, таки, где-то упустил свой гешефт.

Лодка шла доолго, почти месяц. За это время я столько прочитал про ее компактность, что пришел забирать ее с городским рюкзаком. В который она, естественно, не влезла. Да, она в сложенном состоянии по размеру напоминает спальник. Но это охрененно большой спальник. В чехол от лодки поместится три спальника. Но вес не подвел — я привязал лодку к рюкзаку и в таком состоянии не только отправился обратно пешком, но и зашел в ближайший «Ашан» купить пива и насос, который в комплекте с байдаркой не шел. Если-бы вместо «Тайги» я нес на себе мой Не-Птун, я за время этого пути наверняка бы сдох.

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

— Я даже не знаю, в наказание за что, можно заставить ртом ее надувать…
— За что, за что… За то что насос проебал!

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

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

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

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

Нос байдарки "Тайга-280"

Глядел на все это я без большого энтузиазма.

— И на этой фигне я собираюсь проплыть пять сотен километров? Да это же не лодка, это спичечный коробок!

На фоне таких мыслей подошла середина апреля, когда сев на Финбане в электричку, я уехал в Борисову Гриву для тест-драйва по реке Морье. В реальных условиях, ощущение объема и веса неожиданно полностью переменилось. Байдарка прекрасно умещается поверх полевого рюкзака и вполне транспортабельна в плане объема:
Лодка Тайга-280 на рюкзаке

Но дополнительные восемь килограмм (включая весла, и репшнур) на полном рюкзаке ощущаются очень сильно. В день пройти с такой лодкой вы сможете максимум километров пятнадцать, ну хорошо двадцать (см. краткую статистику экспедиции). Это при условии разового выхода. При многодневных маршрутах пройти больше 7-10 километров в день по земле вам не суждено. Лодка тяжелая, зараза, но — это же лодка! Да, за время экспедиции, обходя препятствия мы истерли все руки и ноги, делая остановки через каждые триста метров, где просто без сил валились на землю. Но сама по себе возможность перемещать по земле на такие расстояния, помимо обычного груза, еще и две лодки — великолепна. Я не знаю альтернативное плавсредство, с которым нам было бы легче и удобнее.

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

Река Морье

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

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

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

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

Приятным открытием стала легкость посадки и выхода на берег. На пологом берегу вы вообще не заметите этой операции. На крутых берегах сложнее, но все-равно, опрокинуться при посадке или высадке из «Тайги» можно либо по нелепой случайности, либо по собственной глупости.
Лодка "Тайга-280" на берегу

Из минусов, которые я ощутил сразу — постоянное присутствие воды в байдарке. А поскольку требуется выходить на сырой глинистый берег, то еще и грязи:
Вода с грязью в байдарке "Тайга-280"

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

Лодка "Тайга-280"

Первое испытание показало, что лодка достаточно надежна (я зря сомневался), юрка, но при некотором опыте вполне послушна, даже на течении. Благодаря небольшому размеру она почти не парусит (основную парусность создает тело гребца).

Следующий раз на байдарках (у нас уже было две «Тайги»-280) мы выходили в рамках предэкспедиционной проверки на реке Ижора в конце апреля. Погода стояла совершенно весенняя:
Байдарки в снегу

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

Еще перед первым испытанием, я планировал сделать для сидушки лодки «спинку» (например, как тут). На Морье, вместо спинки был использован рюкзак, закрепленный оттяжками:
Закрепленный рюкзак на байдарке

Сплав по Ижоре показал, что рюкзак отлично выполняет роль спинки даже без всяких оттяжек.

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

Ижора — река порожистая и по местным меркам быстрая. Несколько раз мы не успевали выруливать перед очередным, торчащим из воды валуном, пару раз вмертвую садились на камень. Вода ледяная — не поплывешь. Приходилось браться обеими руками за борта и рывками спихивать лодку обратно в воду. Без протянутого вдоль борта репшнура это был бы адский ад. Кроме того, использование байдарки (как и любой лодки) без привязанной веревки чревато большими проблемами при выходе на берег — вы можете просто вытолкнуть лодку обратно в воду, а сами остаться на берегу. Неудобство в том, что эта веревка постоянно путается под ногами, быстро мокнет и представляет печальное зрелище. Перед следующим сезоном подумываю сделать для нее маленький отсек в носовой части.
Нос лодки

Ижорский сплав не прошел бесследно — я пробил шкуру лодки. Это не представляет большой угрозы, поскольку основной несущий элемент — два независимых баллона из плотной ткани. Они упаковываются в шкуру, нижняя часть которой сделана из ПВХ, а верхняя из плотной ткани — «пикселки». Днище было пробито, точнее разорвано об камень незначительно (2х4 мм) и быстро заклеено, но некоторую тревогу в душе все-таки посеяло.

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

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

На распашонке, сунуться через эту стену я бы даже не пытался. Но байдарка достаточно узкая и вы без труда можете опустить руки в воду по обе стороны борта. Весло в таких местах абсолютно бесполезно — просто хватались за тростник и проталкивали лодку вперед. Первое время мы постоянно прислушивались к хрусту под днищем, ожидая, что острая ветка проткнет байдарку или порежет ее краем листа. Но никаких происшествий не случалось, поэтому мы хоть и медленно, но продвигались вперед.
Phragmítes austrális

«Тайга» по конструкции дна больше напоминает катамаран: пространство между баллонами достаточно свободно:
Дно байдарки "Тайга-280"

Это позволяет проплывать чрезвычайно мелкие участки, примерно до 5-15 см, в зависимости от загрузки. Мы не без труда, но проходили по краю поймы, залитой половодьем:
Край поймы, залитый половодьем

Эта же особенность помогла справиться с другой бедой — завалами. Если бы сам не убедился — не поверил, но на «Тайге-280» такие завалы (этот в частности) проходимы:
Завалы на реке Чир

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

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

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

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

Обратите внимание, что если вы накачаете байдарку по жаре на солнце (да, это не рекомендуется, но иногда альтернативы просто нет), то после спуска на воду она моментально потеряет значительную часть объема.

Байдарки до накачивания:
Байдарки до накачивания

Байдарки через двадцать минут:
Байдарки после накачивания

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

По ровной воде «Тайга» идет идеально, особенно если правильно подобрать ритм движения. При появлении ряби скорость падает, но байдарка все-равно остается достаточно быстроходной, легко опережая по скорости распашные лодки.

Из конструктивных доработок, которые имели бы смысл я назвал бы только приспособу, для крепления весла на борту лодки. Держать его на коленях все время, особенно, если руки заняты спинингом, совершенно неудобно. Вот, кстати, само весло:
Весло RST

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

После месяца испытаний обе лодки были в полнейшей исправности. У байдарки Даниила незначительно начал расходиться шов кожуры, но это не та проблема, которая вызывает негативные эмоции после пройденного. С моей все в полном порядке:
Шов на байдарке "Тайга"

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

Это не очень критично, молния по-прежнему работает. Но несколько досадно и неудобно, хоть открывать кожуру часто и не требуется.
Молния на байдарке "Тайга-280"

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

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

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

NextGIS Mobile

Чем плох NextGIS Mobile

Ребята из компании НекстГИС решили устроить 26 сентября большую презентацию, посвященную своим продуктам. Как только мне пришло письмо об этом, сразу понял — пора написать пару строк про их программу для сбора полевых данных NextGIS Mobile. Год назад я впервые установил ее и с тех пор она прошла дендроинтвентаризацию парков Нижнего Новгорода, Чирскую географическую экспедицию, сплавы по рекам Сухой Донец, Ижора и Великанйоки, составление геологической карты южной и средней Карелии, многочисленные рыбалки и путешествия.

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

Список построен по степени убывания трешовости встреченных багов. Смартфон Lenovo A2010-a. Android 5.1

1. Со временем исчезают кешированные тайлы. Примерно через неделю после загрузки тайлов они начинают исчезать из кеша. Не все сразу, в разных зумах, но исчезают. Как будто у каждого тайла есть свой срок давности, после которого тайл перестает отображаться. Это самая лютая беда, поскольку невозможно загрузить один раз карту и надолго уйти в районы без интернета.

2. Не грузится тайл, соответствующий текущему местоположению. Прямо как специально: вся карта подгружается, а фрагмент, который необходим — нет.
NextGIS Mobile

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

6. После обновления в начале августа перестало работать измерение расстояний. Все излечилось установкой apk-файла с сайта nextgis.ru, но в начале сентября и по сей день линейка опять не работает.

5. Информационный указатель плохо работает на полигональном слое. Вместо выбранного полигона выделяется что угодно.
NextGIS Mobile

6. При длинных треках (несколько десятков километров и более) программа иногда перестает отображать трек, а пару раз даже прекращала запись трека.

7. Маркер текущего местоположения иногда закрывает карту, в результате приходится идти наугад и часто в неправильном направлении.

На этом список недовольства исчерпывается и начинается список пожеланий. Опять-таки в порядке убывания необходимости.

1. Чрезвычайно не хватает возможности подгрузки растров или mb-тайлов. Приходится переводить все в вектор, а это долго, дорого и не всегда возможно.

2. Часто требуется закешировать карту вдоль маршрута движения или какого-нибудь протяженного объекта. Сейчас приходится загружать огромную лишнюю область, что при медленном интернете создает массу проблем.

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

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

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

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

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

8. Сейчас при измерении расстояний, необходимо выставлять две точки. Но чаще всего расстояния измеряются от текущего местоположения, до какого-либо объекта. Было бы удобнее, если бы первая точка выставлялась автоматически в текущем местоположении, а поставить нужно было-бы только вторую. Например, выбрал измерение расстояний, указал первую точку, далее если указать вторую — расстояние будет измеряться как сейчас, если нет — расстояние автоматически рассчитается между выбранной точкой и текущим местоположением.

9. Если выбрано расстояние между объектом на карте и текущим местоположением, это расстояние должно изменяться при движении, причем желательно указывать не только расстояние, но и азимут. Это особенно важно для случаев, когда азимуты необходимо фиксировать точно.

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

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

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

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

14. Смещение подложки. Оно необходимо даже не столько для OpenStreetMap, сколько для работы с данными, которые готовили криворукие инженеры. Из-за хронической проблемы СК42-WGS84 точки постоянно оказываются не на своем месте и расчет, скажем, расстояния между обнажением и мостом на карте превращается в пытку.

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

16. Иногда таблицу атрибутов требуется отсортировать. Сейчас это невозможно

17. Еще иногда в таблице атрибутов необходимо что-то найти контекстным поиском. Сейчас это то же неворзможно

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

19. При точном определении местоположения ошибку измерений всегда приходиться устанавливать заново. Запомнить, что я всегда использую CE 98 программа пока не умеет.

20. На карте невозможно выставить красивый стандартный масштаб, скажем 1:100 000. Мне это не требуется, но коллеги сетовали, что без этого у них в жизни счастья нет.

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

И жить всем сразу станет намного легче.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Зимний сезон лучше закрывать рано, чем подо льдом, но хули дома сидеть? Тем более, что впереди сложная экспедиция, а у меня половина оборудования новая, ни разу в реальных условиях не испытывалась. Кстати, спасибо вам за дельные советы по поводу его приобретения. Правда половину того, что вы предложили в магазинах хер найдешь, а вторая половина стоит как полет на Марс, но пару идей я таки извлек и заимел себе внешний аккумулятор на 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-листе.

слиппимап

Установка тайлового сервера на Debian 8 Jessie

Введение

Данная статья представляет собой перевод руководства по установке TMS сервиса, дополненный моими личными замечаниями.

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

Если вам требуется изменять наполнение карты путем включения/отключения какого-либо слоя, без WMS не обойтись. Но с другой стороны TMS проще, быстрее и в большинстве случаев предпочтительней, поэтому мы начнем именно с него.

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

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

 

Инструменты

Операционной системой для этих опытов послужит Linux Debian 8 Jessie. TMS будем разворачивать на библиотеке mapnik. Облигантных инструментов для этой работы нет. Под виндой я обычно использую TotalCommander Grey Pack (спасибо за него диаволу на пятнашке) с плагином Secure FTP Connections и программу Putty. Под линуксом я юзаю тильду для ssh-соединения и любой вменяемый файловый менеджер с поддержкой сетевого соединения.

Итак, погнали. У нас в наличии ssh-доступ к серверу с девственно чистой Дебиан Джесси. Рекомендую сразу установить консольный редактор nano:

sudo apt-get install nano

и консольный файловый менеджер mc:

sudo add-apt-repository ppa:eugenesan/ppa
sudo apt-get update
sudo apt-get install mc

Это не обязательно, но поверьте, потом еще не раз пригодится.

 

Установка и создание базы данных

Начнем с установки пакетов postgresql-9.4-postgis-2.1 и postgresql-contrib-9.4

Входим под рутом и запускаем:

apt install postgresql-9.4-postgis-2.1 postgresql-contrib-9.4

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

su postgres

и для избежания возможных проблем переходим к домашней директории:

cd ~

Создадим пользователя c именем «osm»:

createuser osm

и базу данных с названием «map»:

createdb -E UTF8 -O osm greatbritain
psql -c "CREATE EXTENSION hstore;" -d map # Should result in CREATE EXTENSION
psql -c "CREATE EXTENSION postgis;" -d map # Should result in CREATE EXTENSION

Если все прошло удачно, выходим из постгреса:

exit

 

Добавление пользователя

Для того, чтобы избежать работы под рутом, добавим в систему пользователя osm с помощью команды adduser:

adduser osm

Теперь добавим пользователя osm в группу sudo. Для этого воспользуемся редактором nano (вы же его установили, верно?)

su вводим пароль
nano /ets/sudoers
Находим строку
# User privilege specification

после

root ALL=(ALL:ALL) ALL

вставляем строку

osm ALL=(ALL:ALL) ALL

и сохраняем документ последовательностью хоткеев ctrl+o, Enter , ctrl+x

 

Импорт картографического стиля

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

su osm
cd ~
wget https://github.com/gravitystorm/openstreetmap-carto/archive/v2.29.1.tar.gz
tar -xzf v2.29.1.tar.gz

Теперь в домашней директории должна появиться папка с названием: Теперь вы должны иметь папку с названием «openstreetmap-carto-2.29.1». После этого можно переходить к импорту геоданных.

 

Импорт геоданных

Нам потребуется пакет osm2pgsql. Для этого переключимся на рута и выполним команду:

exit
apt install osm2pgsql

Теперь можно переходить непосредственно к импорту dbf-файла с данными. Самое простое решение — это импортировать всю планету OpenStreetMap целиком. Но у такого подхода есть очевидные недостатки: во-первых, объем диска у вас не безграничен, во-вторых, даже на простое скачивание планеты может уйти изрядное количество времени, а в третьих, информация о улицах какой-нибудь Зулусии вам может быть совершенно не нужна. Приходится вырезать нужный регион из дампа самому, либо использовать готовые данные. Сейчас их можно получить у  GeoFabrik, CloudMade или Гис-лаб (НексГИСа). В выгрузке геофабрики напрочь отсутствовали реки. В выгрузке НексГИСа отсутствовали части объектов, пересекаемые государственной границей, из-за чего некоторые пограничные озера при рендере пропадали, но острова на них закрашивались цветом воды. Выгрузки регулярно обновляются, так что это вполне могут быть временные случайные баги. С выгрузками CloudMade я активно не работал, поэтому комментарий дать не могу.

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

su osm
cd ~
wget href="http://data.gis-lab.info/osm_dump/dump/latest/RU-ROS.osm.pbf"

Теперь импортируем скачанные данные в постгрес. Делается это так: запускаете команду:

osm2pgsql --slim -d map -C 1600 --hstore -S openstreetmap-carto-2.29.1/openstreetmap-carto.style RU-ROS.osm.pbf

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

Иногда на данном этапе возникают следующие проблемы:

Error: Connection to database failed: could not connect to server: No such file or directory

Тут, возможно, вам пригодиться фраза из оригинальной статьи: «Is the server running locally and accepting connections on Unix domain socket «/var/run/postgresql/.s.PGSQL.5432»?

Кроме того, если вы установили PostgreSQL 9.3 вместе с 9.1 на 9.3 может быть использован другой порт. Необходимо найти его и использовать флаг -p, при запуске osm2pgsql.

Поздравляю. Вы заполучили базу OpenStreetMap на выбранный регион. Проверить это можно командой:

psql -d map -c "select name from planet_osm_point where place='city';"

 

Создание тайлового сервиса

Установим пакет mod_tile. Пока он недоступен в репозитории Дебиан, поэтому нам потребуется предварительно скачать его с гит-хаба и распаковать в домашней директории:

wget https://github.com/openstreetmap/mod_tile/archive/6c2cb243e4c8b047950ab8062cd66245f20a5d2f.tar.gz -O mod_tile.tar.gz
tar -xzf mod_tile.tar.gz

Теперь установим пакеты autoconf, libtool, libmapnik-dev и apache2-dev:

su
apt install autoconf libtool libmapnik-dev apache2-dev
exit

Перейдем в каталог mod_tile и запустим:

cd mod_tile-6c2cb243e4c8b047950ab8062cd66245f20a5d2f/
./autogen.sh
./configure
make

Теперь запустим из под рута следующую команду:

su
make install
make install-mod_tile
exit
cd ..

 

Создание xml стиля Mapnik

Нам потребуются пакеты curl, unzip, gdal-bin, mapnik-utils и node-carto, для установки которых выполним под рутом:

su
apt install curl unzip gdal-bin mapnik-utils node-carto
exit

Вернемся в пользователя osm и загрузим необходимые шейп-файлы. Для справки: база osm не хранит в себе континенты и некоторые другие объекты, отображающиеся на низких зумах. Эти полигоны и линии подгружаются и прописываются в стиле с помощью команды:

cd ~/openstreetmap-carto-2.29.1/
./get-shapefiles.sh

Для смены имени базы данных можно выполнить команду:

sed -i 's/"dbname": "gis"/"dbname": "map"/' project.mml

Для того, что-бы сформировать xml-файл, непосредственно отвечающий за стиль, запустите:

carto project.mml > style.xml

 

Настройка рендера

Откройте в редакторе nano файл /usr/local/etc/renderd.conf (потребуется использовать sudo). Напротив XML пропишите путь к вашему xml-файлу картостиля. Напротив HOST пропишите localhost.

Либо, вы можете внести эти изменения автоматически, выполнив под рутом:

su
sed -i 's/XML=\/home\/jburgess\/osm\/svn\.openstreetmap\.org\/applications\/rendering\/mapnik\/osm\-local\.xml/XML=\/home\/osm\/openstreetmap-carto-2.29.1\/style.xml/' /usr/local/etc/renderd.conf
sed -i 's/HOST=tile\.openstreetmap\.org/HOST=localhost/' /usr/local/etc/renderd.conf

После этого, файл /usr/local/etc/renderd.conf  должен выглядеть так:

[default]
URI=/osm_tiles/
TILEDIR=/var/lib/mod_tile
XML=/home/osm/openstreetmap-carto-2.29.1/style.xml
HOST=localhost
TILESIZE=256
;HTCPHOST=proxy.openstreetmap.org
;** config options used by mod_tile, but not renderd **
;MINZOOM=0
MAXZOOM=19
;TYPE=png image/png
;DESCRIPTION=This is a description of the tile layer used in the tile json request
;ATTRIBUTION=&copy;<a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> and <a href=\"http://wiki.openstreetma$
;SERVER_ALIAS=http://localhost/
;CORS=http://www.openstreetmap.org
;ASPECTX=1
;ASPECTY=1

Теперь измените директорию плагинов (plugins_dir) и местоположение пакета (match debian package location) mapnik. Сделать это можно вручную, либо с помощью команд:

sed -i 's/plugins_dir=\/usr\/lib\/mapnik\/input/plugins_dir=\/usr\/lib\/mapnik\/2.2\/input\//' /usr/local/etc/renderd.conf
[mapnik]
plugins_dir=/usr/lib/mapnik/2.2/input/
font_dir=/usr/share/fonts/truetype
font_dir_recurse=1

Скопируйте скрипт renderd.init и установите право доступа к файлу renderd:

cd /home/osm
cp mod_tile-6c2cb243e4c8b047950ab8062cd66245f20a5d2f/debian/renderd.init /etc/init.d/renderd
chmod a+x /etc/init.d/renderd

Исправьте пути в скрипте init

sed -i 's/DAEMON=\/usr\/bin\/$NAME/DAEMON=\/usr\/local\/bin\/$NAME/' /etc/init.d/renderd
sed -i 's/DAEMON_ARGS=""/DAEMON_ARGS=" -c \/usr\/local\/etc\/renderd.conf"/' /etc/init.d/renderd
sed -i 's/RUNASUSER=www-data/RUNASUSER=osm/' /etc/init.d/renderd
mkdir -p /var/lib/mod_tile
chown osm:osm /var/lib/mod_tile

Теперь запустите rederd:

systemctl daemon-reload
service renderd start

 

Установка и настройка Apache и mod_tile

Установите апач с помощью команды:

apt install apache2

Конфигурация апача и загрузка mod_tiles выполняется командой:

echo "LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so" > /etc/apache2/mods-available/tile.load
ln -s /etc/apache2/mods-available/tile.load /etc/apache2/mods-enabled/

Добавьте следующий ниже текст с помощью редактора nano перед тегом <?/VirtualHost> в /etc/apache2/sites-enabled/000-default.conf 

LoadTileConfigFile /usr/local/etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 0
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30

и перезапустите апач:

service apache2 restart

 

Проверка отдачи тайлов
Перейдите в браузере по адресу http://localhost/osm_tiles/0/0/0.png напрямую , либо с использованием порта 8080. Если все прошло успешно, вы увидете в браузере вот такую картинку:

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

sudo service renderd stop
rm -r /var/lib/mod_tile/default
sudo service renderd start

На ближайшие месяцы это будут единственные команды, которые вам потребуются в консоли.

Буровых дел мастер

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

Нахуя бурить деревья? — спросит человек, не знакомый с вопросом.

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

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

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

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

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

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

DSCN8239

 

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

Когда я покупал свой первый бур, в дополнение к нему мне подарили (вот были-то времена!) аутентичный набор для ухода за буравом COSHARP.

DSCN8242

 

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

Через несколько дней мне пришла инструкция на русском от их российского дистрибутора — магазина «Лесник«. Авторы письма любезно разрешили мне процитировать на сайте текст инструкции, со ссылкой на www.haglofrus.ru

Итак, внимайте и впитывайте.

Как чистить и затачивать приростной бурав:
«Ваш приростной бурав должен всегда быть чистым и острым!
Это должно продлить срок службы вашего бурава и улучшить его эксплуатационные характеристики. Кончик бурава можно чистить небольшим куском мягкой бумажной салфетки или хлопчатобумажной ткани. Коррозия и грязь со временем разрушат режущую кромку. Можно использовать любое светлое масло, распыляя его прямо на коронку бурава и стирая бумажной салфеткой. Осторожно! Режущая кромка острая, и, чтобы избежать травм, при чистке оборачивайте бумажную салфетку вокруг, например, кончика извлекающего устройства. Для удаления ржавчины можно использовать стальную вату.

Как затачивать головку бурава с помощью комплекта COSHARP:
Комплект COSHARP состоит из 1 бутылки светлого масла, 1 бутылки абразивного песка, пчелиного воска и 3 различных абразивных брусков. Налейте несколько капель светлого масла на плоский брусок.
Расположите кончик бурава на масле под углом 40 градусов и осторожно перемещайте кончик туда и обратно, поворачивая коронку. Не давите, не используйте силу. Продолжайте до тех пор, пока кончик не станет острым.
Нанесите небольшое количество масла на круглый брусок (заостренный конец). Очень осторожно вставьте заостренный конец в коронку бурава и несколько раз поверните вал бурава только до тех пор, пока внутренняя поверхность бурава не станет ровной. Для лучшего рассмотрения используйте увеличительное стекло.
Песок используется для заточки кончика бурава если он заржавел или имеет небольшие сколы.
Просверлите отверстие в дереве или куске древесины под наклонным углом на глубину приблизительно 2 см. Всыпьте в это отверстие песок и осторожно снова ввинтите бурав и затачиваемый кончик в песок, по пол-оборота в каждом направлении. Для снижения трения в отверстие нужно влить немного масла. После этого очистите бурав куском бумаги или хлопчатобумажной ткани, и пусть бумага/ткань пройдет через всю коронку бурава снизу вверх, чтобы удалить излишки песка.»

1

2

В той же инструкции, помимо правил заточки было еще пару страниц полезной инфы:

Как защищать приростной бурав фирмы Haglöf:

«Материал [бурава] чувствителен к ударам и неправильной обработке, но он не изнашивается, если эксплуатировать и обслуживать его правильно. Если при изготовлении прецизионного инструмента, такого как приростной бурав, используется более мягкая сталь, бурав очень скоро затупится и через короткое время эксплуатации придет в негодность.
Правильно содержащийся бурав будет работать в течение отбора 1000-2000 образцов или даже большего количества. Нам известно о приростных буравах, которые регулярно эксплуатировались в течение 40 лет и все еще сохраняли свое качество.»

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

«Многие считают, что 30-40 лет тому назад приростные буравы были лучше, ссылаясь как на качество материала, так и на искусство их изготовления. По нашему мнению, хотя мы занимаемся изготовлением буравов на протяжении 60 лет, мы никогда не делали буравов лучшего качества, чем в настоящее время.»

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

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

Ну и наконец, немного матчасти. В институте вам такого не расскажут.

 

«Длины:
Мы изготавливаем приростные буравы длиной от 100 мм или 4” до 1000 мм или 39”. Чтобы получить максимальную глубину проникновения головки, сверло должно быть длиной, равной приблизительно половине диаметра дерева.
На нашем внутреннем шведском рынке самая распространенная длина бурава составляет 200-250 мм. В Африке и в Азии, например, более популярны длинные буравы, длиной 800-900 мм.

Внутренние диаметры:
Наши стандартные внутренние диаметры составляют 4,35 мм и 5,15 мм (0,169” и 0,200”). Наиболее популярен внутренний диаметр 5,15 мм, так как извлеченную сердцевину легче исследовать и считывать. Буравы диаметром 12 мм также производятся как стандартные, но без адекватного разнообразия вариантов длин. Буры с внутренним диаметром 12 мм используются, главным образом, для измерения длины волокон древесины, а также когда выполняется количественный анализ с необходимостью наличия образцов большего размера.

Резьбы:
Существует два различных вида нарезки наших буравов: 2- или 3-резьбовые. 2-резьбовые больше подходят для твердой древесины, так как такие буравы медленнее вворачиваются в дерево (8 мм за оборот) и формируют большее усилие при сверлении. 3-резьбовые быстрее и легче проникают в дерево (12 мм за оборот).
3-резьбовой бурав на 66% быстрее, чем 2-резьбовой.»

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