СОДЕРЖАНИЕ

Дендроплан

02.10.2017

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

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

Были разные версии того, как нарисовать основу. Например, вызвать геодезистов. Но дорого. Где-то от 100 тысяч рублей. Хотя мне кажется, что было бы сильно больше, поскольку растений около 200 штук (так мне казалось на момент написания это абзаца). Было жалко столько денег. Ещё вариант - нарисовать по GPS, который встроен в телефон. Хорошая идея, но к сожалению - крайне не точно. Попытаться нарисовать от руки – внутренний перфекционист был против. Короче это всё тянулось больше года, а решения не находилось.

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

Но в какой-то момент я догадался, что можно попробовать сделать собственную версию снимка с Google Earth, только не со спутника, а с квадрокоптера.

Поискав какое-то время квадрокоптер у друзей и поняв бесперспективность этой идеи, я обратился к тем, кто пытается этим зарабатывать. Кто-то мне подсказал сайт-торговую площадку https://pilothub.ru/. Там я узнал умное слово – ортофотоплан. Сам сайт мне не понравился, но так или иначе чьи-то контакты мне найти удалось. Я с ними связался, они сразу приехали, сразу всё отфотографировали, слили мне исходники (я заранее об этом предупредил), пообещали прислать обработанные данные, забрали сколько-то денег и уехали. Заодно сказали, что обычно обрабатывают данные с помощью AutoPano Giga.

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

Прошло несколько дней, и я получил обещанный обработанный снимок. Он был не плох, но по нему было сразу видно, что у него сильно нарушена геометрия. Снимок был склеен из 241 фотографии с высоты 60 метров. 120 мегапикселей. Середина снимка была не плоха, а вот края получили эффект фишая. Причём неравномерного фишая.

Следующим шагом мне понадобилось сделать геопривязку. Я попытался натянуть этот снимок на Google Earth. Стало понятно, что это невозможно – погрешность в некоторых местах достигала 20-30 метров. Никакой ценности в подобном плане для меня не было.

Теоретически у меня был набор неких контрольных точек, которые я мог снять со спутниковой фотографии и такие же точки снять с фотографии с квадрокоптера. Если бы мне удалось обработать фотографию с квадрокоптера так, чтобы эти точки совпали, то проблема была бы решена. Я не большой специалист в обработке изображений… Я попробовал разные варианты. Пробовал изменить геометрию в Photoshop. Пробовал склеить эту панораму заново в Photoshop. Пробовал Gimp. Пробовал PTGui. Пробовал пересобрать снимок в Autopano с разными параметрами, много чего ещё пробовал. Много времени убил. Всё было тщетно. Результат был всё равно неприемлем.

Наткнулся случайно на ГИС Компас. А в его описании наткнулся на упоминание программы предварительной обработки Agisoft Photoscan. Это очень странная программа. Программа на основании тучи фотографий одного и того же объекта с разных сторон делает его трёхмерную модель! Ну и заодно может сделать то же самое для ортофотоплана. То есть при этом она не просто клеит фотографии, а вначале расставляет их правильно в трехмерном пространстве. И это даёт ей неоспоримое преимущество перед программами типа AutoPana. Ну по крайней мере мне так показалось.

Я попытался загрузить в эту программу все три уровня фотографий, которые у меня были (съёмка была сделана с нескольких высот). Photoscan реально расставил их слоями на 40, 60 и 100 метров высоты. Каждая фотография получила луч направления, в котором она была сделана (некоторые вообще как оказалось смотрели вбок). Короче – очень странный эффект. В хорошем смысле слова.

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

Тут я вернулся к своей идее – загрузить этот снимок в Google Earth. На входе у меня уже был kmz, поэтому никаких сложностей вроде как быть не должно. Но не тут-то было.

Возможно, что я просто не смог найти в настройках AgiSoft Photoscan данных параметров. А может их там и не было никогда. Короче – геометрия снимка на выходе Photoscan была прекрасная, но вот масштаб и геопривязка оставляла желать лучшего. То есть геопривязка была, но видимо она опиралась на GPS-координаты с квадрокоптера. Какая уже там была точность – не знаю, но погрешность была 10-15 метров. И с масштабом то же самое. Надо было как-то исправлять. Но никаких инструментов для этого мне найти не удалось. Наверное, они существуют, но какой из меня картограф? Я же программист.

Ладно, действительно, я же программист.

Разобрал kmz на kml, написал парсер, который позволил мне менять масштаб снимка и точку привязки. Всё получилось относительно просто – kml состоит из тучи маленьких кусочков карты. Каждый кусочек привязан к карте посредством задачи координат каждого из его четырёх углов (широты и долготы). Масштаб меняется просто умножением всех широт на какой-то рассчитанный коэффициент. То же и с долготой. А дальше просто делаем обратную привязку по контрольной точке и всё складывается. Ну часа за 2-3 этот вопрос решился и всё наконец встало на свои места. Я получил полноценный kmz, который с погрешностью в десятки сантиметров лег на Google Earth.

Получилось очень красиво, но в целом пока совершенно нефункционально. Дальше надо было как-то это счастье перенести на мобильное устройство, с которого уже начать рисовать нормальной дендроплан. Я начал искать какое-то приложение на Android для этого. Каково же было моё удивление, когда я понял, что это задача мягко говоря не тривиальная. Видимо такое никому было особо не надо. Я пересмотрел десятка три разных приложений, в описании которых встречались нужные мне термины. Или нельзя подгрузить свою карту (работаем только с гугловой) или нет меток. Очень надеялся на OziExplorer, но и там не было праздника. Нашёл одно странное приложение - Avenza Maps. Приложение предназначено для работы с офлайновыми картами, которые и пытается продавать. Но в принципе можно загрузить свою. И есть метки.

Взялся загружать туда свой снимок. Нет, kmz на входе эта программа не захотела. Хочет GeoPDF. Ну или хотя бы GeoTiff. Попробовал подсунуть ей JPG, который может экспортировать Photoscan. JPG загрузился, но без геопривязки, так что использовать GPS было нельзя.

Надо что-то делать с этим... Ещё пара часов поисков и перебора каких-то странных программ. Нашёл. mapc2mapc. Какой-то конвертор из чего-то во что-то. Если будете использовать – ставьте сразу 64 битную версию – 32я прилично глючит на большой карте, поскольку ей явно не хватает памяти. Иногда она даже об этом говорит.

Тут, значит, ещё выяснилось, что мой kmz сформирован как-то странненько (для меня странненько). И состоит он из четырёх раздельных кусков карты (каждый из которых ещё состоит из тучи маленьких кусочков, но это я уже знал). Итого кроме конвертации нужно ещё умудриться их перед этим склеить. Но тут мне повезло - mapc2mapc согласился их ещё и склеить, пускай и в полуручном варианте.

Загрузил в телефон. Заработало!!! То есть у меня на экране снимок моего участка, есть GPS-привязка меня и метки. Это почти победа! Пошёл в сад гулять и делать дендроплан.

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

Программа хранит точки внутри себя. И фотографии тоже. Единственный способ её связи с внешним миром – импорт и экспорт. Причём только kmz-файла. Попытки как-то с этим поэкспериментировать привели к выводу о том, что эта часть Avenza достаточно сырая. Ну понять их можно – программа их вообще не для этого, а для просмотра офлайновых карт.

Из того что удалось заставить работать – можно, всё удалив, импортировать откуда-то kmz с метками (placemarks). Ну, например, c Google-диска. Дальше можно менять метки и добавлять их. Их правда раскидывает по каким-то разным папкам внутри kmz, но это потом можно руками поправить на компьютере.

Далее, после работы делаем экспорт kmz обратно на Google Drive. Ну и в принципе нормально.

А, забыл упомянуть. Фотографии. С фотографиями ничего не получилось. Avenza позволяет к любой метке привязать фотографию. Но при этом Avenza реально хранит фотографии прямо внутри kmz-файла, о котором я только что говорил. Поэтому если он будет содержать 200-500 фотографий, то его импорт и экспорт будет весьма нетривиальной задачей. Сомневаюсь, что Avenza с этим справится, поскольку уже в тот момент, когда фотографий было 10 – это стало заметно тормозить процесс экспорта/импорта. Я попытался выгрузить фотографии на внешний источник, а в kmz оставить только http-ссылки на них. Google Earth это устроило, а вот Avenza стошнилась от такого счастья. Так что тоже не вариант.

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

Зато получившийся kmz уже отлично можно просматривать в Google Earth. Очень удобно и наглядно. Хоть и без фотографий.

В целом – моя задача вроде бы была успешно решена. Но попутно ещё выяснилось, что ставить метки и подписывать растения на телефоне оказалось неудобно. Ну вот просто неудобно! Неудобно ходить по саду и расставлять растения. Нужен был другой вариант.

Тут я пошёл по более простому пути. Я распечатал на бумаге нужные мне части участка и прошёлся по саду с бумагой и шариковой ручкой. Каждое растение удалось идентифицировать и подписать. А дальше, сев с этой рукописной схемой уже за компьютер и открыв Google Earth, в которую предварительно был загружен ортофотоплан, я отметил каждое растение. В результате я получил список всех растений с названиями, и некоторые даже с примечаниями.

И всё вроде уже неплохо, но категорически не хватает многопользовательского варианта. Представьте – один человек вносит какие-то правки через Google Earth, а второй вносит правки через Avenza. В итоге у них получаются два KML/KMZ-файла, которые противоречат друг другу. Странный результат. Так оставлять данную схему было нельзя.

Как мне не хотелось этим заниматься, но я всё-таки ввязался. Начал писать. Получилась база данных с системой импорта/экспорта KML-файлов. Каждое растение занесено в базу. У каждого есть точные GPS-координаты, которые с приличной точностью идентифицируют данное растение. При импорте из предоставленного KMZ-файла достаются ещё и фотографии, которые в итоге привязываются к растению. А при экспорте – в KML попадает только URL, на систему показа фотографий растений. В этом случае объём KML-файла получается минимальным, а фотографии подгружаются по мере необходимости в онлайне. Также удалось прикрутить ко всей этой конструкции lightgallery.js, что позволило даже делать лёгкое слайдшоу в том случае, если у растения есть несколько фотографий.

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

Или возможность отметки цветом тех растений, которые ещё не отфотографированы или отфотографираваны слишком давно.

Ну а ещё, по окончанию инвентаризации оказалось, что если не считать ёлок, которых высадили в качестве живой изгороди вдоль забора, то общее число деревьев и кустарников оказалось более 900.

В общем, если не считать огромного количества потраченного времени – решение могу порекомендовать. Получилось красиво и удобно.