在d3.js中缩放数据集

时间:2014-11-21 18:09:43

标签: javascript d3.js maps

我在d3.js中叠加了两个数据集,一个边界图和一个点图。我希望能够同时缩放两个数据集。使用当前代码,只有点图响应缩放。如何同时缩放两个数据集

代码如下所示

var canvas = d3.select("body").append("svg")
    .attr("width",260)
    .attr("height",400)

d3.json("/Maps/iowastate.json",function (data){
    var group = canvas.selectAll("g")
        .data(data.features)
        .enter()
        .append("g")
    var projection =d3.geo.mercator()
    .scale(250)
    //.translate([0,0]);
    var path = d3.geo.path().projection(projection);
    var areas = group.append("path")
        .attr("d", path)
        .attr("class","area")
        .attr("fill","black");




d3.csv("/Maps/detectors.csv",function (d){
    var group = canvas.selectAll("g")
        .data(d)
        .enter()
        .append("circle")
        .attr("cx", function(d) {
            return projection([d.StartLong,d.StartLat])[0];
       })
       .attr("cy", function(d,i) {
               return projection([d.StartLong,d.StartLat])[1];
       })
       .attr("r", 0.1)
       .style("fill", "red");
    //console.log(projection(d[0].StartLat))
    var zoom = d3.behavior.zoom()
        .on("zoom",function(){
        group.attr("transform","translate("+ 
        d3.event.translate.join(",")+")scale("+d3.event.scale+")");
        group.selectAll("path")  
        .attr("d", path.projection(projection));
        });
    canvas.call(zoom)
    })
    var zoom = d3.behavior.zoom()
        .on("zoom",function(){
        group.attr("transform","translate("+ 
        d3.event.translate.join(",")+")scale("+d3.event.scale+")");
        group.selectAll("path")  
        .attr("d", path.projection(projection));
        });
    canvas.call(zoom)


})

1 个答案:

答案 0 :(得分:0)

您正在应用正确的修改,但是对同一组元素而不是两个不同的图层应用两次。要使其工作,请保留对其他group的引用(例如,通过使用不同的变量名称)并将转换应用于这两个组。