我正在尝试使用jvectormap,它以ISO 3166-1 alpha-2国家/地区代码格式输入。
我的输入采用国家/地区名称的形式。我已经检查过JavasSript中代码转换器的名称,但是没有。
我想知道如何进行转换,以便我可以将输入与jvectormap输入匹配。有什么想法吗?
检查链接:http://jsfiddle.net/sprugman/fkRnC/7/
jvectormap输入模型类似于
var gdpData = {
"US": 25,
"CA": 50,
"RU": 100,
"AO": 200,
"AG": 200,
"AR": 400,
"BR":200
};
并且谷歌geochart也比这个更好吗?
答案 0 :(得分:2)
您可以使用world_mill_en
地图和name
属性中的国家/地区名称值生成一个使用国家/地区名称键入的新地图:
//Clone the world map that uses ISO-2 keys
var countriesByName = $.extend(true, {}, jvm.WorldMap.maps['world_mill_en']);
countriesByName.paths = {}; //clear the paths
$.each(jvm.WorldMap.maps['world_mill_en'].paths, function(key, obj){
//create new path entries, keyed by the country name
countriesByName.paths[obj.name] = obj;
});
//Add this new data map, to be loaded
$.fn.vectorMap('addMap', 'world_mill_en_byName',countriesByName);
然后加载关键国家/地区名称的数据并引用新创建的地图:
//data with country name as key
var gdpData = {
"United States of America": 25,
"Canada": 50,
"Russia": 100,
"Angola": 200,
"Argentina": 400
};
$(function() {
$('#map').vectorMap({
map: 'world_mill_en_byName', //load up the map with country name as key
backgroundColor: '#eeeeee',
regionStyle: {
initial: {
fill: '#cccccc'
}
},
series: {
regions: [{
values: gdpData,
scale: ['#C8EEFF', '#0071A4'],
min: 0,
max: 400,
normalizeFunction: 'polynomial'}]
},
hoverOpacity: 0.7,
hoverColor: false
});
var mapObj = $('#map').vectorMap('get', 'mapObject');
var steps = 4;
for (var i = 0; i <= steps; i++) {
var val = 400 / steps * i;
var color = mapObj.series.regions[0].scale.getValue(val);
$('#key').append('<div style="background-color:' + color + ';">' + val + ' - ' + color + '</div>');
}
});
应用于您发布的jsfiddle:http://jsfiddle.net/hansenmc/fkRnC/8/
答案 1 :(得分:1)
这是一个常见的请求,但是一旦解决这个问题真的很难,因为有很多变体可以写出国家甚至国家地区的名称。因此,此处的解决方案可能是使用来自wikipedia或任何其他来源的数据将国家/地区名称转换为国家/地区代码。