А внутре у него...

Разработка iD перевалила за экватор, и подходит время документации. John Firebaugh описал в трёх статьях устройство редактора, чтобы будущие разработчики не сломали мозг, продираясь через парадигмы d3.



Первая — про хранение данных: все элементы OSM хранятся в неизменяемых объектах, которые объединены в граф, тоже статичный. Действия, вроде удаления узла, создают новый объект и новый граф, в котором часть объектов заменена новыми версиями (или удалена), а незатронутые сделаны ссылками, чтобы не выесть всю память. Такая структура называется «Persistent data structure», и восстановление её прошлых состояний тривиально.



Во второй части Джон рассказал про режимы рисования, которые влияют на поведение некоторых элементов управления (хотя с точки зрения пользователя режимов всего два: создание и изменение). Также он описал контекстные операции над объектами, и почему их список на экране должен быть неизменен, хотя не все операции могут быть применимы.



Завершается трилогия описанием системы рендеринга карты, полностью основанной на библиотеке d3. Из него я узнал, что нынче модно эмулировать классы в javascript через функции, возвращающие функции (потому что функции — это объекты). Для рендеринга данные OSM отображаются на геометрию более высокого уровня: точки, вершины, ломаные и контуры, которые затем скармливаются d3. Элементы интерфейса редактора тоже следуют конвенциям библиотеки.

В последнем абзаце автор дал ссылку на пересказ статей в гитхабе и пообещал, что он ещё не раз поменяется.
Поделиться
Отправить
2013   id
6 комментариев
Hind
> нынче модно эмулировать классы в javascript через функции, возвращающие функции

Но это ж всегда так было.
Andrew Shadura
Угу. А ещё MapCSS оттуда выпилили, вроде как.
Илья Зверев
Там его и не было, всё изначально строится на SVG и обычном CSS.
vvoovv
На заре редактора iD Ричард мне писал, что он портировал MapCSS из Потлача
Илья Зверев
Точно, я и забыл. MapCSS не пережил прихода сотрудников MapBox.
vvoovv
И кстати, выбор MapBox — CartoCSS, а не MapCSS
dkiselev
Сейчас порисовал в нем. Имхо сейчас наибольшие трудности в работе с редактором вызваны из за тормозов. Сильно заметно например при драге. Я так понял это из за того что банальное смещение реализуется через простановку атрибутов у большого числа dom объектов.
Мак Сим
Первое что меня удивило — нельзя двигать линии с помощью Drag-n-drop. То есть, чтобы передвинуть линию нужно сначала кликнуть на неё, а потом во всплывающем меню нажать на круглую иконку «Move this to a different location». То есть нужно два клика чтобы начать движение, плюс ещё один клик, чтобы «отпустить» линию в нужном месте. На удивление точки можно перетаскивать по старинке (как в Potlatche 2). Надеюсь в финальной версии логику поменяют.
Илья Зверев
Напротив, это очень хорошо. Корявые тротуары из-за потлатчеров, случайно зацепивших линию, расстраивали.