Сценарии использования

Профиль высот для велосипедного приложения

Велосипедистов, которые планируют маршрут, больше всего волнует одна цифра: сколько придётся подниматься. Ровные сорок миль и холмистые сорок миль это совершенно разные поездки, и велосипедному приложению для планирования маршрутов нужно было показать эту разницу до того, как человек отправится в путь, а не когда он уже преодолел три холма и пожалел о выборе.

У приложения уже были маршруты в виде последовательности координат, которые его собственный движок маршрутизации строил по начальной и конечной точке. Не хватало высоты в каждой из этих точек. /v1/elevation решил эту задачу напрямую: вы отправляете список координат, будь то одна точка или длинная последовательность вдоль маршрута, и получаете высоту над уровнем земли для каждой из них. Маршрут из двухсот точек возвращался в виде двухсот значений высоты, в том же порядке, в котором они были отправлены, готовых к построению профиля относительно пройденного расстояния.

Этот список, отображённый на графике относительно накопленного расстояния, и есть тот график подъёмов, который велосипедисты действительно хотят видеть: где находятся холмы, насколько крутым выглядит подъём по сравнению с соседними точками и где лежат ровные участки. Приложение использовало его для расчёта общего набора высоты по маршруту, и эта единственная цифра оказалась для велосипедистов, решающих, браться ли за маршрут, важнее общего расстояния.

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

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

Трафик рос в зависимости от того, сколько маршрутов планировали велосипедисты, а не от того, сколько поездок они совершали, ведь профиль сохранённого маршрута нужно было рассчитать только один раз. Для приложения с активной, но не огромной аудиторией это удерживало запросы высоты далеко в пределах бесплатной дневной квоты, а предоплаченный баланс оставался естественным следующим шагом на случай, если популярная новая функция вызовет всплеск планирования маршрутов.

Высота это один из немногих эндпоинтов, для которых легко привести реальный пример: прибрежный маршрут покажет значения высоты около уровня моря в первых точках и растущие значения по мере того, как маршрут уходит вглубь суши, и такой график понятен велосипедисту с первого взгляда. Подробности о формате запроса и ограничениях на количество точек находятся на странице /docs/elevation-lookup/.