Не удается получить часовой пояс из координат

Я использую GET-адрес сервисов лазурных карт, чтобы получить часовой пояс по широте и долготе. https://docs.microsoft.com/en-us/rest/api/maps/timezone/gettimezonebycoordinates

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

let url =
      "https://atlas.microsoft.com/timezone/byCoordinates/json?subscription-key=" +
      subsciptionKey +
      "&api-version=1.0&query=" +
      latitude +
      "," +
      longitude;
    var settings = {
      async: true,
      url: url,
      method: "GET",
      header: {
        // "x-ms-client-id": "3f13b1ef-547e-4594-b5db-7a70a68d3799",
        "Accept-Language": "EN"
      }
    };

    $.ajax(settings).done(function(response) {
      console.log(response);

Вот результат, который я получил от почтальона,

{
    "Version": "2019a",
    "ReferenceUtcTimestamp": "2019-04-02T13:51:58.6714007Z",
    "TimeZones": [
        {
            "Id": "Asia/Kolkata",
            "Names": {
                "ISO6391LanguageCode": "EN",
                "Generic": "India Standard Time",
                "Standard": "India Standard Time",
                "Daylight": "India Standard Time"
            },
            "ReferenceTime": {
                "Tag": "IST",
                "StandardOffset": "05:30:00",
                "DaylightSavings": "00:00:00",
                "WallTime": "2019-04-02T19:21:58.6714007+05:30",
                "PosixTzValidYear": 2019,
                "PosixTz": "IST-5:30"
            }
        }
    ]
}

Но в случае с моим кодом поле «Generic» пусто. Он говорит: «Поддерживаемый языковой код не предоставлен».

Id: "Asia / Kolkata" Names: Daylight: "" Generic: "" ISO6391LanguageCode: "Поддерживаемый языковой код не предоставлен" Standard: ""


person Community    schedule 02.04.2019    source источник
comment
Не могли бы вы предоставить координаты, которые вы используете, чтобы мы могли воспроизвести эту проблему. Можете ли вы проверить сетевой трафик в своем приложении, чтобы убедиться, что запрос выполнен. Взгляните на параметры запроса, отправляемые в службу из вашего приложения, поскольку возможно, что-то может быть добавлено.   -  person rbrundritt    schedule 03.04.2019


Ответы (1)


Как описано в сообщении об ошибке, это вызвано тем, что служба не может определить поддержку языка / локализации для часового пояса.

В вашем сценарии проблема заключается в том, что вы пытаетесь добавить заголовок к запросу AJAX с помощью функции ajax jQuery, но обратите внимание, что их свойство указывать заголовки равно headers, а не header, как вы использовали. Итак, ваши настройки необходимо изменить на:

var settings = {
  async: true,
  url: url,
  method: "GET",
  headers: {
    "Accept-Language": "EN"
  }
};

Я тоже столкнулся с ошибкой No supported language code supplied, но по другой причине. Если бы я использовал Postman для доступа к URL-адресу, например:

https://atlas.microsoft.com/timezone/byCoordinates/json?api-version=1.0&subscription-key=[your-key-here]&query=36.6209994,-92.1343022

и установите в заголовке Accept-Language код местоположения, который они не поддерживают, он вернет ошибку ISO6391LanguageCode: "No supported language code supplied".

Я устанавливал в заголовке Accept-Language код местоположения, указанный в их Localization поддержки на странице Azure Maps, например en-US в моем случае, и, как ни странно, я получил это сообщение об ошибке.

Если вместо этого я изменил код местоположения на en, он сработает.

Вы можете вернуть действительные имена часовых поясов одним из следующих способов:

  1. Оставив заголовок полностью (что будет по умолчанию язык вернулся на английский или "en").
  2. Использование только первой части языкового кода (т.е. используйте en вместо en-US).
person John Washam    schedule 10.02.2020