Your data is already projected, so the simplest thing to do is to use the existing projection instead of d3.geoConicEqualArea. To resize the geometry from meters to pixels, use d3.geoIdentity. For example:
shp2json input.shp \
| geoproject 'd3.geoIdentity().reflectY(true).fitSize([960, 500], d)' \
| geo2svg \
The biggest differences are probably the emphasis on client-side computation and rendering (there is no separate kernel process; the results are computed and displayed directly in the browser) and the reactive, non-linear programming model (where cells are automatically re-evaluated in topological order whenever their inputs change, rather than…
Think of it as a distributed client-server architecture rather than strictly pure-server or pure-client. Client-side computation is easier because you only need a browser, but nothing prevents you from computing on the server, too; you just need a way to initiate this computation and return results to the client. (The WebSockets example in my post…
The reason your map is upside-down in Mapshaper is discussed in Part 2:
Mapshaper treats +y as up, as it normally is when y represents latitude. The coordinate system used by Canvas and SVG, however, by default treats +y as down.
The two constants are inverses:
Remember, we are computing population density, which is people divided by area. If we compute
B01003 / ALAND directly without converting units, we get people per square meter.
To convert people per square meter to people per square mile, we multiply by square meters…
It looks like you installed an old version of Node.js that doesn’t support Promises. I believe the earliest version that will work is 0.12, but I’d recommend using the latest stable release, 6.9 or later.