5

我正在使用Google Visualization Geochart API创建一个国家地区的地图。我提供了ISO 3266-2 国家细分代码并获得了正确的结果。然而,在图表中将 ISO 3266-2 代码显示为标签是一种糟糕的用户体验。所以我想提供一个自定义标签。以此为例:

  function drawVisualization() {
    var data = google.visualization.arrayToDataTable([
      ['Country', 'Popularity'],
      ['DE-BY', 200],
      ['DE-NW', 500]
    ]);

    var geochart = new google.visualization.GeoChart(
          document.getElementById('visualization'));
    geochart.draw(data, {width: 556, height: 347, region: 'DE', resolution: 'provinces'});
  }

[在代码游乐场 尝试一下]

我想提供“DE-BY”,但将“巴伐利亚”作为标签。我有必要使用 ISO 3266-2 代码,尽管 Google 写道

等效英文文本(例如,“US-NJ”或“New Jersey”)

是允许的,它非常不可靠,并且不适用于示例“巴伐利亚”。

4

2 回答 2

12

这是一个有效的概念快速证明,我正在寻找类似的东西,并希望自动获得名称,但我不确定这是否可能,但这至少允许手动填充工具提示文本。

关键因素是创建包含所需列的表,然后应用PatternFormat以根据需要获取工具提示,然后创建一个数据视图,其中仅包含数据绑定所需的那些列。

function drawVisualization() {

      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Country');
      data.addColumn('number', 'Value');
      data.addColumn('string', 'Display');

      data.addRows([
        ['Germany', 200, 'Germany'],
        ['United States', 300, 'USA'],
        ['Brazil', 400, 'Brasil'],
        ['Canada', 500, 'Canada'],
        ['France', 600, 'France'],
        ['RU', 700, 'Russia']
      ]);

      var geochart = new google.visualization.GeoChart(
          document.getElementById('visualization'));

      var formatter = new google.visualization.PatternFormat('{1}');  
      formatter.format(data, [0, 2]);

      var view = new google.visualization.DataView(data);
      view.setColumns([0, 1]);  

      geochart.draw(view, {width: 556, height: 347});
    }
于 2012-08-14T15:49:52.177 回答
0

根据我的经验,ISO 3166-2 存在几个问题,除了大多数人不知道的代码。

  1. 似乎没有任何地方可以免费找到可机器处理的最新版本。

  2. 除了在美国和加拿大等最稳定(通常是联邦)的国家/地区外,分配不断变化。有免费的机器可加工但过时的版本。

  3. 人们使用的国名并不总是官方的(有些长的名字)。

  4. 一些国家的地区名称与当地对地区真实情况的看法不符(在次地区层面更糟)。

  5. (子)区域名称是英语或当地语言的奇怪混合。

  6. 对于那些仍然以 ASCII 为重点的应用程序,没有 Unicode 名称的官方 ASCII 回退。

我对此没有算法解决方案,但我对国家代码问题的务实解决方案是有一个长查找表来处理国家名称的常见变体,然后从代码反向查找到可接受的“规范” “ 形式。因为在我的情况下#6,我确保规范形式是 ASCII。我对 ISO 639-1 和 -3 中的语言做了类似的任务。

为 ISO 3166-2 中的所有地区制作这样一份清单是一项非常漫长的任务——目前我专注于经合组织、金砖四国和欧盟国家,因为这需要很长的路要走。

于 2014-08-28T14:18:46.133 回答