Using New York Census Tracts.
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script src="//d3js.org/topojson.v1.min.js"></script>
<script>
var width = 960,
height = 700;
var path = d3.geo.path()
.projection(null);
var color = d3.scale.threshold()
.domain([1, 10, 50, 100, 500, 1000, 2000, 5000])
.range(["#fff7ec", "#fee8c8", "#fdd49e", "#fdbb84", "#fc8d59", "#ef6548", "#d7301f", "#b30000", "#7f0000"]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("ny.json", function(error, ny) {
if (error) throw error;
// group tracts by color for faster rendering
svg.append("g")
.attr("class", "tract")
.selectAll("path")
.data(d3.nest()
.key(function(d) { return color(d.properties.population / d.properties.area * 2.58999e6); }) // convert square meters to square miles
.entries(ny.objects.tracts.geometries))
.enter().append("path")
.style("fill", function(d) { return d.key; })
.attr("d", function(d) { return path(topojson.merge(ny, d.values)); });
});
d3.select(self.frameElement).style("height", height + "px");
</script>
GENERATED_FILES = \
ny.json
all: $(GENERATED_FILES)
.PHONY: clean all
clean:
rm -rf -- $(GENERATED_FILES) build
build/tl_2012_%_tract.zip:
mkdir build
curl -o $@ 'http://www2.census.gov/geo/tiger/TIGER2012/TRACT/$(notdir $@)'
build/tracts-unfiltered.shp: build/tl_2012_36_tract.zip
rm -rf -- $(basename $@)
mkdir -p $(basename $@)
unzip -d $(basename $@) $<
for file in $(basename $@)/*; do chmod 644 $$file; mv $$file $(basename $@).$${file##*.}; done
rmdir $(basename $@)
touch $@
# strip water tracts
build/tracts.shp: build/tracts-unfiltered.shp
rm -f -- $@
ogr2ogr -f 'ESRI Shapefile' -where 'SUBSTR(GEOID,6,2) != "99"' $@ $<
ny.json: build/tracts.shp
node_modules/.bin/topojson \
-o $@ \
-e ACS_12_5YR_B01003_with_ann.csv \
--id-property=GEO.id2,GEOID \
-p population=+HD01_VD01,area=+ALAND \
--projection 'width = 960, height = 700, d3.geo.mercator() \
.center([-75.819, 42.795]) \
.scale(6.5 * width) \
.translate([width / 2, height / 2])' \
--simplify=.5 \
-- $(filter %.shp,$^)
{
"name": "anonymous",
"version": "0.0.1",
"private": true,
"devDependencies": {
"d3": "3",
"topojson": "1"
}
}