3

jVectorMap を使用して、国の値を色付けして表示しています (つまり、国は値に基づいて異なる色になっています)。特定の国がデータセットに含まれている場合を除いて、すべて正常に機能します。その場合、国は本来あるべきように色付けされません (実際、まったく色付けされません)。

私は、バーレーン (BH) とシンガポール (SG) を、マップを破る 2 つの国/都市州として特定しました。これらの国は地図に含まれていないようです。彼らがそこにいなくても、私は驚かない。ただし、マップが失敗しないことを願っています。

の JavaScript エラーは'this.elements[...].element' is null or not an object次のとおりです (以下のコードの失敗に関するコメントを参照してください)。

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

1 に答える 1

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
            }]
        }
 });
于 2012-11-17T02:20:59.273 に答える