2012-11-15 1 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 
    }, 
    //... 
}, 

이 문제를 해결할 방법이 있습니까? 당신이 당신의 데이터는지도에서 발견되는 국가 코드가 있는지 확인하려면

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

답변

3

: 차라리 하지 변경 jVectorMap 코드, 또는 내 자바 코드에 다음과 같이 일을해야 할 것 지도의 데이터를 설정하기 전에지도 국가 코드를 필터 기준으로 사용하여 데이터를 필터링 할 수 있습니다.

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