PROJ is a generic coordinate transformation library that converts coordinates between different coordinate reference systems (CRS). It includes a comprehensive catalog of map projections (over 190), datum shifts (grid-based, Helmert, TIN), and time-dependent deformation models. The library provides both a C API and a C++ ISO19111-compliant object model, along with command-line tools (proj, cs2cs, cct, projinfo, geod, gie, projsync). The architecture is a core transformation engine that dispatches through function pointers, with a pipeline system for chaining operations. The library relies on a bundled SQLite database (proj.db) containing EPSG definitions, and supports grid files for high-accuracy transformations. It is heavily used in geospatial software (e.g., GDAL, QGIS) and compiles on Linux, macOS, Windows, and WebAssembly through Emscripten.
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.
Shapely is a mature Python library for manipulation and analysis of planar geometric objects, serving as the computational geometry backbone for the geospatial Python ecosystem (GeoPandas, Fiona, etc.). It wraps the GEOS C++ library (the engine of PostGIS) and exposes both an object-oriented geometry interface (Point, LineString, Polygon, collections) and vectorized NumPy universal functions for high‑performance array operations on geometry arrays. Architecturally, the library consists of a C extension (`shapely.lib`) that provides a `Geometry` type and registers dozens of ufuncs, each wrapping a GEOS function. The Python modules in `shapely/` (constructive, predicates, measurement, set_operations, io, strtree, etc.) provide the public API, using decorators like `@multithreading_enabled` and `@requires_geos` to manage thread safety and version gating. The `STRtree` class (packed R‑tree) offers spatial indexing with `query`, `nearest`, and `query_nearest`. Key entry points include the top-level functions in `shapely/__init__.py` (e.g., `contains`, `intersection`, `buffer`, `from_wkt`), the geometry classes in `shapely/geometry/`, and the I/O and transformation utilities. The codebase is well-tested (300+ test files) and continuously integrated across GEOS 3.10–3.14 and multiple Python versions.
The Planet Labs Python SDK provides both a programmatic interface and a command-line tool for interacting with Planet's satellite imagery and data APIs. It enables users to authenticate, search for imagery, create and manage orders, handle subscriptions, upload areas of interest, configure cloud storage destinations, and access mosaics. The SDK is designed with a clear separation of concerns, featuring asynchronous API clients with synchronous wrappers, a robust HTTP session with retry and rate-limiting logic, and a flexible authentication system supporting multiple methods (API key, OAuth user, OAuth M2M) and storage strategies. Key architectural elements include a base client class that handles common HTTP operations, service-specific clients for each Planet API, and a Click-based CLI that mirrors the SDK's functionality. The repository also includes reusable utilities for GeoJSON handling, search filter construction, order and subscription request building, and progress reporting for long-running operations. The codebase demonstrates strong engineering practices with extensive test coverage, clear documentation, and active maintenance.
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).
GeoTools is an open-source Java library for geospatial data manipulation, implementing OGC standards and providing a modular architecture for data access, styling, rendering, and coordinate reference systems. It supports a wide range of vector and raster formats through JDBC plugins (PostGIS, Oracle, SQL Server, etc.), shapefile, GeoPackage, GeoTIFF, NetCDF, and more. The library is used as the foundation for GeoServer and other GIS applications, offering a rich set of filter functions, process framework, and XML binding infrastructure for OGC web services (WMS, WFS, WCS, WPS). The codebase is well-structured with extensive test coverage, though some modules are marked as unsupported and may have lower maintenance priority.
Dawarich is a production Ruby on Rails 8 monolith for personal location history tracking, positioning itself as a self-hostable Google Timeline replacement. It ingests timestamped geospatial points from a broad range of trackers (OwnTracks, Overland, Traccar) and file formats (GPX, GeoJSON, KML/KMZ, TCX, FIT, CSV, Google Takeout), then drives them through heavy background processing: reverse geocoding, anomaly filtering, visit detection, track generation, transportation-mode classification, trip building, and monthly/yearly statistics with digest emails. The web frontend is a MapLibre GL JavaScript application using vector-tile rendering, WebSocket real-time updates, and novel in-browser encoding studios for route videos (WebCodecs MP4) and printable posters (hand-rolled PNG encoder). The system also integrates photo libraries (Immich, PhotoPrism), flight logs (AirTrail), TeslaMate, and TREK trip planning, plus family location sharing, achievements, and an MCP API endpoint. Architecturally it is a conventional but well-executed Rails service-object monolith: controllers are thin, domain logic lives in app/services (command pattern with call methods), heavy processing is delegated to a large Sidekiq job surface with named queues, and cross-process coordination uses Redis-based debouncers, per-user advisory locks, and tile epochs for cache invalidation. PostGIS powers spatial queries (ST_DWithin, lonlat geography, H3 hexagons, vector tiles). The codebase ships dual-mode: self-hosted Docker deployments and a cloud SaaS with subscription/entitlement gating, with many env-conditional branches. Test coverage is extensive (RSpec with regression specs for timezone/race/geospatial edge cases, Playwright e2e, locale-parity and schedule-consistency specs), CI includes RuboCop, Trivy, and Dependabot. The strongest engineering is in the data-ingestion and processing layer: streaming SAX-style JSON parsers for huge Google Takeout files, batched upsert with deduplication and Null Island filtering, deterministic nearest-centroid transportation-mode classification with explicit explainability, and Redis coordination patterns for geocoding claims and per-user job locks. Weaknesses include a sprawling surface area (35+ service subdomains in one repo), significant schema churn via migration-enqueued backfill jobs, and dual self-hosted/cloud branches that add cognitive load. Overall this is a well-maintained, feature-complete application with genuinely reusable geospatial and streaming-data patterns.
Generic Mapping Tools (GMT) is a mature, open-source collection of approximately 100 command-line tools for processing geographic and Cartesian data and producing high-quality PostScript illustrations, maps, and animations. The system is architected as a modular C library with a central dispatcher executable (`gmt`) that loads and runs individual modules. It supports both a classic mode (direct module calls) and a modern mode (`gmt begin/end`, `gmt subplot`) that manages sessions, figures, and panels. Key entry points include the `gmt` command, the C API (`GMT_Create_Session`, `GMT_Call_Module`), and shell completion scripts. Data flows involve reading grid, table, image, and color palette table (CPT) data from local files or remote servers (via `@` prefix), processing through modules (e.g., `grdimage`, `psxy`, `grdmath`, `grdfilter`), and outputting PostScript, grids, or other formats. External dependencies include netCDF, GDAL, FFTW, PCRE/POSIX regex, PROJ, GSHHG coastlines, and DCW country polygons. The codebase exhibits high craftsmanship with systematic option parsing, a well-defined API, extensive test coverage, and reusable infrastructure components.
This repository is a comprehensive Go library for geometric data structures and operations. It provides implementations of OGC-standard geometry types (Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection) with support for 2D, 3D, and measured dimensions. The library includes algorithms for computational geometry (area, centroid, convex hull, line intersection, etc.) and encoders/decoders for formats like WKT, WKB, GeoJSON, KML, and IGC. Architecture is modular: core `geom` package defines types and interfaces, `xy`/`xyz` packages handle planar/spatial algorithms, `encoding/*` packages manage format serialization, and utilities like `transform` and `sorting` offer reusable helpers. Command-line tools for IGC parsing and PostGIS integration demonstrate practical usage. The code emphasizes clean separation of concerns, interface-driven design, and thorough testing including property-based and fuzzing tests.
Databend is an open-source, cloud-native distributed SQL query engine and data warehouse, built in Rust. It provides a full SQL interface for analytical workloads, supporting operations such as SELECT, INSERT, COPY INTO/OUT, MERGE INTO, and complex aggregations with window functions, subqueries, and joins. The architecture follows a storage-compute separation model: a metadata service (Meta) manages schemas, users, and catalogs via a Raft-based consensus layer, while query nodes handle SQL parsing, planning, optimization (Cascades optimizer with rule-based and cost-based passes), and distributed execution over a pipelined framework. Multiple storage engines are supported, including a native columnar Fuse engine optimized for cloud object stores (S3, MinIO, Azure Blob), as well as external formats like Iceberg, Delta Lake, Hive, Paimon, Parquet, and ORC. The system exposes access via MySQL wire protocol, HTTP API, Flight SQL, and gRPC, and includes enterprise features such as data masking, row access policies, materialized views, streams, network policies, and role-based access control.
A comprehensive monorepo for the maptalks 2D/3D WebGL/WebGPU map rendering engine. It provides a full-stack geospatial visualization framework including core map controls, geometry types (Marker, LineString, Polygon), multiple layer types (Tile, Vector, GLTF, 3D Tiles, Video, Particle), advanced shading (PBR, Phong, Cloth, Subsurface), post-processing (bloom, SSR, TAA, fog, weather), spatial analysis (viewshed, cut, flood, heightmap), traffic simulation, and interactive editing tools. The architecture is modular with ~20 interdependent packages under a pnpm workspace, using a custom WebGL abstraction (fusion.gl) and a vector tile pipeline with worker-based processing. It supports both Canvas2D and WebGL renderers, with emerging WebGPU support via WGSL shaders. The codebase is well-structured with reusable patterns (mixin, painter plugin, worker communication, LRU cache, texture pooling) but shows medium technical drift due to experimental WebGPU code, duplicated utility functions across packages, and reliance on legacy tooling (regl, shelf-pack).
This repository is a Jupyter Book for the University of Tennessee's GEOG-312 course on geospatial programming. It contains lecture notebooks covering Python fundamentals and geospatial libraries (GeoPandas, Rasterio, Xarray, Leafmap, Geemap, etc.), along with lab exercises. It is primarily an educational resource, not a production application or data pipeline. The content is well-structured with paired Markdown and Jupyter notebook files using jupytext, and includes CI/CD for building the book. While not a reusable software library, the pedagogical patterns and notebook organization are of high quality.
OpenAerialMap (OAM) is a production-grade, full-stack platform for uploading, processing, cataloging, and serving openly licensed aerial imagery, maintained by the Humanitarian OpenStreetMap Team (HOTOSM). The system is composed of multiple microservices: a Litestar-based uploader API with htmx frontend, a FastAPI STAC API backed by pgSTAC, a Go tilepack API for on-demand PMTiles/MBTiles generation, and a React/TypeScript frontend with MapLibre GL. Imagery processing is orchestrated via Argo Workflows (fetch, validate, convert to COG, metadata extraction, STAC registration). The codebase is well-architected with extensive test suites, CI/CD via GitHub Actions, Helm charts for Kubernetes deployment, and architecture decision records (ADRs) documenting key choices.
odc-stac is a Python library that converts STAC (SpatioTemporal Asset Catalog) metadata into the Open Data Cube (ODC) data model, enabling efficient loading of satellite imagery (Sentinel-2, Landsat) into xarray Datasets with Dask support. It defines a pluggable metadata parser (`StacMDParser`) and auxiliary reader (`StacAuxReader`) that integrate with the odc-loader framework, handles STAC extensions for projection, raster, and EO, and provides flexible spatial-temporal binning and grouping. The library also includes a CLI benchmark tool, test utilities for generating synthetic STAC items, and a comprehensive test suite with realistic STAC item fixtures from multiple providers (Planetary Computer, USGS, Geoscience Australia). While primarily an application library, it is used extensively in geospatial data research pipelines. The codebase is well-structured and modular, though it depends on evolving STAC specifications and extensions, introducing moderate technical drift risk.
GeoWombat is an open-source Python library for geospatial raster data processing and remote sensing analysis at scale. It provides a high-level API built on xarray, rasterio, Dask, and geopandas, enabling lazy, parallel processing of multi-spectral satellite imagery (Landsat, Sentinel-2, NAIP, etc.). The library's architecture centers on a custom xarray accessor (`.gw`) that exposes geospatial properties and methods, and a configuration context manager for setting sensor profiles, reprojection parameters, and other global settings. Key capabilities include raster I/O with on-the-fly warping/mosaicking, vegetation indices, radiometric corrections (BRDF, 6S, topographic), QA masking, time-series analysis, moving-window statistics (Cython-accelerated), and machine/deep learning classification and object detection (YOLO, TorchGeo, SAM). It supports STAC cloud access and distributed computation via Dask. The codebase demonstrates solid engineering with modular backends, extensible patterns, and comprehensive test coverage, though it carries some technical debt from pinned dependencies and large monolithic modules. It is actively maintained, with a broad user community and integrations with wider geospatial ecosystems.
The BRouter-Web application is a web-based routing service that utilizes OpenStreetMap data for route planning. It offers features such as route export, profile customization, and layer management. The application has a modular structure and relies on various external services and data sources.
This repository curates and distributes Maxar Open Data satellite imagery for disaster response events. It provides a structured catalog of pre- and post-event high-resolution imagery (WorldView, GeoEye) in multiple formats: GeoJSON footprints, union geometries, MosaicJSON tile indices, and TSV metadata tables. The core pipeline (`maxar_data_catalog.py`) fetches the official Maxar STAC catalog, iterates over event collections, and generates these derived files, which are then committed to the repository. A Streamlit web app (`streamlit_app.py`) offers interactive browsing of footprints and mosaics. The repository is primarily a data asset with a supporting ETL pipeline and a thin frontend, making it a hybrid of data curation and a lightweight application. The data is organized by disaster event (e.g., hurricanes, earthquakes, floods) and includes rich acquisition metadata (platform, GSD, cloud cover, viewing angles) suitable for geospatial analysis and machine learning.
This is a Python library for working with GeoJSON data, providing classes for all GeoJSON geometry types (Point, LineString, Polygon, etc.), Feature and FeatureCollection objects, and utility functions for encoding/decoding to/from JSON. It implements the __geo_interface__ protocol for integration with other geospatial tools and includes validation for GeoJSON spec compliance. The code is pure Python with no external dependencies, well-tested, and actively maintained by the Jazzband community.
The CachingFramework.Redis library is a .NET caching abstraction built on top of StackExchange.Redis. It provides a rich set of features including cache-aside patterns, tag-based invalidation, support for Redis data structures (strings, hashes, sets, sorted sets, bitmaps, HyperLogLog, geospatial), pub/sub, and key space notifications. The architecture centers around RedisContext as the main entry point, which provides access to modular features like Cache, Collections, GeoSpatial, PubSub, and KeyEvents. The library employs a provider pattern for encapsulating Redis operations and offers extensible serialization via an ISerializer interface with multiple implementations (binary, JSON, MessagePack, MemoryPack). It is designed for dependency injection and follows .NET best practices with async/await support and proper configuration management.