{"id":30741917,"url":"https://github.com/brylie/remote-sensing-analysis","last_synced_at":"2025-09-04T01:10:17.303Z","repository":{"id":289067104,"uuid":"970006587","full_name":"brylie/remote-sensing-analysis","owner":"brylie","description":"Geospatial analysis of remote observation data.","archived":false,"fork":false,"pushed_at":"2025-04-23T07:24:36.000Z","size":18674,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-01T17:56:51.807Z","etag":null,"topics":["copernicus","earth-engine","earth-observation","geospatial","geospatial-analysis","geospatial-data","geospatial-data-analysis","geospatial-intelligence","geospatial-processing","geospatial-visualization","remote-sensing","sentinel-2"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brylie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-21T09:55:40.000Z","updated_at":"2025-04-23T04:35:09.000Z","dependencies_parsed_at":"2025-04-21T17:52:12.409Z","dependency_job_id":null,"html_url":"https://github.com/brylie/remote-sensing-analysis","commit_stats":null,"previous_names":["brylie/remote-observation-analysis","brylie/remote-sensing-analysis"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brylie/remote-sensing-analysis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brylie%2Fremote-sensing-analysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brylie%2Fremote-sensing-analysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brylie%2Fremote-sensing-analysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brylie%2Fremote-sensing-analysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brylie","download_url":"https://codeload.github.com/brylie/remote-sensing-analysis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brylie%2Fremote-sensing-analysis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273535009,"owners_count":25122766,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["copernicus","earth-engine","earth-observation","geospatial","geospatial-analysis","geospatial-data","geospatial-data-analysis","geospatial-intelligence","geospatial-processing","geospatial-visualization","remote-sensing","sentinel-2"],"created_at":"2025-09-04T01:10:16.521Z","updated_at":"2025-09-04T01:10:17.291Z","avatar_url":"https://github.com/brylie.png","language":"Python","readme":"[![codecov](https://codecov.io/gh/brylie/remote-sensing-analysis/graph/badge.svg?token=HN2WAH38B4)](https://codecov.io/gh/brylie/remote-sensing-analysis)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![Python Version](https://img.shields.io/badge/python-3.12%2B-blue)](https://www.python.org/downloads/)\n[![Contributors](https://img.shields.io/github/contributors/brylie/remote-sensing-analysis)](https://github.com/brylie/remote-sensing-analysis/graphs/contributors)\n[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg)](#contributors-)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\n# Remote Sensing Analysis\n\nA Python pipeline for analyzing remote sensing data using Google Earth Engine, focusing on vegetation and moisture indices.\n\n## Key Features\n\n- **Satellite Data Extraction**: Seamless integration with Google Earth Engine for acquiring Sentinel data\n- **Vegetation Indices**: Implementation of multiple vegetation indices (EVI, LAI)\n- **Moisture Analysis**: Calculation of Moisture Stress Index (MSI) for water stress assessment\n- **Statistical Analysis**: Distribution analysis and comparison between different indices\n- **Modular CLI**: Command-line interface for running separate pipeline steps\n- **Resource Optimization**: Run specific pipeline stages independently to save computational resources\n- **Geospatial Processing**: GeoTIFF output with proper coordinate systems and metadata\n- **Visualization**: Generate plots and maps for data interpretation\n\n## About the Project\n\nRemote Sensing Analysis provides tools for analyzing satellite imagery to derive vegetation and moisture indices. The primary objectives are to:\n\n- Extract and process Sentinel satellite data using Google Earth Engine\n- Calculate vegetation indices (EVI, LAI) and moisture stress index (MSI)\n- Generate statistical analysis of these indices for environmental assessment\n- Provide both a command-line interface and notebooks for interactive analysis\n\n## Data Sources\n\nThe pipeline works with the following data sources:\n\n### Sentinel-2 MSI\n- Used for calculating vegetation and moisture indices\n- Accessed through Google Earth Engine\n- 10-20m resolution (depending on bands)\n\n### MODIS and Copernicus Products (Optional)\n- Can be integrated for comparison with pre-calculated indices\n- Available through their respective APIs\n\n## Installation\n\n### Prerequisites\n\n- Python 3.12+\n- UV package manager (recommended) or pip\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/remote-sensing-analysis.git\ncd remote-sensing-analysis\n```\n\n```bash\n# Set up environment\nuv venv\n```\n\n```bash\n# Activate the environment Mac/Linux\nsource .venv/bin/activate\n```\n\n```bash\n# Activate the environment Windows\n.venv\\Scripts\\activate\n```\n\n```bash\n# Install dependencies\nuv sync\n```\n\n```bash\n# Set up Earth Engine authentication\nearthengine authenticate\n```\n\n## Usage\n\nThe remote sensing analysis pipeline supports modular execution, allowing you to run specific parts of the pipeline independently.\n\n### JupyterLab Environment\n\nThe project includes Jupyter notebooks for interactive analysis and visualization:\n\n```bash\n# Start JupyterLab\nuv run jupyter lab\n```\n\nThis will open JupyterLab in your browser, where you can access:\n\n- `notebooks/lai_finland.ipynb`: Example notebook for analyzing LAI and MSI for Finland\n- Create new notebooks to explore other regions or indices\n\n### Command Line Interface\n\n```bash\n# Show help and available commands\npython scripts/run_pipeline.py --help\n\n# Run the full pipeline\npython scripts/run_pipeline.py full --config config/pipeline.yaml\n\n# Only extract and process data (skip statistics)\npython scripts/run_pipeline.py extract --area finland --start-date 2024-04-01\n\n# Generate statistics from existing GeoTIFF files\npython scripts/run_pipeline.py statistics --input-dir data/output --output-dir data/output/statistics\n```\n\n### Command Options\n\n#### Common Options\n\nAll commands support the following options:\n\n- `--config`, `-c`: Path to the configuration file (default: `config/pipeline.yaml`)\n- `--log-level`, `-l`: Log level (DEBUG, INFO, WARNING, ERROR)\n\n#### Full Pipeline Command\n\n```bash\npython scripts/run_pipeline.py full [OPTIONS]\n```\n\nOptions:\n- `--area`, `-a`: Area of interest (overrides config)\n- `--start-date`, `-s`: Start date (YYYY-MM-DD, overrides config)\n\n#### Extract Data Command\n\n```bash\npython scripts/run_pipeline.py extract [OPTIONS]\n```\n\nOptions:\n- `--area`, `-a`: Area of interest (overrides config)\n- `--start-date`, `-s`: Start date (YYYY-MM-DD, overrides config)\n\n#### Generate Statistics Command\n\n```bash\npython scripts/run_pipeline.py statistics [OPTIONS]\n```\n\nOptions:\n- `--input-dir`, `-i`: Directory containing GeoTIFF files\n- `--output-dir`, `-o`: Directory to save statistics\n- `--pattern`, `-p`: Glob pattern to match GeoTIFF files (default: `*.tif`)\n\n## Configuration\n\nThe pipeline is configured through a YAML file. Example configuration:\n\n```yaml\n# Area of interest\narea: \"finland\"\n\n# Time range for data extraction\nstart_date: \"2024-04-01\"\nend_date: \"2024-04-30\"\n\n# Metrics to calculate\nmetrics:\n  - \"EVI\"\n  - \"LAI\"\n  - \"MSI\"\n\n# Output settings\noutput:\n  directory: \"data/output\"\n  prefix: \"rs_metrics_\"\n\n# Statistics settings\nstatistics:\n  enabled: true\n  output_directory: \"data/output/statistics\"\n```\n\n## Testing\n\nThe project includes comprehensive unit tests for all modules. Run tests using pytest:\n\n```bash\n# Run all tests\nuv run pytest\n\n# Run tests with verbose output\nuv run pytest -v\n\n# Run tests for a specific module\nuv run pytest tests/processors/\n\n# Run a specific test file\nuv run pytest tests/processors/test_preprocessing.py\n```\n\n### Test Coverage\n\nYou can check test coverage using pytest-cov:\n\n```bash\n# Run tests with coverage report\nuv run pytest --cov=src\n\n# Generate HTML coverage report\nuv run pytest --cov=src --cov-report=html\n\n# View coverage for specific modules\nuv run pytest --cov=src.processors --cov=src.statistics\n```\n\nAfter generating the HTML report, open `htmlcov/index.html` in your browser to view detailed coverage information.\n\n## Results and Output Files\n\nThe pipeline generates the following outputs:\n\n1. **GeoTIFF Files**: Raster files for each calculated index\n   - Example: `data/output/rs_metrics_finland_20240401_EVI.tif`\n\n2. **Statistical Analysis**: CSV files with summary statistics and distribution plots\n   - Example: `data/output/statistics/rs_metrics_finland_20240401_EVI_statistics.csv`\n\n3. **Comparison Plots**: Visualizations comparing different indices\n   - Example: `data/output/statistics/index_comparison.png`\n\n## Implemented Metrics\n\n### Enhanced Vegetation Index (EVI)\n- Improved vegetation index with soil and atmospheric corrections\n- Formula: `EVI = 2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))`\n\n### Leaf Area Index (LAI)\n- Quantifies leaf material in an ecosystem\n- Formula: `LAI = 3.618 * EVI - 0.118`\n\n### Moisture Stress Index (MSI)\n- Assessment of water stress in vegetation\n- Formula: `MSI = SWIR / NIR`\n\n## Contributing\n\nFor information on contributing to this project, please see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under the [Apache License Version 2.0](LICENSE).\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/brylie\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/17307?v=4\" width=\"100px;\" alt=\"Brylie Christopher Oxley\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBrylie Christopher Oxley\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/brylie/remote-sensing-analysis/commits?author=brylie\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/brylie/remote-sensing-analysis/commits?author=brylie\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-brylie\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind are welcome!\n\n## Code of Conduct\n\nWe are committed to fostering an open and welcoming environment. By participating in this project, you agree to abide by our [Code of Conduct](CODE_OF_CONDUCT.md).\n\n## Community Support\n\n- **Issues**: Please use [GitHub Issues](https://github.com/brylie/remote-sensing-analysis/issues) for bug reports, feature requests, and discussions.\n- **Discussions**: For questions and general discussions, use [GitHub Discussions](https://github.com/brylie/remote-sensing-analysis/discussions).\n\nWe welcome contributions from developers of all skill levels. If you're new to the project or to remote sensing in general, look for issues labeled `good first issue` to get started.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrylie%2Fremote-sensing-analysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrylie%2Fremote-sensing-analysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrylie%2Fremote-sensing-analysis/lists"}