## TODOs ### Features * [x] map via geojson.io * [X] Preserve features on existing GJ features * [X] Point geohash (`echo 12,34 | geoq gh point 4 => abcd`) * [X] Geojson geom printing * [X] Geojson feature printing * [X] Geojson feature collection aggregation * [X] Add wkt writing -- perhaps borrow from https://github.com/CanalTP/rust-wkt/tree/write-wkt ? * [ ] Map large JSON with embedded copy of geojson.io web page * [X] `filter intersects` * [ ] `filter within` * [X] `gh children` * [X] `gh neighbors` * [X] `gh covering ` * [ ] `wkt geomcollection` * [ ] `wkt multi` (linestring/poly/point? figure out how to decide) * [ ] `area` - investigate geodesic area implementations? ### Improvements * [X] Try assert cli for testing CLI "type" command https://github.com/assert-rs/assert_cli * [X] Add rust-geohash and generate point geohashes * [X] test reader matching functions * [X] Refactor reading interface to produce an iter (i.e. let reader methods return errors) * [ ] Migrate Geojson and WKT output formats to trait * [ ] Add strings in error messages so, e.g. bad inputs can be printed with error * [ ] Investigate parallel iterator processing (rayon?) * [ ] Try streaming serde for feature collections: https://github.com/serde-rs/json/issues/345 * [ ] Make error types support string messages (or just make them strings? add a lookup table?) * [ ] Geohash require valid precision level (1 - 12) * [ ] Print invalid geometries to stderr (or exit program?) * [ ] Make "exit on invalid" configurable * [ ] figure out streaming geojson feature collection output * [X] cross-platform `open` command for geojson map * [ ] Migrate back to official rust-wkt crate * [X] crates.io release * [ ] Homebrew formula * [X] Readme Docs + Install Instructions * [ ] Iterator-based covering GH implementation (don't hold whole list in memory as a vector) * [X] Move individual command handlers to separate namespaces * [X] Limit geojson.io output length * [ ] Remove `Input::Unknown` -- make these give errors Entity refactoring problem: currently conversion methods take ownership -- getting geometry or geojson rep consumes original input Alternative: turn entities to structs with lazily-populated fields (or even eager...maybe perf doesnt matter) Entity - raw / original - properties map - geometry ...then other operations can borrow these fields