topojson / topojson-server

Convert GeoJSON to TopoJSON.
ISC License
117 stars 32 forks source link

Update geo2topo #8

Open mattkolb opened 6 years ago

mattkolb commented 6 years ago

I regularly go through the following process to go from ndjson (convenient for modifying data) to geojson (to project) and then to topojson to simplify and use. ($states; $objects) | ndjson-reduce 'p.features.push(d), p' '{type: \"FeatureCollection\", features: []}' | geostitch | geoproject 'd3.geoMercator().rotate([" . (0 - $row[centroid_x]) . ", " . (0 - $row[centroid_y]) . "]).fitSize([$px_width, $px_height], d)' | geo2topo all=- | toposimplify --filter-all -p 1

The issue is that I need all of the data in a single geojson file so that I can use .fitSize() and maintain the same scale for all layers, but then when using it, I would much rather have the topojson split into layers.

The pull request would allow you to change the geo2topo command to "| geo2topo --split-layers" and use ndjson-map to specify the layer as a property of each like this:

($states | ndjson-map 'd.properties.layer = "states", d'; $objects | ndjson-map 'd.properties.layer = "objects", d') | ndjson-reduce 'p.features.push(d), p' '{type: \"FeatureCollection\", features: []}' | geostitch | geoproject 'd3.geoMercator().rotate([" . (0 - $row[centroid_x]) . ", " . (0 - $row[centroid_y]) . "]).fitSize([$px_width, $px_height], d)' | geo2topo --split-layers | toposimplify --filter-all -p 1