|
#!/bin/bash |
|
|
|
# EPSG:3310 California Albers |
|
PROJECTION='d3.geoAlbers().parallels([34, 40.5]).rotate([120, 0])' |
|
|
|
# The state FIPS code. |
|
STATE=06 |
|
|
|
# The ACS 5-Year Estimate vintage. |
|
YEAR=2014 |
|
|
|
# The display size. |
|
WIDTH=960 |
|
HEIGHT=1100 |
|
|
|
# Download the census tract boundaries. |
|
# Extract the shapefile (.shp) and dBASE (.dbf). |
|
if [ ! -f cb_${YEAR}_${STATE}_tract_500k.shp ]; then |
|
curl -o cb_${YEAR}_${STATE}_tract_500k.zip \ |
|
"http://www2.census.gov/geo/tiger/GENZ${YEAR}/shp/cb_${YEAR}_${STATE}_tract_500k.zip" |
|
unzip -o \ |
|
cb_${YEAR}_${STATE}_tract_500k.zip \ |
|
cb_${YEAR}_${STATE}_tract_500k.shp \ |
|
cb_${YEAR}_${STATE}_tract_500k.dbf |
|
fi |
|
|
|
# Download the census tract population estimates. |
|
if [ ! -f cb_${YEAR}_${STATE}_tract_B01003.json ]; then |
|
curl -o cb_${YEAR}_${STATE}_tract_B01003.json \ |
|
"http://api.census.gov/data/${YEAR}/acs5?get=B01003_001E&for=tract:*&in=state:${STATE}" |
|
fi |
|
|
|
# 1. Convert to GeoJSON. |
|
# 2. Project. |
|
# 3. Join with the census data. |
|
# 4. Compute the population density. |
|
# 5. Simplify. |
|
# 6. Compute the county borders. |
|
geo2topo -n \ |
|
tracts=<(ndjson-join 'd.id' \ |
|
<(shp2json cb_${YEAR}_${STATE}_tract_500k.shp \ |
|
| geoproject "${PROJECTION}.fitExtent([[10, 10], [${WIDTH} - 10, ${HEIGHT} - 10]], d)" \ |
|
| ndjson-split 'd.features' \ |
|
| ndjson-map 'd.id = d.properties.GEOID.slice(2), d') \ |
|
<(ndjson-cat cb_${YEAR}_${STATE}_tract_B01003.json \ |
|
| ndjson-split 'd.slice(1)' \ |
|
| ndjson-map '{id: d[2] + d[3], B01003: +d[0]}') \ |
|
| ndjson-map -r d3=d3-array 'd[0].properties = {density: d3.bisect([1, 10, 50, 200, 500, 1000, 2000, 4000], (d[1].B01003 / d[0].properties.ALAND || 0) * 2589975.2356)}, d[0]') \ |
|
| topomerge -k 'd.id.slice(0, 3)' counties=tracts \ |
|
| topomerge --mesh -f 'a !== b' counties=counties \ |
|
| topomerge -k 'd.properties.density' tracts=tracts \ |
|
| toposimplify -p 1 -f \ |
|
> topo.json |
|
|
|
# Re-compute the topology as a further optimization. |
|
# This consolidates unique sequences of arcs. |
|
# https://github.com/topojson/topojson-simplify/issues/4 |
|
topo2geo \ |
|
< topo.json \ |
|
tracts=tracts.json \ |
|
counties=counties.json |
|
|
|
geo2topo \ |
|
tracts=tracts.json \ |
|
counties=counties.json \ |
|
| topoquantize 1e5 \ |
|
> topo.json |
|
|
|
rm tracts.json counties.json |