35 заметок с тегом

javascript

Ctrl + ↑ Позднее

Новейшая история

Перед европейской конференцией, в начале июня, Роланд анонсировал в talk@ несколько нововведений в Overpass API. Первое — дополненные диффы, которые копились на сервере с сентября 2012 года, теперь генерируются на лету. Помимо освобождённого терабайта, это позволяет фильтровать диффы запросами Overpass: например, получать их для выбранной области.

И раз сервер теперь помнит историю, почему бы не добавить соответствующие запросы — к «чердаку», как называет это Роланд? Дописав в начало [date:«2014-07-11T08:00:00Z»]; (с обычными кавычками), получите данные из этого дня, как если бы делали запрос неделю назад. Разумеется, есть аналогичный запрос на разницу между двумя датами. Автор предупреждает, что из-за глюка в обновлениях данные до 2 июня временно ненадёжны.

Норберт Реннер по такому случаю вернулся к своему визуализатору правок Achavi. Старая версия давно живёт на overpass-api.de, а новая — на гитхабе автора. Она не спешит качать диффы, а предлагает приблизить интересующее место и нажать кнопку «load» слева вверху. Через несколько секунд вы увидите визуализированные правки за последние сутки. Границы временного интервала можно поменять.

И, впервые в проекте, можно визуализировать произвольный ченджсет без многочасового ожидания в очереди, просто добавив к адресу ?changeset=123456. Да что там, держите букмарклет: Changeset (перетащите в закладки). Он не покажет отношения, чтобы не замусоривать карту; для этого добавьте &relations=true. Напомню, что тёмно-красным отображается старая геометрия сдвинутых объектов. Теперь ожидание нового OWL станет менее томительным.

2014   javascript   overpass

Без команд

Вы слышали о плагине 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.

2014   javascript   josm

MapBBCode Triumphant

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

[map=13]60.35371,29.43958(Внезапно,); 60.35761,29.42963 60.35141,29.4298 60.35141,29.44868 60.35778,29.44885 60.35761,29.42945[/map]

MapBBCode Loader — это небольшой скрипт, который ищет на странице bb-код карты, и если находит, подгружает библиотеки Leaflet и MapBBCode, после чего заменяет все коды картами. Заодно он вешает на специально обозначенную кнопку редактор карты. Другими словами, это замена полноценным плагинам для движков, в которые сложно встроить MapBBCode правильно.

Собственно, если скопировать следующий код в адресную строку (в FF не работает, в IE и хроме нужно дописать «javascript:» руками), отработает загрузчик, и вы увидите карты на открытой странице. Проверить можно на примерах в спецификации bb-кода.

javascript:(function(){document.body.appendChild(document.createElement(’script’)).src=’http:/’+’/osmz.ru/mapbb.plain.js’;})();

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

2013   javascript

The best map library you’ll see ALL DAY

Казалось, новую версию Leaflet никто не ждёт: 0.6.4 оказалась достаточно хороша для всех, и едва ли кто-нибудь тут натыкался на её баги. Тем не менее, только что Владимир выпустил Leaflet 0.7. Визуально эту версию не отличить от предыдущей, но программистам она удобнее: например, пропала необходимость подключать отдельный стиль для Internet Explorer. И появился оверзум: если у какого-то слоя недостаточно уровней масштаба, не беда. В полном списке изменений, неожиданно, нового лишь слегка меньше, чем багфиксов, а в планах на версию 0.8 фичи отсутствуют: только рефакторинг, документация и рефакторинг.

2013   javascript

Карты для всех, даром

На форуме «Проекты Петербурга» обсуждают, в основном, дорожное строительство. Где ремонтируют, где перекрыли, где прокладывают (или уже отменили) новое шоссе. С локализацией темы обсуждения всегда проблемы: «53-81 км — это где?» Пять лет назад нормальным было дать ссылку на карты яндекса или вставить картинку, но XXI век на дворе, лифлету недавно три года исполнилось, почему нельзя просто вставить карту? Почему на местном велосипедном форуме дают ссылки на монструозный gpsies, а марафонщики до сих пор скриншотят пираченный OziExplorer?

Будучи программистом, я постоянно чувствовал, что вся эта дремучесть технологий — моя вина, но только месяц назад взялся за решение задачи. Несмотря на комментарий к коммиту от 1 октября «almost final», и через три дня — «вероятно, последний коммит», разработка идёт до сих пор, но помня об изречении, что дела нельзя закончить, можно лишь прекратить, сегодня я объявляю о выходе версии 1.0 библиотеки MapBBCode: элементарного способа встроить рисование и отображение карт во что угодно.

Основой встраивания стал bb-код [map]...[/map], внутри которого описываются объекты карты. Это простая строка текста, которую можно скопировать куда угодно или редактировать вручную. Функционально это упрощённый GeoJSON. Небольшая javascript-библиотека превращает его в карту на Leaflet и позволяет править не подбором цифр, а рисуя на карте. Посмотреть на неё в деле можно на сайте проекта. Там же есть ссылки на модули для форумов phpBB: в понедельник «Проекты Петербурга» первыми встроили карты, на очереди — велофорумы. Когда-нибудь, надеюсь, библиотеку встроят в vBulletin, SMF, WordPress и MediaWiki.

Как пример использования библиотеки, родился сайт MapBBCode Share. Идея проста: если хранить строки в базе, получится неплохой сайт для обмена картами, простой и доступный, как pastebin или imgur. А из окошка просмотра кода можно скопировать текст на форум, его поддерживающий (или наоборот). Образ сайта в голове начал потрескивать, когда ГИС-Лаб воспользовался сервисом для планирования картовстречи, выложив ссылку на редактирование в открытый доступ. А затем я добавил импорт и экспорт в десяток форматов, библиотеку кодов (чтобы не нужно было хранить закладки локально) и API. Оказалось, что обмен картами — лишь малая часть открывшихся возможностей.

Теперь можно планировать маршрут поездки вместе с друзьями, расставить маркеры, затем поместить карту на форум, и за день до выезда участники прямо из форума загружают GPX с вейпоинтами. Можно импортировать CSV (алгоритм определения его формата эпичен) и сразу получить HTML без внешних зависимостей. Никаких iframe — в отличие от всех остальных сайтов, MapBBCode Share выдаёт полноценную страницу без ссылок на себя. Загрузка треков, сгенерированных роутером OSRM, быстрое редактирование poly-файлов и неминуемый экспорт в GeoJSON — сайт конкурирует не только с geojson.io и uMap, но даже с JOSM. Безопасность на высоте: логин через OpenID (гуглояндексы подходят), немедленно хэшируется, поэтому даже администратор не знает, кто пользуется сайтом, при этом хэш никогда не покидает сервера, API для фильтрации карт по пользователю нет.

Итог работы — более 200 килобайт кода, за 60 килобайт документации, 7 новых плагинов для Leaflet, всё под максимально свободной лицензией WTFPL. Разработка продолжается, но теперь изменения протоколируются, и автор ответственен за обратную совместимость. Пользуйтесь MapBBCode Share и встраивайте модуль в новые форумы и блоги. Сделаем [map] стандартом, а обмен картами — не более сложным, чем обмен картинками или кодом.

2013   javascript   проекты
Ctrl + ↓ Ранее