На днях я реализовал еще один плагин для обводки лесов и прочего, работает аналогично Scanaerial, но с некоторыми отличиями.
Во-первых он написан на Java как обычный плагин, в силу чего:
Никаких дополнительных зависимостей, кидаем джарку в plugins и включаем в настройках, в меню появляется новый пункт
Сканирование производится по кешу первого видимого Imagery слоя JOSM, поддерживается TMS/Scanex/Bing - то есть снимки повторно с сервера не выкачиваются
Для определения цвета используется не сфера в пространстве RGB, а эллипсоид, определяемый на основе распределения цветов окрестности начальной точки заданного размера (размер окрестности - vectorizer.color.area.size, по умолчанию 3 - это значит что не стоит кликать ближе чем на 3 пикселя к краю, если надо выделять маленькие области - можно уменьшить). Радиус эллипсоида по каждой из осей определяется как (3*среднеквадратичное отклонение) и дополнительно увеличивается на vectorizer.color.ellipsoid.expand
Тестировал только на IRS и Bing.
Из известных багов - может падать, если выделяется область вблизи смены уровня максимального зума снимков.
P.S. Кое-где в коде пришлось копировать куски из ядра JOSM в силу того, что они в ядре плохо доступны:
Преобразование координат тайлов в lat/lon из слоев - почему-то там поддерживаются исключительно целые координаты, хотя формула вполне допускает дробные, и обратная формула также выдает дробные.
Douglas-Peucker почему-то protected внутри команды упрощения, пришлось скопировать.
Можно сделать, но надо тогда внести ограничение на размер области, чтобы случайно не выделить всю планету. Хотя это ограничение в любом случае сделать стоит.
Из-за использование палитры проблем не должно быть, потому что цвет берется не напрямую из растра, а из BufferedImage, которая осуществляет преобразование и возвращает RGB.
Единственная проблема, которая мне видится - если цветов будет мало, то много могут оказаться за рамками 3*sigma и будут дырки в полигоне - тогда надо увеличить значение параметра vectorizer.color.ellipsoid.expand.
Вообще этот эллипсоид может быть сведен к стандартной сфере с заданным радиусом, если поставить vectorizer.color.area.size=0 - тогда не учитывается никаких пикселей кроме центрального, начальные радиусы очевидно становятся равными 0 (эллипсоид вырождается в точку), и тогда vectorizer.color.ellipsoid.expand означает радиус.
Если есть примеры такого слоя - скажите, интересно будет потестить.
Растеризованный генплан, который был изначально векторным (как вариант, jpeg
преобразуется в png только с цветами стиля векторизации с помощью gimp или imagemagick. Совсем глупый пример - карта созданная mapnik).
Импортируется в piclayer, либо просто используется WMS.
В порядке мечты: хотелось бы ограничение получаемого полигона уже имеющимися линиями дорог, лесов, озёр и т.д. (конечно с некоторым отступом от них). Напимер вот этот участок леса: сейчас его плагином не замапить т.к. выделится соседние уже замаплинные участки, да и дорогу перескочит.
А что это за участок именно? Какие координаты? Хочу посмотреть как именно перескакивает, возможно такие случаи можно решить более тонкой [авто]настройкой фильтра.
Отлично! Продвинутый java-плагин-векторизатор давно напрашивался, но достаточно сил и времени ни у кого не было…
Главное - не останавливаться на достигнутом.
Для векторизации до границ я бы предложил все (нужного типа) линии-границы обрисовать жирненько поверх временных копий битмапов (но может быть, есть решение проще).
И ещё моя мечта - полуручная векторизация (типа магнитного лассо в фотошопе), что бы вести мышкой вблизи границы, а плагин находил и рисовал эту границу…
Многие регионы нашей необъятной Родины до сих пор совершенно пустые. Например, если смотреть Хабаровский край: на юге леса отрисованы, а сервернее совершенно пусто, хотя в действительности там лесов столько, что проще отмечать, где их нет, нежели где есть. Очень хочу заняться озеленением этого региона.
В связи с этим тестирую плагин Scanaerial. Беру ярко выраженный кусок леса - здесь https://www.openstreetmap.org/edit#map=15/51.2810/136.5830 он относительно хорошо виден на снимке Bing.
Не могу никак добиться желаемого результата, играюсь с конфигом, масштабом и начальной точкой запуска алгоритма.
Прошу помощи, если у кого получится заставить плагин отрисовать этот кусок леса без залезания на реку и без огромного количества микродырок. В результате хотел бы дополнить документацию плагина (https://github.com/jonasstein/scanaerial/tree/master/doc) примерами конфига со скриншотами.
С тех пор появились несколько более годные способы http://gis-lab.info/qa/qgis-sacp-sentinel2a.html
Полуавтоматическая классификация, автоматическое скачивание данных Sentinel.
Правда, требуется QGIS. Но для какой более-менее серьезной работы с пространственными данными не нужна ГИС?
Ярко выражен этот кусок только для человека.
Если смотреть так, как этот снимок видит алгоритм, то можно заметить по средине облако, увидеть что светло-зелёный цвет леса похож на цвет травы, а тёмно-зелёный - на цвет воды. При всём этом, часть леса - темнее, часть - светлее.
Аналогом “волшебной палочки” фотошопа (а именно так работает scanaerial) это место не обработать.