--- /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;
+}