Помните, когда-то в древности была такая библиотека — 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 как «монополиста» в пользовательской картографии.