2012-11-15 71 views
3

我正在使用jVectorMap通過着色來顯示國家/地區值(即各個國家/地區的顏色基於其值)。一切工作正常,除非某些國家包含在數據集中。然後這些國家不會像他們應該染色(事實上,他們根本不染色)。jVectorMap在某些國家/地區着色失敗

我已經確定巴林(BH)和新加坡(SG)爲打破地圖的2個國家/城邦。看起來好像這些國家不在地圖上。我並不感到驚訝,他們不在那裏。但是,我希望地圖不會失敗。

'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 
    }, 
    //... 
}, 

有沒有辦法解決這個問題?我寧願不變化的jVectorMap代碼,或者不得不做這樣的事情在我的Java代碼如下:

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

回答

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 
      }] 
     } 
});