diff -r efd9c589177a -r c0b4a8b5a012 toolkit/javascript/d3/examples/node-canvas/us-counties.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolkit/javascript/d3/examples/node-canvas/us-counties.js Thu Apr 10 14:20:23 2014 +0200 @@ -0,0 +1,70 @@ +require("../../test/env"); +require("../../d3"); +require("../../d3.geo"); + +var fs = require("fs"), + util = require("util"), + Canvas = require("canvas"); + +var w = 1920, + h = 1080; + +var projection = d3.geo.albersUsa() + .scale(2000) + .translate([w / 2, h / 2]); + +var path = d3.geo.path() + .projection(projection); + +var canvas = new Canvas(w, h), + context = canvas.getContext("2d"); + +context.antialias = "none"; +context.lineWidth = 8; +context.lineJoin = "round"; + +d3.json(__dirname + "/../data/us-counties.json", function(collection) { + renderAll("stroke"); + renderAll("fill"); + fs.writeFile("us-counties.png", canvas.toBuffer()); + + function renderAll(action) { + collection.features.forEach(function(feature) { + var re = /[MLZ]/g, + d = path(feature), + i = 0, + m; + + context[action + "Style"] = "#" + pad((+feature.id).toString(16)); + context.beginPath(); + re.lastIndex = 1; + while (m = re.exec(d)) render(m.index); + render(); + context[action](); + + function render(j) { + switch (d.charAt(i)) { + case "M": { + var p = d.substring(i + 1, j).split(",").map(Number); + context.moveTo(p[0], p[1]); + break; + } + case "L": { + var p = d.substring(i + 1, j).split(",").map(Number); + context.lineTo(p[0], p[1]); + break; + } + case "Z": { + context.closePath(); + break; + } + } + i = j; + } + }); + } +}); + +function pad(s) { + return s.length < 6 ? new Array(7 - s.length).join("0") + s : s; +}