Услуга повышения UNKNOWN_ERROR

У меня возникли проблемы с сервисом повышения прав JavaScript Google Maps V3.

Согласно сообщениям групп Google ( https://groups.google.com/forum/#!msg/google-maps-js-api-v3/Z6uh9HwZD_k/G1ur1SJN7fkJ), создается впечатление, что при использовании getElevationAlongPath() оно сжимается и отправляется полный путь к серверу Google в виде запроса Ajax GET и его выборки на своем сервере. Это означает, что если у вас есть большое количество сегментов пути, кодированный URL-адрес превышает максимальную длину URL-адреса, и запрос завершается неудачно с UNKNOWN_ERROR.

Кто-нибудь может подтвердить, что это проблема длины URL?

Я попытался выполнить свою собственную подвыборку по пути и отправить только точки, для которых мне нужны данные о высоте, в качестве запроса getElevationForLocations(). Это, кажется, улучшение, но я все еще получаю некоторые ответы UNKNOWN_ERROR. Это происходит непредсказуемо. Иногда запрос с 400 баллами возвращается успешно. Другие запросы потерпят неудачу, пройдя всего 300 очков Я предполагаю, что это все еще проблема с длиной URL (предполагается, что getElevationForLocations() также отправляет данные в кодировке URL в Google).

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

Кто-нибудь есть какие-либо предложения для надежного способа получить большое количество точек данных высоты (500?) Из длинного пути?

Спасибо Колин


Похоже, что после нескольких копаний ситуация сложилась.

JavaScript API для повышения использует скрытую службу HTTP. Документы службы повышения прав HTTP говорят, что запросы ограничены 2048 символами. Однако, если вы используете службу HTTP напрямую, вы создаете собственные URL-адреса. Это означает, что вы можете проверить длину перед отправкой. Если вы используете JavaScript API, URL создается для вас, но код API не проверяет длину URL перед отправкой.

URL-адрес конечной точки вызова и необходимые параметры занимают 78 символов, оставляя 1970 для кодированных точек.

Это где это становится грязным. Количество символов в закодированной точке зависит от размера и точности значений lat и lng. Как правило, где-то от 8 до 12 символов на точку. Дополнительным осложнением является то, что некоторые символы, используемые в кодировке пути, могут нуждаться в кодировке URL-адреса, что еще больше увеличивает количество символов, необходимых на точку, на неизвестное, но потенциально значительное количество (2 дополнительных символа на каждый символ пути, нуждающийся в кодировке URL-адреса).).

Все эти сложности означают, что теоретически возможно, чтобы звонок приводил к слишком длинному URL с 55 пунктами - хотя и очень, очень маловероятно. Безопасный предел, вероятно, составляет 150 баллов (но иногда это может не сработать). 200 должно работать большую часть времени. 250 должно быть около максимума.

На самом деле из небольшого количества тестов: - 200 работало каждый раз - 300 обычно работает - 400 иногда работает

Расхождение между вычислениями и тестами говорит о том, что JavaScript API может выполнять какую-то дальнейшую форму сжатия или у меня что-то не так в calcs?

1 ответ

Ваши подозрения верны, это проблема длины URL. Если при отправке запроса у вас открыты инструменты разработчика Chrome, вы увидите ошибку HTTP 414 (Request-URI Too Large). URL-адрес составляет около 3000 символов, что на 1000 больше (2048 - это максимальная максимальная длина URL).

Внутренне API Карт Google преобразует все эти точки в нечто, похожее на закодированную полилинию, которая помогает сжать эти данные, но этого явно недостаточно для этого действительно длинного пути. Возможно, стоит разделить запрос на несколько сегментов, если вы знаете, что в него будет включено более N точек (я бы поэкспериментировал с N, чтобы увидеть, что работает).

Другие вопросы по тегам