Leaflet — новая JavaScript-библиотека для карт от CloudMade

Реализовал WMS в первом приближении (пока что поддерживает только EPSG 3857 / 900913), сегодня-завтра закоммичу. :slight_smile:

update: пробуем, https://github.com/CloudMade/Leaflet/commit/5a45784d6ad9b13681dde25ddfba204256aee9c6

Кластеризация объектов планируется? Для меня - единственное, чего сейчас не хватает, чтобы перейти с клайдмейдовской же web-maps-lite…

Кластеризация наверное будет частью следующей версии Web Maps API, которая будет переписана на ядре Leaflet (вместо с роутингом, геокодингом, всякими виджетами и т.д.).

То есть Web Maps API будет продолжать развиваться? Я уж решил, что Leaflet должен ее заменить…

Да, по задумке Leaflet будет оставаться минимальной библиотекой с самыми основными функциями, в то время как Web Maps API - полным набором функциональности для поддержки всех сервисов CloudMade и дополнительными фичами.

Будет ли измерение длин/площадей?

В основном коде вряд ли, но в качестве маленького плагина — было бы неплохо!

Сделал!
Пример с подробным описанием: http://leaflet.cloudmade.com/examples/custom-icons.html
Документация: http://leaflet.cloudmade.com/reference.html#icon

Пока не смотрел, но есть дежурные вопросы:
с RequireJS библиотека совместима?
Можно ли написать плаги и встроить при помощи require или другой либы с зависимостями?
Насколько легко подписаться на события, чтобы обновлять данные в странице?
Роутинга нет?
Как делать свои стили кнопок? (хочу выбор слоёв как в гугле)
Можно ли сделать оверлей невидимым в выборе слоёв, но включать и выключать его по событиям?

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

map.on(‘moveend’, function() { … }), например. Очень просто.

Это клиентская библиотека, а роутинг - серверная штука. Можно прикрутить любой с помощью JSONP API. Например тот же клаудмейдовский.

Можно добавлять в качестве контролов любые DOM-элементы и стилизовать как хочется.

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

а чем новая библиотека отличается от существующей CloudMade Webs API?

Полностью переписана для хорошей поддержки мобильных устройств, хардварной акселерации и т.д., серьёзно переработан API, архитектура кода и много чего другого.

Задам общий вопрос для собственного развития. Как можно задействовать хардварную акселерацию?

Для быстрого, аппаратного выполнения трансформаций и анимаций в браузере, таких как паннинг карты, плавный зум и т.д. Попробуйте сравнить то, как работает Leaflet на iPhone или iPad, с каким-нибудь OpenLayers.

Mourner, я спросил не для чего - а как можно задействовать акселерацию. Спрашиваю для собственного развития. Есть какие-то специальные расширения javascript?

Использовать CSS3 3D Transforms вместо стандартного позиционирования с помощью position: absolute + top/left, и CSS3 Transitions вместо запрограммированной по таймеру анимации. Но с этим есть много нюансов.

Mourner, а если через canvas тайлы отрисовывать? Что будет быстрее canvas или CSS3 3D Transforms+Transitions. Естественно речь о случаях, где и то и другое поддерживается?

Исходя из моего опыта, canvas будет существенно медленнее. Уже кстати есть такие реализации (tile5 например).

Mourner, ты CSS3 3D Transforms. Не понимаю, как тут 3D задействовать.

2D Transforms - понятно, карта плоская.
А для чего именно используется 3D Transforms?

Особенность iOS на мобильных девайсах в том, что аппаратное ускорение графики включается только при 3D-композиции. Для этого вместо 2d-трансформаций используют 3d с нулевой z-координатой. Например, -webkit-transform: translate3d(20, 20, 0) вместо translate(20, 20).