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

javascript

Позднее Ctrl + ↑

Разделяй и оптимизируй

Владимир Агафонкин давно рассказывает про библиотеку geojson-vt: она нарезает большие файлы GeoJSON на векторные тайлы прямо в браузере (или на сервере, или в нативном коде для смартфонов). Это часть большого стека отрисовки всего в виде векторных тайлов (Mapbox GL JS), про который автор делал много одинаковых докладов в первой половине года.

Что он сейчас сделал впервые — это написал статью про то, какие алгоритмы и решения делают geojson-vt таким быстрым. Вдумчивого чтения там на полчаса, хотя суть укладывается в список в середине: искать подходящие алгоритмы, не делать ненужного, лишнее удалять, и самое главное — профилировать каждую операцию. По сути, то же, что было в Leaflet, но результат куда эффектнее: сотни мегабайт данных обрабатываются пару секунд и отображаются почти мгновенно. Правда, видеозаписи этого чуда найти проще работающих примеров.

 2 комментария   2015   javascript

2014

Это был странный год, который проще определить через то, чего в нём не было.

  • Не появилось нового редактора, и старые качественно не улучшались. Никто не выпустил качественно новых плагинов для JOSM. В iD до сих пор нет поддержки сервера смещений. Меркартор жыв: недавно один его пользователь утянул петербуржский перекрёсток в Африку.
  • Никто не взялся даже за планирование API 0.7. Была пара дискуссий в рассылках и EWG, с предсказуемым «хочешь — сделай». Понятно, что новый API полностью уйдёт с Rails на cgi-map. Понятен начальный фронт работ, но заняться этим банально некому. Всё и так работает, неинтересно. А для остального есть Overpass.
  • Несмотря на постоянные «почти готово», в прошлом году не вышла ни одна «мажорная» версия Leaflet. Раньше Владимир делал по 2-3 релиза в год. В грядущей 1.0 поменяется модель тайловых и векторных слоёв и работа с проекциями. На прошлой неделе автор призвал всех участников разработки поднапрячься и выпустить хотя бы бету в этом месяце.
  • Mapbox так ускорялся, что перешёл на сверхсветовую скорость, и пропал из поля зрения обычного человека. TileMill во второй версии перешёл на платную модель хранения тайлов, и из-за сложности настройки векторных тайлов толку от самостоятельной сборки исчезающе мало. Компания бешено набирает людей, уже даже просто так, помапить. Образно выражаясь, конечно: недовольная скоростью обрисовки американских городов, она задействует открытые данные и специалистов по импортам. Всё лучше, чем импорты исподтишка, какими балуются некоторые русские компании.
  • Мы очень хотели изменений в Совете OSMF, но не срослось: только отвлекли его участников спорами на месяц. Он продолжает свою полуоткрытую работу, 16-17 февраля они встретятся вживую, и кто-нибудь даст кому-нибудь по лицу, если повезёт. Под шумок Хэнк тянет с выбором места проведения SotM 2015 из двух вариантов. Неопределённость и закрытость — кажется, имманентное свойство Совета.
  • Конечно, новый OWL так и не закончен, а старый никому не интересен. Единственным средством слежения за правками остаётся Who Did It, который я делал как временное решение, не ожидая, что он будет актуальным и через два года. Ладно хоть Achavi сделал просмотр ченджсетов веселее.

И хотя никаких технических прорывов не произошло, год был богат на неожиданности.

  • Главной из которых, конечно, стала карта национального поисковика «Спутник», полностью завязанная на OpenStreetMap и данные в PD.
  • Затем Mail.Ru Group купил белорусскую команду Maps.me и вывез её в Москву. Затем устроил аттракцион щедрости, сделав приложение бесплатным. И, наконец, убил собственную онлайн-карту, заменив страницу ссылкой на Maps.me.
  • Обычно работы многочисленных студентов с Google Summer of Code медленно покрываются пылью, но в этом году всё наоборот: у нас был только один человек, но тем, что он написал, пользуются сотни осмеров. Да, комментариями к ченджсетам. И они даже года не провисели в пул-реквестах: благодаря шумихе в OSMF, их быстро влили в сайт. Чаще бы выборы.
  • Не появился второй новостной блог, но проект WeeklyOSM с сентября стабильно переводит немецкие новости на восемь языков (есть добровольцы на русский?), а во вконтакте выросло несколько осмосообществ с очень активными ведущими: псковское, курское, самарское. Ещё у нас летсплеи по JOSM делают, это вообще космос. И радио.
  • Мы редко выбирались на картовстречи в этом году, но качество проведения онлайн-встреч выросло неимоверно: вспомнить крымскую, например, или серию мероприятий Missing Maps. Такие встречи вербуют в OSM сразу кучу картографов, и о них широко пишут в крупных газетах (не в России, увы). И по теме вербовки — мы впервые с 2011 года пришли в школу и показали детям редактор карты. Скоро ещё пойдём.

Отсутствие громких новостей непривычно: ни перелицензирования, ни нового редактора — но именно такой год показал, как бурно прогрессирует OSM в мелочах. Вместо одного лидера обнаружились сотни мапперов, программистов и писателей, неукротимо двигавших все аспекты проекта. Чёрт возьми, OpenStreetMap действительно неостановим.

Две тысячи пятнадцатый будет годом больших игроков: Mapbox и Telenav в Штатах, Спутник и Mail.ru в России. Как бы мне ни хотелось завести старую сказку про редакторов и программистов, осенью стало особенно ясно, что направление развития задают не участники, не OSMF и не Совет, а те, кто вкладывает в OpenStreetMap деньги и рабочее время. Принцип do-ocracy повернулся неожиданной стороной, и большинству участников только предстоит осмыслить, хорошо это или вредно. Год обещает быть интересным.

Зрелищного видео правок за год никто не сделал, но Дмитрий Афонин прислал отличную картинку, которая и показывает, чего мы добились (это не уникальная карта, а целая серия), и напоминает о первом принципе проверки открытости (распечатать и продать), и намекает на тренд будущего года, когда ввиду обстоятельств люди в России начнут понимать, где в OSM деньги.

 3 комментария   2015   javascript   mapbox   mobile   блоги   штосм

Он снова здесь

Помните, когда-то в древности была такая библиотека — OpenLayers? В своё время технологический прорыв, она выросла в большого некрасивого монстра, которым пользовались, скорее, от отсутствия альтернатив и от действительно хорошо оттестированного движка, работавшего даже на безнадёжно устаревших браузерах, вроде Opera. Последнее немного затормозило распространение Leaflet (и я был в числе недовольных, когда он захватил osm.org), но ненадолго: теперь библиотекой OpenLayers пользуются либо бородатые ГИС-программисты, либо новички, по несчастью наткнувшиеся на слишком старый учебник.

Две недели назад многолетняя работа по осовремениванию движка завершилась выпуском версии 3.0.0. На сайте, к сожалению, нет учебника, кроме несуразного quick start (прошлая версия тоже страдала отсутствием вменяемой документации), потому создаётся впечатление, что получилось стильно, кратко, молодёжно: даже скрипт библиотеки теперь называется ol.js. В анонсах упор делают на WebGL и трёхмерные карты, хотя в примерах их непросто найти. Если погрузиться в справочник, всплывают страшные конструкции, вроде ol.control.defaults().extend({...}) для банального добавления элементов управления, и понимаешь, что проще не стало.

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

  • чтобы написать шесть строчек кода, нужно прочитать пару десятков страниц документации по API: примеры и учебник только запутают;
  • А-А-А-А! нажмите Alt+Shift и подвигайте карту! Включено по умолчанию!
  • надеялся, что за это время в команде появился дизайнер, но нет: все элементы интерфейса так же неприглядны;
  • по умолчанию прячут копирайты под значок — что в своё время не сошло с рук MapBox-у;
  • снова чехарда с проекциями, но полегче: не нужно создавать кучу вспомогательных классов;
  • потому что многие константы и объекты можно заменить простыми строками;
  • не lat-lon, а lon-lat, как у взрослых;
  • снова тысяча мелочей из коробки, вроде библиотеки слоёв, экспорта в PNG, разбора OSM XML, кластеринга и heatmap-ов;
  • несмотря на обещанный «high-quality documentation», хорошо выглядит только справочник по API, да и то — до первого вопроса про типы параметров функций;
  • дробный масштаб — не для солидных людей, судя по отсутствию простого способа его включить;
  • надеялся на функциональный аналог Leaflet.draw, но его нет;
  • боюсь представить, как к библиотеке пишутся плагины;
  • интерактивная карта на главной openlayers.org — самая узкая, что я когда-либо видел.

В целом, здорово, что OpenLayers жив. Он — необходимый противовес Leaflet, почти полная противоположность: подтормаживает, сложный и насыщенный API (хотя файл js больше всего в три раза), разработчиков команда, версия больше нуля. Поначалу эта заметка должна была быть негативной, но когда разбираешься, как и зачем сделаны некоторые непривычные вещи в библиотеке, понимаешь объём проделанной работы, её суть и адресатов. Пока не стоит бежать переписывать на неё все свои проекты, но после пары минорных релизов и выпуска документации OpenLayers, без сомнения, пошатнёт позиции Leaflet как «монополиста» в пользовательской картографии.

 8 комментариев   2014   javascript

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

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

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

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

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

 4 комментария   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.

 2 комментария   2014   javascript   josm
Ранее Ctrl + ↓

Мнения, высказанные на этом сайте, отражают точку зрения лично автора сайта и ничью больше: ни его бывших или настоящих работодателей, ни семьи и знакомых.