Yoro Maps
Documentation | PyPI | GitHub
Offline maps, routing, and POI for Africa — companion to yoro geocoding.
Install
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
yoromaps download ML --output mali.yoromaps
Route between Yoro codes
yoromaps route mali.yoromaps ML-4V7AK ML-5G62E
import yoromaps
conn = yoromaps.open_db("mali.yoromaps")
graph = yoromaps.get_graph("mali.yoromaps") # loaded once, cached per process
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
# Points of interest — every POI gets a Yoro code automatically
poi = yoromaps.add_poi(conn, 12.639, -8.002, "Grand marche", category="market")
print(poi["yoro_code"]) # "ML-4V7AK"
yoromaps.pois_near(conn, 12.64, -8.0, radius_m=500) # sorted by distance
yoromaps.pois_in_cell(conn, "ML-4V7AK") # who lives at this address?
A build already fills that table from OpenStreetMap: the shops, schools,
hospitals, markets and places of worship in the extract are read out, given
their Yoro code and stored under source="osm". Re-running an extraction
replaces only those rows, so locally added POIs survive every refresh.
from yoromaps.osm_poi import extract_pois, categorize
categorize({"amenity": "pharmacy"}) # "pharmacy"
categorize({"amenity": "parking"}) # None — not every tag is a place
stats = extract_pois("togo-latest.osm.pbf", conn)
stats["pois"] # 16940
stats["unmapped"] # the tags we walked past, most frequent first
Tagging is an allowlist, so noise stays out; stats["unmapped"] is what tells
you which categories are worth adding next. Nameless features are skipped.
yoromaps download ML -o mali.yoromaps --no-pois # routing graph only
Update maps
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
import yoromaps
DATABASES = {
"default": { ... },
"maps": yoromaps.db_config("/data/mali.yoromaps"),
}
License
MIT — Paul Guindo / Altius Academy SNC.
Release files for yoro-maps 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| yoro_maps-0.4.1.tar.gz | 45.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yoro_maps-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 74.9 kB
Release files / yoro_maps-0.4.1.tar.gz
| Download URL | yoro_maps-0.4.1.tar.gz |
|---|---|
| Size | 45.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7bb0155235bfb841384b887c3d350c5344eda523a5fcb89525ae42632e819ec0
|
|
BLAKE2b-256 checksum How to use checksums |
f6e7567f64bd4ac7d0ca0a2048c480edd5c7bacbf621dcd924b851a1719d3a02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 20, 2026.
Transparency logRelease files / yoro_maps-0.4.1-py3-none-any.whl
| Download URL | yoro_maps-0.4.1-py3-none-any.whl |
|---|---|
| Size | 29.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c3e596eebf8ce67bf09f8bff414073059578f639839f59594fa044af9922cc10
|
|
BLAKE2b-256 checksum How to use checksums |
8cf69459328025a6b92e05c170d63166d634749738319ea0f5e8f68b4b7881d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 20, 2026.
Transparency log