某些国家/地区的jVectorMap着色失败

时间:2012-11-15 20:56:06

标签: jvectormap

我使用jVectorMap通过着色显示国家/地区值(即国家/地区根据其值显示不同的颜色)。一切正常,除非数据集中包含某些国家/地区。然后这些国家不会像他们应该那样变色(事实上,它们根本没有变色)。

我已将巴林(BH)和新加坡(SG)确定为打破地图的两个国家/城邦。看起来好像这些国家没有包括在地图上。他们不在那里我并不感到惊讶。但是,我希望地图不会失败。

'this.elements[...].element' is null or not an object的JavaScript错误在于以下内容(请参阅下面的代码中有关失败的注释)。

jvm.DataSeries.prototype={
    //...
    setValues:function(e){
        var t=Number.MIN_VALUE,n=Number.MAX_VALUE,r,i,s={};
        if(!this.params.min||!this.params.max){
            for(i in e)
                r=parseFloat(e[i]),r>t&&(t=e[i]),r<n&&(n=r);
            this.params.min||this.scale.setMin(n),this.params.max||this.scale.setMax(t),this.params.min=n,this.params.max=t
        }
        for(i in e)
            //FAILS ON THE FOLLOWING LINE
            r=parseFloat(e[i]),r?s[i]=this.scale.getValue(r):s[i]=this.elements[i].element.style.initial[this.params.attribute];
        this.setAttributes(s),this.values=e
    },
    //...
},

有没有办法解决这个问题?我宁愿 NOT 更改jVectorMap代码,要么在我的Java代码中执行以下操作:

if (!countryCode.equals("BH") && !countryCode.equals("SG")) {
    countryValues.put(countryCode, countryValue);
}

1 个答案:

答案 0 :(得分:3)

如果您想确保您的数据只包含地图中的国家/地区代码,则可以在设置地图数据之前使用地图国家/地区代码作为过滤条件过滤数据。

您可以定义一种传入数据的方法,迭代每个项目并删除地图路径中不存在国家/地区代码的条目:

function filterDataForMap(data, mapName){
    var filteredData = {};
    $.each(data,function(key, value){
       //Only add when the key (country code) exists in the map
       if(jvm.WorldMap.maps[mapName].paths[key]!==undefined) {
          filteredData[key] = value;        
       }                
    });
    return filteredData;
}

应用于创建地图:

$('#map').vectorMap({
        map: 'world_mill_en',
        series: {
          regions: [
            {
              scale: colorScale,
              attribute: 'fill',
              normalizeFunction: 'polynomial',
              values: filterDataForMap(mapData, 'world_mill_en') //filter data
            }]
        }
 });