Якубович

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

Возьмем математику. Если объединить между собой теорию вероятностей и топологию, можно за несколько часов вывести альтернативную формулу определения вероятности. Достаточно вспомнить, что оценка вероятности связана с измерением, а значит привычная формула P=m/n — лишь частный случай измерения одномерного множества. В общем виде к формуле оценки вероятности следует добавить степень, которая соответствует размерности Хаусдорфа-Безиковича. А единичная метрика — лишь отношение величины всего пространства к величине наблюдаемого подпространства. В результате мы получаем очень простой инструмент, который помогает оценить математическое ожидание генеральной совокупности по неполным данным.

Или вот другой пример эмергентности. Если к прошлому наблюдению добавить зиму, хандру и бутылку коньяка, возникает странный кусок кода под названием Yacubovich.js. Это калькулятор, который приближенно оценивает средние значения по неполным данным. Например, у вас есть данные за неделю, а необходимо среднее значение за месяц. Укажите размер генеральной совокупности (n -> 31), введите данные, которые есть, нажмите ‘r’ и результат готов. Фактически это обычная экстраполяция, только с небольшой фичей, которая повышает однозначность и точность.

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

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

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 стоит установить. Если не как инструмент, то хотя-бы для того, что-бы окунуться в текущее состояние картографического опенсорса.

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

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

консоль 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

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

Тестируем ГИС «Аксиома». Попытка вторая

Холодец без водки — невыразимая гадость, а с водкой — ничего так, вполне нормальная закуска.
— Заебал своими холодцами! Ты что, опять про ГИС «Аксиому» будешь проповедовать?
Именно про нее, друзья мои. Мой прошлый тест-драйв оказался на редкость быстрым, поэтому, как и обещал, я нашел шестидесятичетырехбитную машину под виндой и запустил на ней эту хреновину.

Ниже вас ждет длинная простыня с картинками и минимумом текста. Не будем же терять время. Нарежьте себе бутербродов с толстыми кусками колбасы и добро пожаловать в новорожденный мир ГИС «Аксиома».

Устанавливаем и запускаем программу. Интерфейс простой, чуть сложнее Paint-а.
1

 

Замечательно, что разработчики побеспокоились об аналоге Open Layers в QGIS, проще говоря  о встраивании популярных WMS-слоев. Но грузятся тайлы значительно медленно, а в доступном перечне отсутствуют не только гугловские карты, но и стандартный OSM-Mapnik.

2

 

И еще вопрос: если уж работа ведется над новым продуктом, почему было бы не запилить смещение снимка и свой сервер смещений, как это сделано в JOSM? Теперь, после релиза «Аксиомы», на один продукт, в котором создаются хуй пойми к чему привязанные карты станет больше.

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

3

 

Можно открыть не только DXF, но и DWG, что очень хорошо при работе с заказчиками, подсаженными на наркотическую иглу AutoDesk.

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

4

 

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

5

 

 

В рот мне компот, как же долго грузятся слои! Аксиома по скорости загрузки слоев рядом с QGIS и близко не лежит. Ощущение, что я свои слои напрямую в leaflet.js подгружаю.

6

 

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

7

 

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

Плохо только то, что в «Аксиоме» я понятия не имею о типе загруженного в нее шейп-слоя. Когда слоев много, а названия их похожи («waterl» и «waterp»), приходится тратить лишнее время.

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

8

 

Кстати, настройка стиля полигона не работает в верхнем меню.

9

 

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

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

Так, а что у нас с проекциями? Давайте-ка установим нашу любимую EPSG 3857:

10

 

 

— Что? Нет дефолтной 3857? Как нет? Что за пиздец-то?

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

 

В утешение надо заметить, что дефолтно в списке проекций особое внимание уделено территории СССР:

11

 

Редактировать данные в «Аксиоме» просто и понятно. Даже ребенок усвоит. Р-р-раз! И готовы полигоны:

12

 

Р-р-раз! и готова полилиния. Р-р-раз! и измерено расстояние.

13

 

Р-р-раз! И программа вылетает вместе с полигонами, полилинией и измеренным расстоянием:

14

 

Ну ничего. Запустим снова. Подождем, пока отрисуются слои. Потрахаемся с настройкой стилей для каждого слоя:

15

 

Полюбуемся великолепием технологии тайловой загрузки растров:

17

 

В итоге даже получим что-то вменяемое. Неплохо, господа. Весьма неплохо!

18

 

Кстати настрока WMS простая и гораздо лучше, чем в том же QGIS+OpenLayers (доступнее во всяком случае). Яркость на максимум, контраст на максимум — вот секрет отрисовки растительности в городе:

19

 

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

20

 

Надеюсь, эту беду исправят в ближайшее время. Да и как иначе-то? Работать же невозможно.

В «Аксиоме» есть свой функционал привязки растров с  бедным выбором алгоритмов трансформации и богатым выборов методов интерполяции. И как обычно, хер кто додумался сделать рекомендацию по выбору.

22

 

Дизайн модуля привязки честно спизжен из QGIS, в чем-то даже улучшен (можно сетку наносить при привязке), но до прообраза ему еще расти и расти. Это при том, что модуль в QGIS — та еще хренота.

Таблица данных примитивна и изобилует всякими ошибками.

28

 

Хотите кликнув по полю отсортировать строки в таблице? А вот хер вам. Но зато привычное окно схемы таблицы.

26

 

«Аксиома» — очередная геоинформационная система, в которой атрибутивная таблица слоя редактируется по мудоебски. Нажатие Enter не перемещает активную ячейку вниз как в Excel, а включает режим редактирования. Бля, я жду уже хуеву тучу лет, когда кто-нибудь додумается до такого простого решения.

В «Аксиоме» можно создавать тематический слой, причем по достаточно сложному запросу.

25

 

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

23

 

Можно совместить все это с космоснимком — получится даже годная подоснова. То что надо для большинства офисных работников.

32

 

Жаль вот только экспортировать результат можно только в мапинфошные файлы.

30

 

Вот собственно и все возможности. Конечно, ГИС «Аксиома» это не профессиональная геоинформационная система, а легкий вариант Mapinfo. Если вы работаете в ArcGIS, QGIS, GRASS или других аналогичных по уровню пакетах, то «Аксиома» для вас как дрова для атомной станции. Но для людей, которым очень срочно нужно изготовить хоть сколько-нибудь профессиональную карту, но они на хую вертели все ГИСы вместе с картографией вместе взятые, это прекрасный вариант.

Говоря проще: годнота. Одобрямс.

Тестируем ГИС «Аксиома»

Уже без двух минут пять утра, а у меня еще ни в одном глазу и полная тарелка холодца. Самое время потестить самую громкую новинку осени — Аксиому. Это новая «бесплатная геоинформационная система». Я ее уже скачал с официального сайта, но пока даже не распаковывал, так что итог этой статьи мне пока не ясен. Будете скачивать, обязательно прочтите лицензионное соглашение, благо оно короткое и никакого отношения к программе не имеет. В основном там сказано про то, что вас теперь будут заваливать спамом еще и сотрудники ООО «ЭСТИ».

Для справки: компьютер у меня слабенький- нетбук Asus X201E. Система — украденная седьмая винда.

Еще для справки: я искренне считаю, что распространяемое компанией «ЭСТИ» Mapinfo — это не просто недоразумение, а какое-то необыкновенно фееричное говно. Уж, если нет QGIS-a или ArcGIS-а, лучше я буду юзать старенький ArcView 3.2 или, на худой конец gvSIG, логика работы в которых проста как тропа в лесополосе. А если уж мне охота поебстись, то для этого есть бесплатный GRASS.

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

Распаковываем. Устанавливаем… А вот херас-два.

2

Система то у меня у меня, 32-битная, а установочный пакет только под 64-битную. Лезем в документацию:

«Программа занимает 112 МБ дискового пространства и работает в 64-битной версии Windows.«

Едрена вошь, ЭСТИ! Такие вещи надо сразу писать на главной странице! Или хотя-бы на странице загрузки. Что за мудачество — заставить меня читать вашу лицензию, подписаться на спам от вас, скачать архив, что-бы в итоге устроить мне распростертую сосамбу?

О возможных проблемах в совместимости надо всегда предупреждать заранее. Вот у меня, уже сложилось хуевое мнение об «Аксиоме». И у вас тоже. По крайней мере, до тех пор, пока я за 64-битную систему не сяду.

— Что-бы вы порекомендовали: использовать программу «Аксиома» от ООО «ЭСТИ» или жрать холодец?

— Я думаю, что выбор очевиден. Любой здравомыслящий человек непременно выберет холодец.

P.S. Я же говорил, что уложусь за 400 секунд, а вы не верили. Журналистское чутье не пропьешь.

Непростая GeoLive

Read in English

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

О том что улучшения есть, стало понятно еще до начала установки. В отличие от версии 8.5, ждать скачивания которой было мучительней чем ответа от оператора Ростелекома, девятая версия качается довольно-таки шустро. Рекомендую сразу качать мини-версию, лишенную установщиков для винды и макоса. Во-первых, это добавочный гигабайт бесполезных файлов, а во-вторых, гарантия проблем с установкой, вызванных превышением максимального размера файла в FAT32. Можно, конечно отформатировать все в NTFS, но гарантии, что такая настройка бубна сработает у меня нет.

В справке по операционке приводится совет по созданию загрузочной флешки. Я настоятельно рекомендую воспользоваться им и описать ощущения, поскольку я такой фигней страдать не стал. Вообще, складывается ощущение, что справку в OSGeo пишет сам Рихард фон Крафт-Эбинг: ее подробность меркнет на фоне косяков как взрыв-пакет на фоне Хиросимы. Веб-версия справки, на которую я дал ссылку от версии встроенной в операционку отличается довольно существенно, но обе они явно развивались перпендикулярно направлению к лучшему. Вместо одних ошибок появляются другие, а большинство рецептов больше подходят для поваренной книги Макаревича, чем для практической работы. Конечно, я понимаю, что килькой в наше время отравиться гораздо проще в каждой убунте живут утилиты для создания загрузочной флешки, но все-же советую найти-таки бесплатную программу UNetBootin и распаковывать образ диска с ее помощью.

Установка проходит без замечаний, базовая операционная система OSGeo по прежнему лубунта, несмотря на невесть откуда взявшиеся ссылки на xubuntu.org с официального сайта. По прежнему лубунта не так быстра, как об этом говорят, местами глючна и топорна. Первое что бросается в глаза — это новая непонятная фигня в обоях рабочего стола, вместо старой непонятной фигни. Она больше не навевает прежнюю тоску и меланхолию, поэтому, первое что я сделал, это сменил рабочий стол на одно из полотен Рериха. Зато прежнюю тоску навевают траблы с масштабированием значков (размер изменяется сразу во всех папках) и их сортировкой на рабочем столе (ее просто нет).

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

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

General — user,user
52nWPS — wps,wps
52nWSS — alice,alice или 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

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

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

А теперь о главном. Начинка GeoLive включает следующее:

Веб-клиенты

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

2015-09-24-235000_1280x800_scrot 2015-09-24-234545_1280x800_scrot

 

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

2015-09-25-002422_1280x800_scrot 2015-09-24-235357_1280x800_scrot

 

GeoNode — Платформа для обмена геоданными и картами, проще говоря смесь облака и системы управления контентом. Чрезвычайно доставляющая вещь. Частично русифицирована и интуитивно понятна. Знакомство с ней доставляет столь же офигенское удовольствие, как прослушивание Яна Сибелиуса. Я не понимаю, как произошло, что в хелпе нет ни единой строчке об этой CMS. Зато есть встроенная обширная pdf-документация на английском.

2015-09-25-020039_1280x800_scrot 2015-09-25-020236_1280x800_scrot 2015-09-25-020329_1280x800_scrot 2015-09-25-020615_1280x800_scrot

 

Cesium — библиотека JavaScript для создания трехмерных глобусов и плоских карт в веб-браузере без плагина. Она использует WebGL для аппаратного ускорения графики. В дистрибутиве присутствует симпатичная хэлловордная демка с подробным туториалом по библиотеке.

2015-09-25-031021_1280x800_scrot 2015-09-25-032326_1280x800_scrot

 

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

2015-09-25-032510_1280x800_scrot

 

Leaflet — Библиотека для отображения геоданных. Да кому я рассказываю, вы не хуже меня знаете о замечательном детище Владимира Агафонкина. GeoLive содержит предустановленную библиотеку и краткое введение по ее установке и настройке.

2015-09-25-033313_1280x800_scrot

 

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

2015-09-25-034624_1280x800_scrot 2015-09-25-034612_1280x800_scrot

 

OpenLayers — Встроенная библиотека и справка по OL. Может быть весьма полезна если у вас как у меня закончился интернет в проводе. В остальном то-же самое, что и с leaflet.

2015-09-25-035609_1280x800_scrot

 

Системы кризисного управления

Sahana Eden — Кризисное управление при стихийных бедствиях. Как и в прошлой сборке OSGeo не запустилась, хотя очень старалась запуститься.

2015-09-25-040806_1280x800_scrot

 

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

2015-09-25-041018_1280x800_scrot

2015-09-25-042814_1280x800_scrot

2015-09-25-042825_1280x800_scrot 2015-09-25-042837_1280x800_scrot

 

Базы данных

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

2015-09-25-043624_1280x800_scrot

 

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

2015-09-25-045446_1280x800_scrot

 

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

2015-09-25-050355_1280x800_scrot

 

Shp2pgsql — Утилита для экспорта и импорта файлов в PostGIS.

2015-09-25-051121_1280x800_scrot

 

Spatiallite_gui — Графический интерфейс для управления базой SpatialLite.

2015-09-25-051456_1280x800_scrot

 

SQLite Database browser — Система управления SQL-базой с графическим интерфейсом.

2015-09-25-051826_1280x800_scrot

 

Настольные ГИС

GRASS GIS — Одна из моих давних мечт — получить заказ на разработку ГИС в GRASS. Или на анализ. Или хоть на что-нибудь. Этой программой интересуется незаслуженно малое количество народу. А между тем, она развивается почти такими же темпами как QGIS. Да, там по прежнему все не так как обычно, но с каждым разом, решение задач становится проще. Программисты и дизайнеры не зря едят свой хлеб. В этой сборке установлена самая последняя версия (7.0.1) — прилизанная и локализованная. Открываешь и с первых секунд тебя засасывает в волшебный мир диалогов, экстентов и возможностей обработки данных. Работать в GRASS надо обязательно, что-бы не говорили о тупиковых ветвях эволюции.

2015-09-25-052730_1280x800_scrot 2015-09-25-054055_1280x800_scrot

 

gvSIG Desktop — Когда-нибудь я осознаю, что стал старым маразматиком, брюзжащим на прогресс. Первое, что я сделаю после этого открытия — перепишу интерфейс gvSIG и организую клуб бывших любителей ArcView 3.2a. Теплый и ламповый 3.2а, был, в отличии от gvSIG модульным и черно-белым, но кто из нас, из маразматиков об этом вспомнит?

2015-09-25-055548_1280x800_scrot 2015-09-25-055944_1280x800_scrot

 

Kosmo Desktop — Замечательная программа. После запуска появляется красивое приветственное окно с видом на обращающийся у мексиканского побережья циклон. На этом, собственно, функциональность программы заканчивается. К слову сказать, в версии OSGeo Live 8.5, Kosmo запускалась, но до установки флеш-плеера уходила в глубокий аут. Возможно заработает после апгрейда лубунты. Пока же, окно приветствия висит до самого выключения компьютера.

2015-09-25-061139_1280x800_scrot

 

OpenJUMP — Достаточно мощная ГИС-программа с уютным интерфейсом десятилетней давности. В отличии от QGIS имеет-таки возможность привязывать векторные данные (афинным способом). Впрочем, я давно не наводил ревизию среди плагинов QGIS, возможно один из них уже давно ждет своего часа. OpenJUMP имеет встроенный функционал обработки (буфер, триангуляция Делоне, полигоны Воронского и др.), статистики, конвертации и, подозреваю, содержит в себе несколько чрезвычайно необходимых фич, которых так нехватает в популярных пакетах.

2015-09-25-062323_1280x800_scrot 2015-09-25-063258_1280x800_scrot

 

OSSIM — Цитирую официальный хелп: «OSSIM был создан несколькими правительственными агенствами США, работавшими в сфере разведки и обороны. В настоящее время проект передан в руки исследовательских проектов и активно развивается с 1996 года.» Может я чего-то недопонимаю, но на вид это обычная приколюха с плавной анимацией глобуса (кстати, очень приятно, хоть и непривычно). В реальном времени показана светлая сторона Земли и местоположение Луны, что доставляет особенное удовольствие. Координаты с точностью до 12-го знака, исполненные серым шрифтом с засечками прекрасно бы смотрелись в любом фильме про американских шпионов и военных. Что-то подобное я видел в середине девяностых в одной из серий «Секретных материалов».

2015-09-25-064504_1280x800_scrot 2015-09-25-065106_1280x800_scrot

При первом выборе пункта «настройки» программа моментально умерла. Но это не страшно. В OSGeo 8.5 она вообще погружалась в безвыходный транс сразу после запуска.

QGIS — Версия 2.8 (Вена). В сборке OSGeo 8.5 глючил зум и часть плагинов (включая OpenLayers plugin). Сейчас с зумом все в порядке, а вот работоспособность плагинов пока под вопросом. Впрочем, если нет интернета, какая разница, заработают ли плагины, которые невозможно скачать? Текущая версия хоть и не самая новая (23 октября выйдет QGIS 2.11), но вполне стабильная. А вообще, говорить о QGISе все равно, что рассказывать о своих делах: можно говорить либо часами напролет за литром водки, либо сказать, что все нормально. Третьего не дано.

2015-09-25-070454_1280x800_scrot 2015-09-25-071801_1280x800_scrot

 

SAGA — Есть геоинформационные системы как комнаты: в них живут, отдыхают, учатся, работают. А SAGA — это скорее кладовка с инструментами. Но, от этого она нисколько не теряет своей ценности, скорее наоборот. В текущей сборке GeoLive все работает и отображается без нареканий. Как раз то что доктор прописал.

2015-09-25-071819_1280x800_scrot 2015-09-25-072113_1280x800_scrot 2015-09-25-072118_1280x800_scrot

 

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

2015-09-25-073825_1280x800_scrot 2015-09-25-074352_1280x800_scrot

 

Навигация и карты

JOSM — Версия 8159 (актуальная версия сейчас 8677). Запускается без замечаний, но толку от нее в отсутствии интернет-подключения почти никакого (хоть бы встроили плагин open-data в ядро, что-ли).  В сборке OSGeo Live 8.5 JOSM поставлялся в безнадежно устаревшей версии. Для его обновления требовалось скачать JAVA WebStart и в безлунную ночь на кладбище бить в бубен тому кто это все разрабатывал. В итоге вместо обновления старого джосма, у вас устанавливался второй новый. Посмотрим как будет теперь.

2015-09-25-080151_1280x800_scrot

 

Merkaartor — Запускается без замечаний и точно так-же закрывается. Последний раз в этой программе я что-то делал когда динозавры были еще маленькие. С тех пор особого желания бросать JOSM+ID у меня так и не возникло. Хотя, кто знает, может тем самым я бы принес картам OSM больше пользы.

2015-09-25-080558_1280x800_scrot

 

GpsDrive — Описание из хелпа: «Это автомобильная (велосипедная, водная, воздушная, пешеходная) навигационная система. GpsDrive отображает ваше местоположение, полученное из GPS, на масштабируемой карте. Файл карты выбирается автоматически в зависимости от вашего расположения и указанного масштаба. Все GPS-приёмники, по идее, должны быть совместимы, поскольку обычно USB-GPS используют бинарный протокол, доступный для gpsd — GPS-сервиса и мультиплексора». За точность справки не ручаюсь, но программа быстро запускается и оставляет хорошее впечатление.

2015-09-25-081015_1280x800_scrot 2015-09-25-081154_1280x800_scrot

 

GpsPrune — Просмотр, правка и конвертация GPS-треков. Из приятного присутствует возможность синхронизации треков с фотоснимками и аудозаписями и трехмерная визуализация данных. В качестве подложки программа использует openstreetmap.

2015-09-25-081421_1280x800_scrot

 

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

2015-09-25-082132_1280x800_scrot 2015-09-25-082235_1280x800_scrot 2015-09-25-082426_1280x800_scrot

 

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

2015-09-25-082812_1280x800_scrot

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

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

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

2015-09-25-084055_1280x800_scrot

 

viking — Небольшая программа для работы с gps-данными. Я ее не использовал, но впечатление от знакомства с ней положительное.

2015-09-25-084813_1280x800_scrot

 

Инструменты для работы с геоданными

GeoKettle — Свободный аналог программы FME.  Такая хреновина над которой надо месяц сидеть не отходя от компьютера дальше чем на пару метров. А потом еще месяц. А потом еще полтора. Но оно того стоит. Программа решает ваши проблемы извлечения и «умной» трансформации данных. Я не готов судить, насколько хороша она в сравнении с FME, но вникнуть в нее наверняка стоит.

2015-09-25-085138_1280x800_scrot 2015-09-25-090013_1280x800_scrot

 

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

2015-09-25-090527_1280x800_scrot

 

IPython Notebook — «Интерактивная оболочка для языка программирования Python, которая предоставляет расширенную интроспекцию, дополнительный командный синтаксис, а также подсветку и автоматическое дополнение кода.» — дальнейшее описание можно прочесть на хабре. У меня все-равно эта программа ничего путного не сделал, если не считать новой вкладки в браузере.

Mapnik — Набор инструментов для рендеринга карт. Если все сделать согласно хелпу, получится вот такая простенькая карта:

2015-09-25-091929_1280x800_scrot

 

MapSlicer — «Нарезатель карт». Запускаете программу, выбираете картографический движок, изображение, проекцию и всякую иную требуху и получаете на выходе растр нарезанный на тайлы и прикрученный к движку гугла или OpenLayers. Для использования гугловского движка потребуется некоторое знание API Google. Если вам необходимо опубликовать растровую карту в сети используя самый простой и открытый способ — используйте MapSlicer.

2015-09-25-092241_1280x800_scrot 2015-09-25-092438_1280x800_scrot

Слайсер

 

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

2015-09-25-102744_1280x800_scrot

 

OSSIM-geocell — Работать с этой программой надо так: 1. кликаете по ярлыку. 2. переходите к другим делам, поскольку после клика все-равно ничего не произойдет.

R — Библиотека для статистического анализа. Работа осуществляется через командную строку.

2015-09-25-104739_1280x800_scrot

 

TileMill — Известная программа от MapBox для визуализации геоданных с помощью CartoCSS. Работает без нареканий, разве что очень долго запускается, но у TileMill это стандартная проблема.
2015-09-25-110134_1280x800_scrot

 

Веб-сервисы

52°North SOS — Сервис сенсорного наблюдения. Предназначен для чтения оперативных и архивных данных с локальных и удаленных сенсоров. Сенсором может выступать камера на спутнике или измеритель уровня воды в реке. Реализует стандарны SOS 1.0.0 и 2.0.0. Клиентское приложение для браузера предоставляет тестовые XML-запросы для всех поддерживаемых операций.

Довольно специфический сервис. Судить о его качестве не берусь, но для доступа к нему необходим логин и пароль, который в файле «password.txt» отсутствует.

 

52°North WPS — пакет, экспортирующий в веб алгоритмы обработки пространственной информации, которые предоставляет Sextante, ArcGIS Server, R, GRASS 7 или пользовательские функции. Алгоритмы могут быть простыми, как, например, подсчёт разницы заболеваемости гриппом для разных сезонов, так и сложными, как, например, глобальная модель изменения климата.

2015-09-25-112852_1280x800_scrot 2015-09-25-112950_1280x800_scrot

 

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

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

GeoServer — Сервис обработки геоданных для последующей выдачи клиенту. После запуска появляется прогресс-бар, по истечении которого браузер выдает 404 ошибку. Кстати, такую-же ошибку выдает и ссылка с официального хелпа.

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

2015-09-25-120435_1280x800_scrot 2015-09-25-120039_1280x800_scrot

 

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

EOxServer — Это фреймворк на языке Python для отображения ДДЗ Earth Observation (EO) и их метаданных.

2015-09-25-122022_1280x800_scrot 2015-09-25-122135_1280x800_scrot 2015-09-25-122920_1280x800_scrot

 

MapServer — Написанная на языке программирования C система рендеринга географических данных, которая позволяет создавать растровые карты, ссылающиеся на веб-контент.

2015-09-25-123334_1280x800_scrot

 

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

2015-09-25-124350_1280x800_scrot

 

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

2015-09-25-130146_1280x800_scrot

 

ZOO-Project — Приложение предоставляющее веб-доступ к различным алгоритмам геообработки.

2015-09-25-131306_1280x800_scrot

 

Самые лучшие приложения.

С этими приложениями никогда не возникает проблем. Нет приложений — нет проблем.

pgRouting — Роутинг для PostGIS. Есть в хелпе, но в дистрибутиве отсутствует.

Geopublisher — Геокаталог. Есть в хелпе, но в дистрибутиве отсутствует.

AtlasStyler — Редактор стилей. Аналогично. Есть только в туториале. Впрочем, я скачал и установил два последних пакета отдельно. Мое мнение — полная хрень.

osgEarth — 3D-рендеринг рельефа. Выглядит очень интригующе. Но вместо обещанного глобуса, после команды в терминале вылезает кукиш с маслом

MB-System — Картографирование морского дна. На диске не установлен, о чем честно написано в тутоиале.

 

Итого

Невзирая на хронические траблы, OSGeo Live ощутимо развивается вместе со всем миром опенсорса. Текущий релиз, несмотря на множество негативных моментов оставляет гораздо более приятное впечатление чем версия 8.5.

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

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

Набор дефолных программ прекрасный. Но первое, что я сделаю после апгрейда, это установлю:

  • Wine
  • Gimp
  • Inkspace
  • Blender
  • FreeCAD
  • Scribus
  • Calibre
  • Мелкую домашнюю утварь вроде файлового менеджера

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

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

Мапим по гуглопанорамам — наземное фотограмметрическое картирование в QGIS с помощью плагина stereoSurveys

Read in English

Замечание 1. В данной статье не расматриваются юридические вопросы законности использования описанного метода при работе с данными компании Гугл. Мое дело метод показать, а с юристами сами разбирайтесь.
Замечание 2. Собственно, ничто не мешает использовать любые другие данные, вплоть до своих фотографий.
Замечание 3. Код описываемого ниже модуля от первой до последней строки написан Enrico Ferreguti. Мое значение в этом проекте чисто терапевтическое.

Пару месяцев назад я опубликовал пост о технологии применении снимков Google StreetView для фотограмметрического картирования территории. Этот незатейливый текст вдохновил Enrico Ferreguti (по его словам) на разработку модуля StereoSurveys для QGIS.

Основное назначение модуля — перенос контуров объектов, попавших в объектив камеры гугломобиля в точечный слой QGis. Наличие объекта с известным пеленгом на двух геопривязанных снимках позволяет однозначно установить его местоположение по свойству суммы углов треугольника. Использовать это свойство на практике возможно было и ранее, однако, только после появления StereoSurveys появилась возможность значительно сократить трудоемкость работ и увеличить точноность нанесения данных.

Для иллюстрации работы модуля, нанесем в точечном слое местоположение фонарных столбов на улице Текстильной (ХБК, город Шахты). Со спутникового снимка их не видно, поэтому единственный способ нанести их не от балды — воспользоваться описываемым методом.

0

Улица Текстильная, вдоль которой необходимо отметить фонарные столбы

1. Для начала скачиваем модуль с гит-хаба.  На тот случай, если гит-хаб закроют (твою-ж мать…) сохранил копию у себя на сервере. Последняя ссылка подойдет так-же для тех, у кого скачанный с гит-хаба архив не открывается (как у меня, например).

2. Скачанный архив необходимо распаковать в папку хранения модулей QGIS. Для windows XP это обычно C:\Documents and Settings\[username]\.qgis2\python\plugins для windows 7: C:\Users\[username]\.qgis2\python\plugins, для linux: /home/[username]/qgis2/python/plugins. Если в папке home отсутствует папка qgis2 (или .qgis2), то, возможно, у вас не отображаются скрытые файлы. В debian-подобных системах (debian, ubuntu, mint, OSGeoLive и др.) это исправляется так: правая кнопка мыши — отображать скрытые файлы.

3. Если у вас винда — обратите внимание на название папки [username]. Плагин не переносит кириллицу! Если в названии файла, проекта, плагина или пути к ним встретится русская буква, QGIS выдаст следующую ошибку:

Traceback (most recent call last):   File "", line 1, in   File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\pyplugin_installer\installer.py", line 274, in upgradeAllUpgradeable     self.installPlugin(key, quiet=True)   File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\pyplugin_installer\installer.py", line 322, in installPlugin     reloadPlugin(key) # unloadPlugin + loadPlugin + startPlugin   File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\qgis\utils.py", line 319, in reloadPlugin     loadPlugin(packageName)   File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\qgis\utils.py", line 200, in loadPlugin     msg = msgTemplate % (packageName, "', '".join(sys.path)) UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 9: ordinal not in range(128)

Для пользователей Windows 7, причина кроется как правило в том, что папка «Users» в этой системе названа как «Пользователи», кроме того, обычно кириллическое написание имеет папка  [username]. Теоретически, исправить эту беду можно создав новую учетную запись с правами администратора. Через нее следует войти завершив текущую сессию, после чего стандартным способом сменить название директорий на латиницу. Насколько это возможно и действенно, я утверждать не берусь — не проверял.

В Линуксе, как правило, папка [username] всегда может быть названа только латиницей. Поэтому, если у вас Линукс — переходите к следующему пункту.

4. Теперь можно запустить QGIS, либо перезапустить его, если он работал до этого.

В верхнем меню выбираем: модули — управление модулями-с ошибками. Ставим галку в чекбоксе stereo surveys и нажимаем установить

Снимок экрана от 2015-06-20 21_37_45

 

После установки появляется текст «Модуль неисправен invalid syntax». Презираем его и закрывая окно установки модулей.

Снимок экрана от 2015-06-20 21_37_59

 

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

Снимок экрана от 2015-06-20 21_40_00

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

Для точечного слоя, создадим шейп-файл с названием test и системой координат EPSG: 3785 (можно и EPSG: 3857 — все работает, другие датумы не пробовал).

Снимок экрана от 2015-06-20 21_42_06

 

Что-бы вернуть его в рамки окна — перетащим таблицу слоев (менеджер слоев, TOC — все его по-разному называют) в нижнюю часть экрана.

Для того, что-бы картирование было более наглядным, подгрузим слой OpenStreetMap — Mapnik, воспользовавшись плагином OpenLayersPlugin.  Это не обязательно, но очень удобно. Приблизим нужный участок.

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

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

Первое сообщение об ошибке:

Снимок экрана от 2015-06-20 21_43_57

 

Второе сообщение об ошибке:

Снимок экрана от 2015-06-20 21_44_00

 

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

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

— Непонятные числа, поля ввода и текст not calibrated слева и справа от окон с панорамами (первые два числа слева и справа — это координаты точки, в которой сделана панорама.

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

H — высота точки, взятой на прицел в обоих панорамных окнах в метрах, относительно земли;

+/- — погрешность местоположения точки, взятой на прицел в обоих окнах, в метрах;

Lon, Lat — долгота и широта;

X,Y — неизвестные прямоугольные координаты;

— Под числами, расположена кнопка с текстом, «Digitize on map», по клику на которой, точка, взятая на прицел в обоих панорамах должна переносится в точечный слой.

— В окне отображения данных QGIS, помимо OSM-карты, пользователь видит три точки: зеленую — точка из которой снята панорама в левом окне StereoSurveys, красную — точка, из которой снята панорама в правом окне и желтую — точка, взятая на прицел в обоих окнах просмотра панорам.

Можно начинать работу. Находим на обоих панорамах одну и ту же точку. Кнопка Digitize on map не срабатывает, поэтому, включаем редактирование слоя и наносим ее вручную (кликаем по желтой точке, предварительно выбрав инструмент «добавить объект»). В проекте, который идет как пример к плагину, кнопка Digitize on map работает, но тоже далеко не всегда. Этот вопрос еще необходимо прояснить.

Находим один и тот же объект на двух снимках (в нашем случае это первый фонарный столб со знаком пешеходного перехода).

Снимок экрана от 2015-06-20 21_44_18

 

Прицеливаемся поточнее и стреляем — ставим точечный объект поверх желтой точки.

Снимок экрана от 2015-06-20 21_45_02

 

Точно так-же поступаем для остальных объектов. Картирование фонарного столба на противоположной стороне улицы.
Снимок экрана от 2015-06-20 21_47_33

 

Навигация осуществляется средствами Google StreetView. «Проезжаем» на несколько метров вперед в обоих окнах просмотра панорам и берем на прицел новый столб.

Снимок экрана от 2015-06-20 21_49_59

 

Иногда, без видимых причин возникает сообщение об ошибке:

Снимок экрана от 2015-06-20 21_51_10

 

Игнорируем его и продолжаем работать дальше.

Снимок экрана от 2015-06-20 21_53_17

 

Ради интереса, попытаемся изменить числа в полях StereoSurveys. Числа ввести можно только корректные. Насколько я понял из общения с Enrico, данные поля позволяют корректировать данные о высоте точки. Первое поле отвечает за высоту камеры над поверхностью земли (2.5 метра), второе за высоту поверхности земли (по умолчанию 0). Эти параметры особенно важны в горной местности с большими перепадами высот и при картировании объектов, находящихся на большом удалении от точек съемки панорам.

Не отвлекаемся и стреляем столбы дальше.

Снимок экрана от 2015-06-20 21_58_20

 

Процесс захватывает.

Снимок экрана от 2015-06-20 22_00_02 Снимок экрана от 2015-06-20 22_04_23 Снимок экрана от 2015-06-20 22_08_46 Снимок экрана от 2015-06-20 22_09_57

 

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

Еще точечку.

Снимок экрана от 2015-06-20 22:13:22 Снимок экрана от 2015-06-20 22:23:21 Снимок экрана от 2015-06-20 22:25:19

 

В результате, мы получаем точечный слой, который планировали. После нанесения всех точек, закрываем модуль и сохраняем полученный слой. Иногда, после закрытия модуля красная и зеленая точки (точки съемки панорам) не исчезают, в этом случае, необходимо отключить модуль через меню-модули-управление модулями-снять галку с чекбокса напротив StereoSurveys и нажать «Закрыть».

Любопытный момент: обычно, снимки привязывают к gps-трекам. Я за всю Одессу говорить не буду, но в OpenStreetMap так и происходит. Думаю в Google тоже. При этом трек рассматривается в качестве центра дороги, что частично верно только для проселочных колейных дорог. Игнорирование понятия полосы дороги, приводит к системной ошибке в координатах до 5 метров (обычно +/- 3 м). Сама по себе, это величина небольшая, часто незначительная на фоне погрешности прибора. Однако, в том случае, если координаты объекта используются для расчетов детерминированных показателей, ошибки могут быть колоссальны. Это категорически запрещает использование популярных веб-проектов для расчета площади секторов, лежащих в створе с известными координатами, анализа видимости объектов, привязки объектов по двум точкам…, боюсь, этот список может оказаться длинным.

Обратите внимание на местоположение фонарного столба на улице Ворошилова.

Карта OpenStreetMap — столб стоит на дороге.

Снимок экрана от 2015-06-20 22:31:49

 

Карта Google. Аналогичное местоположение столба. Так-же, обратите внимание на местоположение дороги, относительно столбов освещения.

Снимок экрана от 2015-06-20 22:31:14

 

Загадка. В какую сторону ехал гугломобиль, если дело происходит в стране с правосторонним движением?

Снимок экрана от 2015-06-20 22:30:49

 

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

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

Снимок экрана от 2015-06-20 22:27:30

 

А вот, та же карта, полученная два месяца назад вручную. Ошибки нанесения (дублирование столбов) — налицо.

9

 

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

- Не работает с кириллицей;
- Не хватает угла обзора панорам как в модуле go2streetview;
- Возникает ошибка при попытке переместить точку на карте;
- Не работает кнопка Digitize on map;
- Плагин не реагирует, когда на обоих экранах одинаковый снимок (должно высвечиваться предупреждение);
- Не высвечивается предупреждение, если погрешность больше заданной величины;
- При запуске модуля должны отображаться снимки из текущих координат экстента;
- При наличии таблицы слоев, модуль выходит за размеры экрана;
- Не исчезают точки после закрытия плагина;
- Нет явного объяснения значения чисел и полей ввода в плагине;
- Много времени уходит на масштабирование снимков, не хватает кнопки "сбросить увеличение";
- Не хватает кнопки "назад" для каждого из окон панорам;
- Не хватает кнопки "вперед", перемещающей обе точки;

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