2014-02-26 3 views
0

나는 차원으로 분류 이탈리아 도시의지도에 (더 많은 사람을 -> 더 큰 반경) 일하고 있어요 당신은지도를 확대하면 여기
미리보기 (전체 코드를 검사) http://www.danielepennati.com/prove/mapping/ita_popolazione.html
나는 반경을 확장하고 당신은지도가 확대되지 않으면 모든 것이있는 경우 바로
간다 ... 올해 변경하고 새 데이터로 원 반경을 업데이트하는지도의 왼쪽 선택을 사용하는 경우는d3 확대 된지도에서 svg 원 반경을 올바르게 업데이트하는 방법은 무엇입니까?

s = d3.event.scale; //s is defined in the main function 
g.selectAll('circle') 
    .attr("r", function(d) { return raggioCittà(rateByIdCF[d.id][anno])/s; }) 

잘 작동 지도가 확대되었습니다. 반지름을 반올림하여 값이 맞으면 축척 된 반경을 설정하려고하지만 원 요소의 "r"값은 반올림됩니다. 크기가 조정되지 않은 원과 원은 분명히 너무 큽니다. 이 줌 동작에 대한 바로 ... 어쩌면 내가 부족 뭔가를 작동하지 않는 이유를 정말 이해가 안

g.selectAll(".punto_comun") 
     .data(topojson.feature(base, base.objects.com2011_g).features) 
     .attr('fill', function(d) { 
      if(rateByIdCF[d.id]){ 
      if(raggioCittà(rateByIdCF[d.id][anno]) < 4){ return '#0042b0'} 
      } 
      return '#ff0000'; 
     }) 
     .attr("r", function(d) { 
      if(rateByIdCF[d.id]){ 
      //check if map is scaled, if yes scale the radius down 
      if(s){ return raggioCittà(rateByIdCF[d.id][anno]/s); } 
      //if not use the standard radius 
      return raggioCittà(rateByIdCF[d.id][anno]); 
      } 
     }) 

:
이 올해의 선택에 원을 업데이트 코드입니다.
정말 조언 해 주시면 고맙겠습니다.
감사
다니엘

답변

0

문제는 다음 코드 구조입니다 :

var s; 

function move(s, t) { 
    s = ...; 
} 

s 변수가 다른 일을 참조하십시오. s 최상위 레벨은 move 선언에서 s에 의해 음영 처리됩니다. 즉, s 안에 move은 첫 번째 인수를 나타내며, 글로벌 번호는 s이 아닙니다. 변경 사항은 변경하려는 s이 아니라 해당 인수에만 영향을 주므로 (따라서 로컬 범위 만 포함) 영향을줍니다.

수정하려면 단순히 다른 변수 이름을 사용하십시오.

+0

답해 주셔서 감사합니다. 나는 s와 t 매개 변수를 제거했다. (그들은 오류 때문에 거기에 있었다.) 그러나 아무것도 바뀌지 않았다. 약간의 로그를 추가하면 s 값을 올바르게 전달할 수 있고 "rggioCittà (rateByIdCF [d.id] [anno]/s)"에 의해 계산 된 r이 올바를 것입니다. 시도해보십시오. 확대하고 연도를 변경하고 콘솔 로그를 확인하십시오. 다시 고맙다 Lars! – danipen

+1

업데이트 기능에 오타가 있습니다 -'raggioCittà (rateByIdCF [d.id] [anno]/s)'는'raggioCittà (rateByIdCF [d.id] [anno])/s'이어야합니다. –

+0

어쨌든 ... 정말 고맙습니다! 나는 하루 종일이 오타를 보지 못했다! 이제 모든 것이 잘됩니다. 덕분에 다시 – danipen

관련 문제