Metadata-Version: 2.4
Name: yoro-maps
Version: 0.2.0
Summary: Offline maps, routing, and POI for Africa — companion to yoro geocoding
Project-URL: Homepage, https://github.com/Altius-Academy-SNC/yoro-maps
Project-URL: Documentation, https://altius-academy-snc.github.io/yoro-maps
Project-URL: Repository, https://github.com/Altius-Academy-SNC/yoro-maps
Author-email: Paul Guindo <paulguindo@altius-group.ch>
License-Expression: MIT
License-File: LICENSE
Keywords: africa,maps,mbtiles,offline,osm,routing
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: GIS
Requires-Python: >=3.10
Requires-Dist: httpx>=0.24
Requires-Dist: yoro>=0.2.0
Provides-Extra: all
Requires-Dist: django>=4.2; extra == 'all'
Requires-Dist: mercantile>=1.2; extra == 'all'
Requires-Dist: osmium>=4.0; extra == 'all'
Provides-Extra: dev
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: django
Requires-Dist: django>=4.2; extra == 'django'
Provides-Extra: docs
Requires-Dist: mkdocs-material; extra == 'docs'
Requires-Dist: mkdocstrings[python]; extra == 'docs'
Provides-Extra: extract
Requires-Dist: osmium>=4.0; extra == 'extract'
Provides-Extra: tiles
Requires-Dist: mercantile>=1.2; extra == 'tiles'
Description-Content-Type: text/markdown

# Yoro Maps

**[Documentation](https://altius-academy-snc.github.io/yoro-maps/)** | **[PyPI](https://pypi.org/project/yoro-maps/)** | **[GitHub](https://github.com/Altius-Academy-SNC/yoro-maps)**

Offline maps, routing, and POI for Africa — companion to [yoro](https://pypi.org/project/yoro/) geocoding.

## Install

```bash
pip install yoro-maps
pip install yoro-maps[extract]  # OSM data extraction
pip install yoro-maps[django]   # Django integration
pip install yoro-maps[tiles]    # Tile downloading
```

## Build a map database

```bash
yoromaps download ML --output mali.yoromaps
```

## Route between Yoro codes

```bash
yoromaps route mali.yoromaps ML-4V7AK ML-5G62E
```

```python
import yoromaps

conn = yoromaps.open_db("mali.yoromaps")
graph = yoromaps.Graph.from_db(conn)  # load once

r = graph.route(12.639, -8.003, 14.489, -4.197)  # Bamako → Mopti
print(f"{r.distance_km} km, {r.duration_min} min")  # 551.8 km, 681.0 min
```

## Update maps

```bash
yoromaps update mali.yoromaps
# → Downloads only if OSM data has changed. POI and tiles are preserved.
```

## Tested performance

| Route | Distance | Compute |
|-------|----------|---------|
| Bamako → Mopti | 551.8 km | 6.3s |
| Bamako → Tombouctou | 812.2 km | 6.6s |
| Urban (Bamako) | 3.8 km | 0.5s |

## Django integration

```python
import yoromaps

DATABASES = {
    "default": { ... },
    "maps": yoromaps.db_config("/data/mali.yoromaps"),
}
DATABASE_ROUTERS = ["yoromaps.django.router.YoroMapsRouter"]
```

## License

MIT — Paul Guindo / Altius Academy SNC.
