Без команд
Вы слышали о плагине CommandLine для JOSM, написанный Hind-ом: он позволяет запускать любой внешний скрипт, передавая ему часть редактируемых данных и другие параметры. Его непросто настроить, и он отгрызает от карты две строки. Для плагина на языке Python написана пара десятков команд, в основном для работы с геометрией. Альтернатива — писать свой плагин для JOSM, или дополнять существующий, что несколько сложнее (хотя и полезнее в перспективе).
Но у нас открытый проект, а значит, есть третий путь. Зачем устанавливать какие-то дополнительные программы, когда в Java включён полноценный интерпретатор JavaScript? Плагин Scripting задействует его на полную: писать обработчики данных можно на любом поддерживаемом языке, включая Python, Ruby, Groovy и даже Lisp, при этом доступна вся внутренняя инфраструктура JOSM. То есть, не нужно заново изобретать парсер файлов OSM, и можно встраивать функции в интерфейс: например, добавлять пункты в меню и кнопки на панель инструментов, обрабатывать новые форматы файлов, запускать сложные интерактивные процессы вроде склеивания линий с учётом тегов и отношений.
В этом месяце на scripting обратил внимание участник bdiscoe, взявший приз в американском забеге картографов. Для быстрой обработки дорог он сделал кнопки добавления тегов, которые повесил на комбинации клавиш (это можно было сделать и пресетами, но скриптом — интереснее). Другие примеры использования куда мощнее: например, в 2011 году severality опубликовал скрипт для создания отношений по белорусской схеме адресации. На питоне пишут внушительные валидаторы: веломаршрутов и всего остального.
Плагину в январе исполнилось три года, его поддерживает один человек — Карл Гуггисберг. Это один из примерно десятка плагинов, исходники которых лежат вне SVN OpenStreetMap, поэтому авторы JOSM не могут незаметно их поправить после очередного волюнтаристского слома API. А сторонние люди не могут взять и удалить все исходники, как когда-то случилось с no_more_mapping. Единственное, что останавливает других авторов от побега, — отключение от системы централизованной локализации через launchpad.