2014-02-26 45 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