This is the primary Rust geospatial geometry library (`georust/geo`), providing foundational data types (`Point`, `LineString`, `Polygon`, etc.) via `geo-types` and a comprehensive suite of computational geometry algorithms via the `geo` crate. The library implements OGC Simple Feature Access predicates (`Contains`, `Intersects`, `Covers`, `Within`), DE-9IM topological relationships (`Relate`), boolean operations (union, intersection, difference), convex/concave hulls, triangulation (ear-cutting, constrained Delaunay), simplification (Ramer-Douglas-Peucker, Visvalingam-Whyatt), distance calculations across multiple metric spaces (Euclidean, Haversine, Geodesic, Rhumb), spatial indexing (R-tree, ball tree, interval tree), clustering (DBSCAN, k-means), outlier detection (LOF), polygon repair, and validation. It is a library, not an applicationβno binary entry points, only examples and benchmarks. The codebase is characterized by a trait-oriented design, heavy use of macros to reduce boilerplate, generic numeric types (`GeoFloat`, `GeoNum`), and a metric-space abstraction that allows algorithms to be reused across coordinate systems. It has extensive test coverage including a JTS (Java Topology Suite) conformance test runner, fuzz testing, and criterion benchmarks. The architecture is modular with clear separation between types, traits, algorithms, and testing infrastructure. While generally well-maintained, some legacy modules (`old_sweep`) and deprecated traits exist, and the boolean operations depend on an external `i_overlay` crate.
BuntDB is a low-level, in-memory, key/value store library in Go. It supports custom indexing (B-tree and R-tree), geospatial queries, JSON indexing, TTL expiration, and ACID transactions with multiple readers / single writer. Persistence is via an append-only file (AOF) with automatic background shrinking. The library is designed for high performance and embeddability, and is used by projects requiring a fast, reliable embedded database. The codebase is a single package with a well-structured API, comprehensive tests, and minimal dependencies.
Tile38 is an in-memory geolocation data store, spatial index, and realtime geofencing server written in Go. It provides a Redis-compatible interface (RESP, HTTP, WebSocket, Telnet) for storing and querying geospatial objects (points, GeoJSON, bounding boxes, geohashes, tiles) with commands like SET, GET, NEARBY, WITHIN, INTERSECTS, and SCAN. The server supports leader/follower replication, AOF persistence, Lua scripting, and realtime geofencing via webhooks, pub/sub channels, and live connections. Its architecture is a single-binary server with a modular internal structure: a collection layer combining B-tree and R-tree indexing, a binary-encoded object and field storage for memory efficiency, a pluggable endpoint system for webhook delivery (HTTP, Kafka, MQTT, NATS, AMQP, SQS, etc.), and a custom protocol multiplexer. The codebase demonstrates high craftsmanship with reusable components like the collection data structure, glob matching, binary field lists, and endpoint manager, though some areas show signs of organic growth (e.g., large server.go, deprecated flags).