Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
В GPX-файле, записанном телефоном или простым GPS-устройством, значения высоты часто полностью отсутствуют или заметно неточны, поскольку высота, измеренная бытовым GPS, обычно гораздо менее надёжна, чем записанные широта и долгота.
Разберите точки трека в GPX-файле, извлеките для каждой только широту и долготу и отбросьте имеющиеся значения высоты, которые вы собираетесь заменить.
<trkpt lat="45.8326" lon="6.8652"><ele>1050</ele></trkpt>Отправьте извлечённые координаты в /v1/elevation: через параметр points для небольшого файла или массивом в пакетном POST-запросе для большого.
POST /v1/elevation
Content-Type: application/json
[{"lat": 45.8326, "lon": 6.8652}, {"lat": 45.8400, "lon": 6.8700}]{
"status": "ok",
"results": [
{"lat": 45.8326, "lon": 6.8652, "elevation_m": 1035},
{"lat": 45.8400, "lon": 6.8700, "elevation_m": 1210}
]
}Не для каждой задачи нужно обрабатывать весь трек. Перед публикацией описания похода один вызов подтверждает высоту в самой начальной точке маршрута.
GET /v1/elevation?lat=45.8326&lon=6.8652Он возвращает результат той же структуры с одной записью. Это удобно для выборочной проверки высоты в начале или конце маршрута, указанной в описании, без необходимости трогать весь GPX-файл.
Результаты возвращаются в том же порядке, что и отправленные координаты, поэтому записывайте elevation_m обратно в тег ele каждой точки трека по позиции, заменяя исходное записанное значение полученным.
<trkpt lat="45.8326" lon="6.8652"><ele>1035</ele></trkpt>Не смешивайте в рамках одной задачи формат параметра запроса points и тело пакетного POST-запроса, если не соблюдаете единый способ сопоставления результатов с точками трека. И параметр points, и JSON-массив возвращают результаты в заданном порядке, но если получать координаты одной точки через параметр запроса, а остальных через пакетный POST-запрос, а затем объединять два набора ответов по предположению, а не по явному сопоставлению координат, легко внести ошибку смещения на единицу в записанный файл.
GPX-файл может содержать тысячи точек трека, записанных с коротким интервалом. Обогащение каждой из них обходится в один запрос на точку, что на длинном записанном треке быстро накапливается. Прореживание до более крупного интервала перед получением высоты с последующей интерполяцией между полученными значениями для промежуточных точек является разумным способом сократить количество запросов и при этом получить профиль, который выглядит точным.
Трек, который проходит вдоль побережья или через низменную дельту, может вполне законно вернуть значение elevation_m, равное нулю или близкое к нему, а иногда и небольшое отрицательное число для суши ниже уровня моря. Ни то, ни другое не является ошибкой. Считайте значение около нуля правдоподобным реальным показателем для такой местности, а не отфильтровывайте его как неверную точку данных.
Каждая обогащённая точка равна одному запросу. Небольшой пеший трек из нескольких сотен точек, прореженный из гораздо более крупной исходной записи, спокойно укладывается в 2 500 бесплатных запросов в день, входящих в каждый ключ.
Такая очистка данных о высоте превращает неровный трек, записанный телефоном, в то, чем стоит поделиться или что стоит проанализировать. В документации по определению высоты описаны и параметр points, и формат пакетного запроса.