Та же спецификация тайлов, другой счёт.
Векторные тайлы следуют той же спецификации MVT, а документ стиля — той же схеме, поэтому сторона рендеринга переезжает переименованием. Ответы поиска и маршрутов отличаются сильнее, чем тайлы.
- Совместимость по MVT и спецификации стиля: ваш рендерер остаётся
- Isochrone ложится прямо на изохроны, включая диапазоны по расходу
- Профили грузовиков входят в базу, а не в отдельный уровень продукта
- Опубликованные тарифы вместо пакетов загрузок карты по уровням
Замена
Хост и заголовок авторизации. Всё ниже — карта параметров.
- https://api.mapbox.com?access_token=YOUR_TOKEN
+ https://api.apinavi.com
+ Authorization: Bearer $APINAVI_KEYКарта параметров
Search & navigation
| Mapbox | ApiNavi | Note |
|---|---|---|
| GET /geocoding/v5/mapbox.places/{q}.json | GET /v1/geocode?q= | — |
| GET /search/geocode/v6/reverse | GET /v1/revgeocode?at= | — |
| features[].place_name | items[].address.label | — |
| features[].center [lng,lat] | items[].position {lat,lng} | Axis order differs: GeoJSON positions are lng-first, our object is keyed. |
| GET /directions/v5/mapbox/driving | GET /v1/routes?transportMode=car | — |
| GET /directions-matrix/v1 | POST /v1/matrix | — |
| GET /isochrone/v1 | GET /v1/isolines | — |
Tiles & styles
| Mapbox | ApiNavi | Note |
|---|---|---|
| GET /v4/{tileset}/{z}/{x}/{y}.mvt | GET /v1/tiles/vector/{z}/{x}/{y}.mvt | — |
| GET /styles/v1/{user}/{style} | GET /v1/styles/{style} | Style JSON follows the same spec; layer ids differ. |
| GET /styles/v1/.../static/ | GET /v1/static | — |
Где это не замена один в один
Порядок координат
Mapbox возвращает center как [lng, lat]. У нас position — объект с ключами lat и lng: неоднозначности нет, но нужен небольшой адаптер.
Идентификаторы слоёв стиля
Обе стороны следуют спецификации стиля, но идентификаторы слоёв отличаются. Форку стиля Mapbox нужно переназначить id — соответствия перечислены в документации.
Идентификаторы объектов
Идентификаторы объектов Mapbox нестабильны между обновлениями данных и не взаимозаменяемы с нашими. Сохранённые ссылки нужно перевывести.
Клиентский SDK навигации
Мы отдаём API маршрутизации, а не SDK пошаговой навигации с голосовыми подсказками. Этот слой остаётся вашим или их.
Как это обычно делают
- 01
Тень
Неделю отправляйте копию боевого трафика обоим. Для пользователя ничего не меняется.
- 02
Сравнение
Сравните поле за полем на тех эндпоинтах, которыми реально пользуетесь. Обычно находится два-три настоящих отличия, а не двадцать.
- 03
Разделение
Переведите 5%, затем 50%, наблюдая за долей ошибок и задержкой по регионам.
- 04
Переключение
Переведите остальное, оставьте старый ключ живым на пару недель, потом отзовите.
Режим двойного прогона
Направьте часть трафика обоим поставщикам и сравните ответы. В консоли видно расхождение по полям на каждом эндпоинте, поэтому переключение делается по данным, а не по выборочной проверке.
Если решите уйти
Те же таблицы читаются в обратную сторону, а эндпоинт экспорта отдаёт ваши геозоны, стили и результаты пакетов в открытых форматах. Гайд по миграции, который смотрит только внутрь, — это тревожный признак, а не фича.
Чек-лист переключения
- Лимиты на новом ключе подняты до разделения трафика, а не после
- Потолок расходов выставлен на первый полный месяц
- Сохранённые идентификаторы мест перевыведены, если вы их храните
- Декодер полилинии проверен на известном маршруте
- Покрытие сверено по странам из длинного хвоста трафика
- Старый ключ отозван и удалён из секретов