     .style('stroke-width', 0.5)
     .style('shape-rendering', 'crispedges')
     .attr('d', 'M-1,1 l2,-2 M0,4 l4,-4 M3,5 l2,-2')
+
+  vis.selectAll('.blockgroup')
+    .data(blockgroups.features)
+  .enter().append('path')
+    .attr('class', (d) -> "blockgroup")
+    .attr('d', path)
 
   vis.selectAll('.neighborhood')
     .data(neighborhoods.features)


d3.json 'data/pdx.json', (pdx) ->
  neighborhoods = topojson.feature pdx, pdx.objects.neighborhoods
  projection.scale(1).translate [0, 0]

  b = path.bounds(neighborhoods)
  s = .99 / Math.max((b[1][0] - b[0][0]) / width, (b[1][1] - b[0][1]) / height)
  t = [(width - s * (b[1][0] + b[0][0])) / 2, (height - s * (b[1][1] + b[0][1])) / 2]

  projection.scale(s).translate(t)

  loadCensusData(mapDataToNeighborhoods)

  vis.append('pattern')
    .attr('id', 'hatch')

  vis = d3.select('.js-map').append('svg')
    .attr('width', width)
    .attr('height', height)
    .call(tip)