Переход на векторные тайлы

Переход на векторные тайлы

9 сентября 2025 г.

На днях завершил перевод карт на новую библиотеку и источник данных. Ранее я использовал Leaflet и растровые тайлы от всевозможных поставщиков. С ростом популярности сайта это стало проблемой - я расходовал бесплатные лимиты провайдеров тайлов слишком быстро. В июле, например, 100к бесплатных тайлов от Thunderforest, которые они выдают на месяц, закончились за две недели. Моим планом Б было переключение на бесплатные тайлы OpenStreetMap, но это только временное решение. Во-первых, эти тайлы настоятельно просят не использовать для продакшена. Во-вторых, на них используется местный язык, и в случае с Грузией немалая часть пользователей оказывается не в состоянии прочесть ни один топоним.

Классические тайлы OSM
Классические тайлы OSM

Желание управлять языком карты стало еще одной причиной смены технологий. Тайлы Thunderforest дублируют локальное название его латинизированным вариантом, но мне хотелось дать пользователям из России привычные русские названия, а также не дублировать ничего для выбравших грузинский язык на сайте.

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

В качестве провайдера я выбрал Stadia Maps. 200к кредитов (читай - тайлов) в месяц на бесплатном тарифе. Плюс векторный тайл у них, не знаю как у других провайдеров, в 4 раза больше растрового, т.е. кредиты расходуются гораздо медленнее. На данный момент мне хватает бесплатного тарифа с большим запасом. Кстати, с помощью Вебвизора я заметил, что пользователи иногда использовали карту не по назначению. Некоторые из них начинали искать свой дом в Казани или по полчаса изучали Нью-Йорк. Это вело к перерасходу тайлов, иногда были даже заметные пики на графике потребления. Так что я ввел ограничения и карту нельзя теперь пролистать слишком далеко от Грузии.

Переход на векторные тайлы дал полный контроль над стилем и языком карты. Буквально за полчаса в Maputnik получилось подготовить стили для трех языков. Заодно исправил частую ошибку многих провайдеров, которую допускают при работе с грузинским языком: в стилях подписей иногда используется принудительный uppercase, а так как в грузинском языке нет прописных букв и многие шрифты не имеют соответствующих литер, такие надписи не показываются.

Новые тайлы
Новые тайлы

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

Также я улучшил юзабилити при выборе маршрута на главной странице и полностью отказался от запросов к Overpass API на странице маршрутов. Эти запросы были реализованы как временная мера и сильно тормозили загрузку страницы.

Большая веха позади, но впереди еще много работы. Спасибо за внимание!