UNPKG

fastgeotoolkit

Version:

High-performance geospatial analysis framework for route density mapping

208 lines (150 loc) 6.58 kB
# fastGeoToolkit [![Rust](https://img.shields.io/crates/v/fastgeotoolkit.svg)](https://crates.io/crates/fastgeotoolkit) [![npm](https://img.shields.io/npm/v/fastgeotoolkit.svg)](https://www.npmjs.com/package/fastgeotoolkit) [![PyPI](https://img.shields.io/pypi/v/fastgeotoolkit.svg)](https://pypi.org/project/fastgeotoolkit/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) **A novel high-performance geospatial analysis framework with advanced route density mapping algorithms.** fastGeoToolkit provides comprehensive GPS track processing, route frequency analysis, and geospatial utilities across multiple programming languages. Built with Rust for maximum performance and compiled to native libraries and WebAssembly for cross-platform compatibility. ## Quick Start ### Rust ```toml [dependencies] fastgeotoolkit = "0.1.3" ``` ### JavaScript/TypeScript ```bash npm install fastgeotoolkit ``` ### Python ```bash pip install fastgeotoolkit ``` ### R ```r install.packages("fastgeotoolkit") ``` ## Key Features - **Novel Route Density Mapping**: Advanced segment-based frequency analysis for route popularity visualization - **Multi-Format Support**: GPX, FIT, and polyline format processing - **High Performance**: Rust-compiled core with 10-100x speedup over pure implementations - **Cross-Platform**: Available for Rust, JavaScript/TypeScript, Python, and R - **WebAssembly Ready**: Browser-compatible with near-native performance - **Comprehensive Analysis**: Track statistics, intersection detection, clustering, and coverage analysis ## Algorithm Innovation Our novel approach to route density mapping uses segment-based frequency analysis: 1. **Segmentation**: GPS tracks are decomposed into coordinate pair segments 2. **Grid Snapping**: Coordinates are snapped to a tolerance grid for consistency 3. **Frequency Counting**: Overlapping segments across multiple tracks are identified and counted 4. **Normalization**: Track frequencies are calculated from average segment usage This provides more accurate route popularity visualization compared to simple point-based heatmaps. ## Language-Specific Documentation Each implementation provides idiomatic APIs and comprehensive documentation: - **[Rust Documentation](dist/rust/README.md)** - Core implementation with examples - **[JavaScript/TypeScript Guide](dist/javascript/README.md)** - Browser and Node.js usage - **[Python Package Guide](dist/python/README.md)** - Scientific computing integration ## Multi-Language Architecture ``` fastGeoToolkit/ ├── core/ # Core Rust implementation ├── dist/ │ ├── rust/ # Rust crate (crates.io) │ ├── javascript/ # JS/TS package (NPM) │ └── python/ # Python package (PyPI) └── demo/ # Web demonstration ``` ## Performance Benchmarks fastGeoToolkit's Rust core delivers exceptional performance: - **GPX Processing**: 1000+ files/second - **Route Density Analysis**: 10M+ coordinate points/second - **Memory Efficiency**: Streaming processing for large datasets - **WebAssembly**: 80-90% of native performance in browsers ## Use Cases ### Route Planning & Analysis - Identify popular cycling/hiking routes - Analyze traffic patterns from GPS data - Optimize route recommendations ### Sports & Fitness - Strava/Garmin data analysis - Training route optimization - Community route discovery ### Urban Planning - Pedestrian flow analysis - Infrastructure planning - Transportation modeling ### Research & Academia - Mobility pattern studies - Geographic information systems - Computational geography ## Example Usage ### Basic Route Density Analysis **Rust:** ```rust use fastgeotoolkit::process_gpx_files; let gpx_data = std::fs::read("tracks.gpx")?; let heatmap = process_gpx_files(&[gpx_data]); println!("Max frequency: {}", heatmap.max_frequency); ``` **JavaScript:** ```javascript import { init, processGpxFiles } from 'fastgeotoolkit'; await init(); const heatmap = await processGpxFiles([gpxData]); console.log(`Processed ${heatmap.tracks.length} tracks`); ``` **Python:** ```python import fastgeotoolkit as fgt heatmap = fgt.load_gpx_file("tracks.gpx") print(f"Max frequency: {heatmap.max_frequency}") ``` **R:** ```r library(fastgeotoolkit) heatmap <- load_gpx_file("tracks.gpx") plot(heatmap) ``` ## Academic Impact fastGeoToolkit introduces novel algorithms for geospatial route analysis: - **Segment-based Frequency Analysis**: More accurate than point-based methods - **High-Performance Implementation**: Enables analysis of large-scale GPS datasets - **Cross-Platform Availability**: Accessible across major programming ecosystems - **Reproducible Research**: Consistent results across implementations ## Contributing We welcome contributions across all language implementations: 1. **Core Algorithm**: Improvements to Rust implementation 2. **Language Bindings**: Enhanced APIs for specific languages 3. **Documentation**: Examples, tutorials, and guides 4. **Testing**: Expanded test coverage and benchmarks See [CONTRIBUTING.md](CONTRIBUTING.md) for details. ## Citation If you use fastGeoToolkit in academic research, please cite: ```bibtex @software{fastgeotoolkit2024, title={fastGeoToolkit: A Novel High-Performance Geospatial Analysis Framework with Advanced Route Density Mapping}, author={a0a7}, year={2024}, url={https://github.com/strava-tools/fastgeotoolkit}, version={0.1.3} } ``` ## License MIT License - see [LICENSE](LICENSE) file for details. ## Links - **Documentation**: [GitHub Pages](https://strava-tools.github.io/fastgeotoolkit) - **Issues**: [GitHub Issues](https://github.com/strava-tools/fastgeotoolkit/issues) - **Discussions**: [GitHub Discussions](https://github.com/strava-tools/fastgeotoolkit/discussions) - **Crates.io**: [fastgeotoolkit](https://crates.io/crates/fastgeotoolkit) - **NPM**: [fastgeotoolkit](https://www.npmjs.com/package/fastgeotoolkit) - **PyPI**: [fastgeotoolkit](https://pypi.org/project/fastgeotoolkit/) const files = [/* Uint8Array buffers */]; const result = process_gpx_files(files); const coords = decode_polyline_string("_p~iF~ps|U_ulLnnqC_mqNvxq`@"); ## Building ```bash # Native Rust cargo build --release # WebAssembly wasm-pack build --target web ``` ## License MIT