Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
Общий набор высоты представляет собой одно число, которое говорит пешему туристу или велосипедисту о сложности маршрута больше, чем когда-либо скажет одно лишь расстояние. Рассчитать его тоже просто, если у вас есть данные о высоте для достаточного количества точек вдоль маршрута.
Отправьте координаты маршрута по порядку на /v1/elevation, либо в параметре points, либо массивом в пакетном POST-запросе.
GET /v1/elevation?points=45.8326,6.8652|45.8400,6.8700|45.8475,6.8750|45.8300,6.8800{
"status": "ok",
"results": [
{"lat": 45.8326, "lon": 6.8652, "elevation_m": 1035},
{"lat": 45.8400, "lon": 6.8700, "elevation_m": 1210},
{"lat": 45.8475, "lon": 6.8750, "elevation_m": 1390},
{"lat": 45.8300, "lon": 6.8800, "elevation_m": 1180}
]
}Пройдите по результатам по порядку и для каждой пары соседних точек прибавляйте разницу к накопленной сумме только тогда, когда высота увеличилась. В этом примере переход от 1035 к 1210 добавляет 175, от 1210 к 1390 добавляет 180, а от 1390 к 1180 ничего не добавляет, поскольку этот участок идёт на спуск. Общий набор высоты на этом коротком отрезке составляет 355 м.
gain = 0
for i in 1..n:
diff = elevation[i] - elevation[i-1]
if diff > 0: gain += diffТот же цикл с обратным сравнением даёт вместо этого общий спуск, что так же важно, как и набор высоты, для маршрута, который заканчивается ниже, чем начинается, например для поездки из точки в точку вниз с горы.
loss = 0
for i in 1..n:
diff = elevation[i] - elevation[i-1]
if diff < 0: loss += -diffДля четырёх точек выше общий сброс высоты составляет 210 м, и весь он приходится на последний, спускающийся участок. Сводка маршрута, которая сообщает только набор и умалчивает о сбросе, рассказывает лишь половину истории для любого маршрута, кроме простого «туда и обратно».
Набор высоты чувствителен к тому, сколько точек вы берёте. Слишком мало точек сглаживает реальные подъёмы и спуски, и итог получается заниженным. Слишком много точек на зашумлённом GPS-треке может раздуть число за счёт мелких колебаний вверх и вниз, которые никогда не были настоящим подъёмом. Шаг от десяти до тридцати метров вдоль пешеходного трека или передискретизация до равных интервалов по расстоянию будут разумной отправной точкой.
Расчёт набора высоты прямо по сырому GPS-треку без предварительной передискретизации часто приводит к завышенному числу, поскольку треки потребительских GPS-устройств нередко колеблются вверх и вниз на несколько метров между соседними записанными точками даже на по-настоящему ровной местности. Передискретизируйте трек до равных интервалов по расстоянию, прежде чем запрашивать для него высоту, а не запрашивайте высоту для каждой сырой точки, записанной устройством.
Каждая точка считается одним запросом, передана ли она в параметре points или в пакетном массиве. Маршрут из 300 точек выборки обходится в 300 запросов, и это всё равно небольшая доля от 2 500 бесплатных запросов в день, входящих в каждый ключ.
Набор высоты, рассчитанный таким способом, хорош ровно настолько, насколько хороша выборка точек, на которой он основан, поэтому стоит проверить пару вариантов шага на известном маршруте, прежде чем остановиться на одном из них. Все параметры запроса описаны на странице документации по определению высоты.