Вы на самом деле довольно редкое исключение. Например, за три года работы в CloudMade я ни разу (!) не встретил практического применения WMS в каком-либо стартапе, популярном веб-сайте или веб-приложении — всё, что встречалось, относилось сугубо к научно-исследовательской сфере. Подавляющее большинство применений сводятся в итоге к простой тайловой карте с маркерами, полилайнами/полигонами и попапами.
Для более сложных вещей пускай народ пишет плагины, а Leaflet пускай остаётся максимально сконцентрированной на самых простых и необходимых вещах.
Ну не такое уж и редкое. У нас несколько приложений построено на базе OL + WMS. WMS очень удобен чтобы рисовать много данных - сервер генерит картинку быстро, а клиенту надо только её показать. Рисование векторных данных средствами JavaScript хорошо только в ограниченых пределах.
Сейчас вот делаем портал для простых юзеров, на котором можно будет мониторить автобусы/троллейбусы/трамваи по всему Питеру. Пока не вижу альтернативы WMS-у для показа их на карте (несколько тысяч отметок в перспективе и чтоб не тормозило при показе). Была бы у вас поддержка - могли бы попробовать встроить, маленький размер скрипта тут важен.
Мне не нравится сложность спецификации WMS. Скажем, для рисования данных картинками с помощью тайл-сервиса достаточно просто условиться насчёт проекции (скажем, стандартный гугл меркатор) и URL-шаблона для тайлов, и добавить на карту с помощью обычного TileLayer — это просто и легковесно. Аналогично если это картинка по текущему bbox-у, а не тайлами - обычный ImageLayer и вручную обновлять на moveend.
Попробую разобраться с WMS, возможно напишем плагин. Или кто-то напишет в качестве контрибьюшна.
Ну, вам же не сервер писать. Для клиента там ничего сложного. Просто сформировать get-запрос нужными параметрами и отобразить картинку, пришедшую в ответ. Посмотрите OpenLayers.Layer.WMS - там кода всего ничего.
var MyIconClass = L.Icon.extend({
iconUrl: ‘…’,
shadowUrl: ‘…’,
iconSize: new L.Point(…),
shadowSize: new L.Point(…),
iconAnchor: new L.Point(…),
popupAnchor: new L.Point(…),
});
var myIcon = new MyIconClass();
var marker = new L.Marker(latlng, {icon: myIcon});
Кластеризация наверное будет частью следующей версии Web Maps API, которая будет переписана на ядре Leaflet (вместо с роутингом, геокодингом, всякими виджетами и т.д.).
Да, по задумке Leaflet будет оставаться минимальной библиотекой с самыми основными функциями, в то время как Web Maps API - полным набором функциональности для поддержки всех сервисов CloudMade и дополнительными фичами.
Пока не смотрел, но есть дежурные вопросы:
с RequireJS библиотека совместима?
Можно ли написать плаги и встроить при помощи require или другой либы с зависимостями?
Насколько легко подписаться на события, чтобы обновлять данные в странице?
Роутинга нет?
Как делать свои стили кнопок? (хочу выбор слоёв как в гугле)
Можно ли сделать оверлей невидимым в выборе слоёв, но включать и выключать его по событиям?