Comprehensive toolkit for precision agriculture analysis using satellite imagery and remote sensing
Project description
๐พ Precision Agriculture Analysis Toolkit
A comprehensive Python toolkit for precision agriculture analysis using satellite imagery and remote sensing data. This project provides both analysis libraries and educational notebooks to help farmers, researchers, and agronomists make data-driven decisions.
๐ฏ Project Vision
This toolkit aims to provide accessible, open-source tools for:
- ๐ Agricultural Monitoring: Track crop health, growth stages, and field conditions
- ๐ฐ๏ธ Remote Sensing Analysis: Process and analyze satellite imagery at scale
- ๐ง Resource Management: Optimize irrigation, fertilization, and other inputs
- ๐ Yield Prediction: Forecast crop yields using multi-temporal analysis
- ๐ Environmental Impact: Monitor soil health, carbon sequestration, and sustainability metrics
๐ Current Capabilities
Agricultural Index Analysis (Available Now)
Compute multiple agricultural indices from free satellite data (Sentinel-2, Landsat) to monitor crops, soil, and water resources.
๐ฑ Vegetation Indices:
- NDVI - Normalized Difference Vegetation Index (general vegetation health)
- EVI - Enhanced Vegetation Index (dense vegetation, atmospheric correction)
- SAVI - Soil Adjusted Vegetation Index (sparse vegetation, early season)
- NDRE - Normalized Difference Red Edge (chlorophyll, nitrogen status) Sentinel-2 only
- GNDVI - Green NDVI (photosynthetic activity, nitrogen)
๐๏ธ Soil Indices:
- BSI - Bare Soil Index (soil exposure, texture patterns)
- SI - Soil Index/Brightness Index (soil brightness, texture classification)
๐ง Water/Moisture Indices:
- NDMI - Normalized Difference Moisture Index (vegetation water content, irrigation management)
- NDWI - Normalized Difference Water Index (water bodies, flood mapping)
- MNDWI - Modified NDWI (enhanced water detection, wetlands)
Key Features:
- Automatic data retrieval via STAC APIs
- Support for multiple AOI formats (GeoJSON, bounding boxes, coordinates)
- Efficient multi-index computation (loads each band once)
- Built-in side-by-side visualizations and statistics
- Interactive Jupyter tutorials for learning
Elevation & Terrain Analysis (Available Now)
Fetch digital elevation models and compute terrain-derived products for drainage analysis, erosion risk, and zone-based field management.
Data Sources:
- Copernicus GLO-30 โ 30m resolution, global coverage
- USGS 3DEP โ Up to 1m resolution, US only
- Auto source selection โ Automatically picks the best source based on AOI location
Terrain Products:
- Slope โ Terrain steepness in degrees (Horn method)
- Aspect โ Downhill direction (0-360ยฐ from north)
- Hillshade โ Simulated illumination for visualization
- TWI โ Topographic Wetness Index (water accumulation and drainage)
- Roughness โ Local elevation variability (3x3 std dev)
Features:
- Batch point sampling โ efficiently query terrain at many lat/lon locations with a single DEM fetch
- Automatic CRS handling (geographic and projected)
- Windowed COG reads for fast remote data access
Crop & Weather Data (Available Now)
Integrate USDA crop history and NASA weather data to filter analyses by crop type and growing-season conditions.
Crop Data (CropScape / Cropland Data Layer):
- Query the USDA NASS CropScape API to determine which crop was planted in a field for a given year
- Identify dominant crop by acreage within a field AOI (no full raster download)
- Filter to years when a target crop (e.g., corn) was grownโrecommended for crop-specific NDVI analysis
- 30 m resolution CDL for the continental US; data typically available by February of the following year
Weather Data (NASA POWER):
- Query the NASA POWER API for daily weather at a point (precipitation, temperature, solar radiation, humidity, wind)
- Classify years by growing-season precipitation using 30-year climatological normals (dry / normal / wet)
- Filter NDVI or other analyses to exclude abnormally dry or wet years
- Growing-season and monthly queries; no API key required
๐ฎ Coming Soon
- Time Series Analysis: Track changes over growing seasons
- Yield Modeling: Predictive analytics for crop production
- Field Boundary Detection: Automated field delineation
- Crop Classification: Machine learning-based crop type identification
- Integration with Ground Data: Combine satellite indices with EC mapping, soil samples
๐ Quick Start
Installation
# Clone the repository
git clone https://github.com/chris/precision-ag.git
cd precision-ag
# Create and activate a virtual environment (recommended)
# Option 1: Using uv (fastest)
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Option 2: Using virtualenv
virtualenv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install the package
pip install -e .
# Or with optional dependencies for development and notebooks
pip install -e ".[dev,notebook]"
Usage Examples
Simple NDVI Analysis
from precision_ag import compute_ndvi_for_aoi
results = compute_ndvi_for_aoi(
aoi_input=[-121.0, 37.0, -120.5, 37.5],
start_date="2024-06-01",
end_date="2024-06-30"
)
Multi-Index Agricultural Analysis
from precision_ag import compute_agricultural_indices_for_aoi
# Compute multiple indices efficiently (loads each band once)
results = compute_agricultural_indices_for_aoi(
aoi_input="field.geojson",
start_date="2024-06-01",
end_date="2024-06-30",
indices=['ndvi', 'evi', 'bsi', 'ndmi', 'ndwi'],
output_dir="my_analysis",
visualize=True # Creates side-by-side comparison plots
)
Crop History (CropScape)
Filter analyses to years when a target crop was actually grown:
from precision_ag.crop_data import CroplandCROS, CROP_CODES
# Field AOI as GeoJSON (WGS84)
cros = CroplandCROS(field_aoi_wgs84=field_geojson)
# Years when corn was the dominant crop
corn_years = cros.get_corn_years([2019, 2020, 2021, 2022, 2023])
# Or filter by any CDL crop code
soy_years = cros.get_crop_years([2019, 2020, 2021, 2022, 2023], target_crop_code=CROP_CODES["soybeans"])
Weather Classification (NASA POWER)
Classify years by growing-season precipitation and fetch weather parameters:
from precision_ag.weather_data import NASAPowerWeather
# Field centroid (lat, lon)
weather = NASAPowerWeather(latitude=41.5, longitude=-93.5)
# Classify years by precipitation vs 30-year normals
classification = weather.classify_years([2019, 2020, 2021, 2022, 2023])
# e.g. {"dry": [2021], "normal": [2019, 2022], "wet": [2020, 2023]}
# Growing-season weather for a single year
precip_mm = weather.get_growing_season_precipitation(2023)
all_params = weather.get_all_weather_parameters(2023) # precip, temp, solar, humidity, wind
Elevation & Terrain Analysis
Fetch DEMs and compute terrain products for any field:
from precision_ag import ElevationComputer, compute_elevation_for_aoi
# Quick elevation fetch for an AOI
dem, meta = compute_elevation_for_aoi([-96.56, 38.44, -96.55, 38.45])
# Full terrain analysis with visualization and statistics
ec = ElevationComputer() # auto-selects USGS 3DEP (~1m) for US, Copernicus (30m) elsewhere
results = ec.compute_terrain_products(
[-96.56, 38.44, -96.55, 38.45], # bbox
products=["elevation", "slope", "aspect", "twi"],
visualize=True,
print_stats=True,
)
# Batch sample at specific points (one DEM fetch for all points)
points = [(38.45, -96.55), (38.46, -96.54), (38.47, -96.53)]
point_data = ec.sample_points(points, products=["elevation", "slope", "twi"])
# [{"lat": 38.45, "lon": -96.55, "elevation": 412.3, "slope": 2.1, "twi": 11.8}, ...]
Interactive Tutorials
Launch the Jupyter notebooks to learn interactively:
# Tutorial 1: Introduction to NDVI
jupyter notebook notebooks/NDVI_Tutorial.ipynb
# Tutorial 2: Comprehensive Vegetation Health Analysis
jupyter notebook notebooks/Vegetation_Health_Tutorial.ipynb
# Tutorial 3: Elevation & Terrain Analysis
jupyter notebook notebooks/Elevation_Data_Tutorial.ipynb
Documentation:
- Satellite Indices Module - Agricultural indices (vegetation, soil, water)
- Crop Data Module - USDA CropScape / Cropland Data Layer integration
- Weather Data Module - NASA POWER weather and growing-season classification
- Elevation Data Module - DEM retrieval and terrain analysis
๐ Project Structure
precision-ag/
โโโ precision-ag/ # Analysis libraries
โ โโโ satellite_indices.py # Agricultural indices (vegetation, soil, water)
โ โโโ crop_data.py # USDA CropScape / Cropland Data Layer (crop history by field)
โ โโโ weather_data.py # NASA POWER weather and growing-season classification
โ โโโ elevation_data.py # DEM retrieval and terrain analysis (slope, aspect, TWI)
โโโ notebooks/ # Educational tutorials
โ โโโ NDVI_Tutorial.ipynb # Tutorial 1: NDVI basics
โ โโโ Vegetation_Health_Tutorial.ipynb # Tutorial 2: Multi-index analysis
โ โโโ GeoTIFF_Deep_Dive_Tutorial.ipynb # Tutorial 3: Working with GeoTIFFs
โ โโโ Elevation_Data_Tutorial.ipynb # Tutorial 4: Elevation & terrain analysis
โโโ tests/ # Unit tests
โโโ .github/workflows/ # CI/CD (GitHub Actions)
โโโ pyproject.toml # Project configuration
โโโ Makefile # Development commands
โโโ README.md # This file
๐ง Requirements
- Python >= 3.9
- numpy >= 1.20.0
- scipy >= 1.7.0
- rasterio >= 1.3.0
- matplotlib >= 3.5.0
- pystac-client >= 0.7.0
- planetary-computer >= 1.0.0
- requests >= 2.28.0
- shapely >= 2.0.0
๐ Data Sources
This tool uses free, public data from the following sources:
Satellite imagery (STAC APIs):
| Satellite | Resolution | Revisit | Coverage | STAC Catalog |
|---|---|---|---|---|
| Sentinel-2 | 10m | 5 days | Global | Microsoft Planetary Computer |
| Landsat 8/9 | 30m | 16 days | Global | Earth Search AWS |
Elevation:
| Source | Resolution | Coverage | STAC Catalog |
|---|---|---|---|
| Copernicus GLO-30 | 30m | Global | Microsoft Planetary Computer |
| USGS 3DEP | 1-60m | US | Microsoft Planetary Computer |
Crop and weather:
- USDA CropScape / NASS CDL โ Cropland Data Layer (30 m, continental US, annual)
- NASA POWER โ Daily weather (precipitation, temperature, solar, etc.) at 0.5ยฐ resolution; no API key required
๐ก Use Cases
This toolkit supports various precision agriculture applications:
- ๐พ Crop Health Monitoring: Detect stress, disease, and nutrient deficiencies early
- ๐ง Irrigation Management: Optimize water usage based on vegetation and soil data
- ๐ฑ Growth Stage Tracking: Monitor crop development throughout the season
- ๐ Yield Forecasting: Predict harvest outcomes using multi-temporal analysis
- ๐๏ธ Terrain Analysis: Assess drainage patterns, erosion risk, and water accumulation from DEMs
- ๐ Sustainability Reporting: Track environmental metrics and carbon footprint
- ๐ฌ Research & Development: Support agricultural research with reproducible analysis
๐ ๏ธ Development
# Set up development environment
make install-dev
# Run all tests (unit + notebooks)
make test
# Run only unit tests
make test-unit
# Format code
make format
# Run linters
make lint
# Start Jupyter
make jupyter
# See all commands
make help
๐ Outputs
Analysis tools generate georeferenced raster files (GeoTIFF), visualizations (PNG/PDF), and statistical summaries. All outputs are compatible with standard GIS software (QGIS, ArcGIS) and can be used for further analysis or reporting.
๐ Learning & Documentation
This project emphasizes both practical tools and educational resources:
- Analysis Libraries: Production-ready Python modules for data processing
- Tutorial Notebooks: Interactive Jupyter notebooks explaining concepts, methods, and best practices
- Documentation: Inline code documentation and detailed docstrings
- Examples: Real-world use cases demonstrating various agricultural scenarios
Whether you're a researcher, agronomist, or developer, you'll find resources suited to your needs.
๐ค Contributing
Contributions are welcome! This project is in active development. Areas where you can help:
- Adding new analysis modules (vegetation indices, soil metrics, yield models)
- Creating educational notebooks and tutorials
- Improving documentation and examples
- Bug fixes and performance improvements
Please feel free to submit a Pull Request or open an issue to discuss new features.
๐ License
MIT License - see LICENSE file for details
๐ Acknowledgments
- Microsoft Planetary Computer - Free satellite data access
- STAC - Standardized geospatial data catalog
- ESA Copernicus - Sentinel missions
- NASA/USGS - Landsat program
- USDA NASS CropScape - Cropland Data Layer
- NASA POWER - Weather and solar radiation data
- USGS 3DEP - High-resolution elevation data
- ESA Copernicus DEM - Global 30m DEM
๐ง Contact
For questions or issues, please open an issue on GitHub.
Building the future of precision agriculture, one pixel at a time ๐พ๐ฐ๏ธ
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file precision_ag-0.2.5.tar.gz.
File metadata
- Download URL: precision_ag-0.2.5.tar.gz
- Upload date:
- Size: 62.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ff1c6affc304208514547e74054a582b121d71d0e5b7f2d5cbc1431d0b7cec1
|
|
| MD5 |
339f0089cf5121d6a8725e5fbc6c68e6
|
|
| BLAKE2b-256 |
f66c05ceb2140e4d01e8596877dc905defe6311ee7ec9ff9425bff685f6d44a1
|
Provenance
The following attestation bundles were made for precision_ag-0.2.5.tar.gz:
Publisher:
publish.yml on Agrihand-AI/precision-ag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
precision_ag-0.2.5.tar.gz -
Subject digest:
0ff1c6affc304208514547e74054a582b121d71d0e5b7f2d5cbc1431d0b7cec1 - Sigstore transparency entry: 996631393
- Sigstore integration time:
-
Permalink:
Agrihand-AI/precision-ag@f8a78c21b7f2f75ec77314a2931f58e12556c758 -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/Agrihand-AI
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f8a78c21b7f2f75ec77314a2931f58e12556c758 -
Trigger Event:
release
-
Statement type:
File details
Details for the file precision_ag-0.2.5-py3-none-any.whl.
File metadata
- Download URL: precision_ag-0.2.5-py3-none-any.whl
- Upload date:
- Size: 43.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31ea64c1cb82862852cc0081f2cc1ee7289e05818cc347ac3653170ffd8a32f2
|
|
| MD5 |
2827cc852772f33bed8bbab12b398e2a
|
|
| BLAKE2b-256 |
f5a675bfe11b56b2ee77466e79021991eb293551bf7f80c34ff243d26caec947
|
Provenance
The following attestation bundles were made for precision_ag-0.2.5-py3-none-any.whl:
Publisher:
publish.yml on Agrihand-AI/precision-ag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
precision_ag-0.2.5-py3-none-any.whl -
Subject digest:
31ea64c1cb82862852cc0081f2cc1ee7289e05818cc347ac3653170ffd8a32f2 - Sigstore transparency entry: 996631469
- Sigstore integration time:
-
Permalink:
Agrihand-AI/precision-ag@f8a78c21b7f2f75ec77314a2931f58e12556c758 -
Branch / Tag:
refs/tags/v0.2.5 - Owner: https://github.com/Agrihand-AI
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f8a78c21b7f2f75ec77314a2931f58e12556c758 -
Trigger Event:
release
-
Statement type: