Alno
(Alexey Noskov)
142
Может быть кому-то будет интересно.
На днях я реализовал еще один плагин для обводки лесов и прочего, работает аналогично Scanaerial, но с некоторыми отличиями.
Во-первых он написан на Java как обычный плагин, в силу чего:
- Никаких дополнительных зависимостей, кидаем джарку в plugins и включаем в настройках, в меню появляется новый пункт
- Сканирование производится по кешу первого видимого Imagery слоя JOSM, поддерживается TMS/Scanex/Bing - то есть снимки повторно с сервера не выкачиваются
- Учитывается смещение снимков
- По моим ощущения работает быстрее
Отличия в схеме работы, возможно будут меняться:
- Картинка прогоняется через медианный фильтр (размер - vectorizer.image.filter.median.size, 0 - отключить фильтр)
- Для определения цвета используется не сфера в пространстве RGB, а эллипсоид, определяемый на основе распределения цветов окрестности начальной точки заданного размера (размер окрестности - vectorizer.color.area.size, по умолчанию 3 - это значит что не стоит кликать ближе чем на 3 пикселя к краю, если надо выделять маленькие области - можно уменьшить). Радиус эллипсоида по каждой из осей определяется как (3*среднеквадратичное отклонение) и дополнительно увеличивается на vectorizer.color.ellipsoid.expand
JAR: https://github.com/downloads/alno/josm-vectorizer/vectorizer.jar
Исходники: https://github.com/alno/josm-vectorizer
Тестировал только на IRS и Bing.
Из известных багов - может падать, если выделяется область вблизи смены уровня максимального зума снимков.
P.S. Кое-где в коде пришлось копировать куски из ядра JOSM в силу того, что они в ядре плохо доступны:
- Преобразование координат тайлов в lat/lon из слоев - почему-то там поддерживаются исключительно целые координаты, хотя формула вполне допускает дробные, и обратная формула также выдает дробные.
- Douglas-Peucker почему-то protected внутри команды упрощения, пришлось скопировать.