4

我有一个以公里为单位的值,我希望将其转换为浏览器的区域设置特定测量单位(公里或英里)。

我正在使用谷歌地图 API v3 方向服务,特别是此页面上的最后一个示例。

function computeTotalDistance(result) {
  var total = 0;
  var myroute = result.routes[0];
  for (i = 0; i < myroute.legs.length; i++) {
    total += myroute.legs[i].distance.value;
  }
  total = total / 1000.
  document.getElementById("total").innerHTML = total + " km";
}

如何确定浏览器的区域设置计量单位,以便在必要时执行转换?

4

2 回答 2

6

我想最简单的方法是检查window.navigator.language并检查用户是否选择了"en-US"or "my",因为大多数国家/地区都引入了公制(参见这张地图)。您也可以使用 GeoIP,但总而言之,如果用户更喜欢另一个系统,您应该为用户提供更改系统的选项。

浏览器本身不存储任何测量单位首选项。

于 2013-09-08T13:06:49.103 回答
2

由于地图 API 默认为原产国单位系统的 UnitSystem,除非有人有更好的解决方案,否则我将使用以下内容:

var metric = myroute.legs[0].distance.text.indexOf(" km") != -1?true:false;

我知道它不是特别优雅,但似乎很可靠,而且它不需要任何我手头没有的数据。

我尝试寻找一种方法来获取directionsService 使用但没有成功的实际UnitSystem。

来自API 文档

单位系统

默认情况下,使用始发地国家或地区的单位系统计算和显示方向。(注意:使用纬度/经度坐标而不是地址表示的起点始终默认为公制单位。)例如,从“芝加哥,IL”到“多伦多,ONT”的路线将以英里为单位显示结果,而反向路线将显示结果以公里为单位。您可以通过使用以下 UnitSystem 值之一在请求中显式设置一个来覆盖此单位系统:

UnitSystem.METRIC 指定公制的使用。距离以公里表示。UnitSystem.IMPERIAL 指定使用英制(英制)系统。距离以英里表示。注意:此单位系统设置仅影响向用户显示的文本。方向结果还包含距离值,未向用户显示,始终以米表示。

于 2013-09-08T18:38:37.933 回答