地理图表:使用 ISO 3266-2 区域代码,但显示真实姓名

Geochart: Using ISO 3266-2 region code but show real name

本文关键字:代码 显示 真实 区域 3266-2 ISO 使用      更新时间:2023-09-26

>我正在使用Google可视化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 代码,因为尽管谷歌写道

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

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

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

关键因素是创建具有所需列的表,然后应用 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});
    }

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

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

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

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

  4. 一些国家的区域名称与当地对区域真实情况的看法不符(在次区域一级要糟糕得多)。

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

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

我没有算法解决方案,但我对国家/地区

到代码问题的务实解决方案是有一个长查找表来处理国家/地区名称的常见变体,然后从代码反向查找为可接受的"规范"形式。由于在我的情况下为 #6,我确保规范形式是 ASCII。我对 ISO 639-1 和 -3 中的语言执行类似的任务。

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