无法从坐标获取时区

时间:2019-04-02 14:16:32

标签: typescript azure maps azure-maps

我正在使用azure地图服务的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:“亚洲/加尔各答” 名称: 白天:“” 通用:“” ISO6391LanguageCode:“未提供支持的语言代码” 标准:“”

1 个答案:

答案 0 :(得分:0)

如错误消息所述,这是由于服务无法确定时区的语言/本地化支持所致。

在您的情况下,问题似乎是您试图通过jQuery的ajax函数向AJAX请求添加标头,但请注意,它们指定标头的属性是headers,而不是{ {1}}照常使用。因此,您需要将设置更改为:

header

我实际上也遇到了var settings = { async: true, url: url, method: "GET", headers: { "Accept-Language": "EN" } }; 错误,但原因有所不同。如果我使用Postman访问如下网址:

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

并将No supported language code supplied标头设置为他们不支持的位置代码,它将返回Accept-Language错误。

我将ISO6391LanguageCode: "No supported language code supplied"标头设置为在他们的Localization support in Azure Maps页上列出的位置代码,例如Accept-Language,很奇怪,我会收到该错误消息。

如果我改为将位置代码更改为en-US,则可以使用。

您可以通过以下任一方式获取有效的时区名称:

  1. 完全省略标题(它将default的语言恢复为英语或“ en”)。
  2. 仅使用语言代码的第一部分(即使用en代替en)。