2014-02-26 48 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變量有指不同的東西。在函數move的聲明中,頂級s受到s的影響。也就是s裏面的move是指第一個參數,而不是全局s。對其進行的任何更改僅影響該參數(因此僅具有本地範圍),而不是您想要更改的s

要修復,只需使用不同的變量名稱即可。

+0

感謝您的回答。我刪除了s和t參數(它們出現錯誤...),但沒有任何變化。我添加一些日誌,所以你可以看到我可以正確地傳遞s值,並且通過「raggioCittà(rateByIdCF [d.id] [anno]/s)計算得出的r」是正確的。試一試:放大並更改年份,只需檢查控制檯日誌。再次感謝拉爾斯! – danipen

+1

你的更新函數有一個拼寫錯誤 - 'raggioCittà(rateByIdCF [d.id] [anno]/s)'應該是'raggioCittà(rateByIdCF [d.id] [anno])/ s'。 –

+0

沒辦法......非常感謝拉斯!我一整天都沒有看到這個錯字!現在一切正常。再次感謝 – danipen