MAP_PROVIDERS.md 4.4 KB

Провайдеры онлайн-карт для РФ

Критерии выбора

  • Работоспособность в России (не заблокированы)
  • Схематический стиль (не спутник)
  • JavaScript API для встраивания в веб
  • Бесплатный тариф для старта
  • Производительность и кастомизация маркеров

Варианты

1. Яндекс Карты (Яндекс JS API v3)

Характеристика Значение
Статус в РФ ✅ Работает
Схематический стиль yandex#map + кастомные стили
Бесплатный тариф ✅ 10 000 запросов/сутки, дольше 30 дней — от 300р/мес
Гео-поиск ✅ Встроенный поиск по адресам РФ
Маркеры ✅ Кастомные, кластеризация, балуны (PlaceCard)
Ограничения ❌ Работает только в РФ и СНГ
API JS API v3, HTTP API геокодера

Вердикт: основной провайдер для РФ

  • Нативная поддержка российских адресов
  • Хорошая документация на русском
  • Простая кастомизация балунов под PlaceCard
  • Определение региона пользователя через JS API

2. MapLibre GL JS + OpenStreetMap

Характеристика Значение
Статус в РФ ✅ Работает (через любые тайлы)
Схематический стиль ✅ Кастомный style.json (можно сделать схематичным)
Бесплатный тариф ✅ Open Source, бесплатно
Маркеры ✅ Кастомные, кластеризация
Поиск адресов ❌ Нужен отдельный сервис (Nominatim или DaData)
Тайлы MapTiler, Geoapify, или self-hosted

Вердикт: резервный / международный провайдер

  • Работает где угодно
  • Требует больше настройки
  • Для РФ нужен тайловый сервер с российскими тайлами (NextGIS, Geoapify)

3. 2GIS Карты

Характеристика Значение
Статус в РФ ✅ Работает
Схематический стиль
Бесплатный тариф ✅ До 50 000 запросов/мес
API JS API (онлайн), Map API (мобильные)
Маркеры ✅ Кастомные
Детализация РФ ✅ Отличная

Вердикт: альтернатива для РФ, но API менее гибкий чем Яндекс

4. Leaflet + OpenStreetMap (через прокси)

Характеристика Значение
Статус в РФ ✅ Работает
Схематический стиль ⚠️ Зависит от тайлов
Бесплатный тариф
Маркеры ✅ Через плагины

Вердикт: слишком базовая, многое нужно делать руками


Итоговая стратегия

Определение страны пользователя
├── РФ / СНГ → Яндекс Карты JS API v3
└── Остальной мир → MapLibre GL JS + OSM (MapTiler)

Определение региона (Geo-detection)

  1. Backend: заголовок Cloudflare CF-IPCountry или база GeoIP в Redis
  2. Frontend: Intl.DateTimeFormat().resolvedOptions().timeZone как запасной вариант
  3. Ответ API при загрузке страницы: { map_provider: "yandex" | "maplibre" }

План внедрения

  1. MVP: только Яндекс Карты (первый запуск только в РФ)
  2. V2: добавить MapLibre для международных пользователей
  3. Держать оба провайдера под одним интерфейсом через абстракцию MapAdapter