block by bradoyler f5ea23fdad55a0611eff51b20f7016b3

Pan/Zoom US-states via Atlas-make

Full Screen

Built with blockbuilder.org

forked from bradoyler‘s block: us-states via Atlas-make

index.html

<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <script src="https://d3js.org/d3.v3.min.js"></script>
  <script src="//d3js.org/topojson.v1.min.js"></script>
  <style>
    .mesh{ fill: #fff; stroke: #333; stroke-width: .8px;stroke-linejoin: round;}
    .sphere { fill: #fff;}
    
    .boundary {
      fill: none;
  		stroke: #fff;
  		stroke-linejoin: round;
  		stroke-linecap: round;
  		vector-effect: non-scaling-stroke;
		}

    .overlay { fill: none; pointer-events: all;}
    
  </style>
</head>

<body>
  <script>
    // topojson via https://github.com/bradoyler/atlas-make
    
    var width = 960,
    height = 400;

    var projection = d3.geo.albersUsa()

    var zoom = d3.behavior.zoom()
        .scaleExtent([1, 8])
        .on("zoom", zoomed);

    var path = d3.geo.path()
        .projection(projection);

    var svg = d3.select("body").append("svg")
        .attr("width", width)
        .attr("height", height).append("g");

    var g = svg.append("g");

    svg.append("rect")
        .attr("class", "overlay")
        .attr("width", width)
        .attr("height", height);

    svg.call(zoom).call(zoom.event);
    
    d3.json("us-states.json", function(error, ustopo) {
      if (error) throw error;
      
      g.append("path")
      .datum({type: "Sphere"})
      .attr("class", "sphere")
      .attr("d", path);
      
      g.append("path")
      .datum(topojson.mesh(ustopo))
      .attr("class", "mesh")
      .attr("d", path);
    });
    
    function zoomed() { 
      g.attr("transform", "translate(" + d3.event.translate 
             + ")scale(" + d3.event.scale + ")");
    }

  </script>
</body>