Skip to main content

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.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yoro-maps 0.5.0
File Size Uploaded
yoro_maps-0.5.0.tar.gz 146.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yoro-maps 0.5.0
File Interpreter ABI Platform
yoro_maps-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 180.4 kB

Release files / yoro_maps-0.5.0.tar.gz

Download URL yoro_maps-0.5.0.tar.gz
Size 146.3 kB
Tags Source
SHA-256 checksum
How to use checksums
2e6d43d4fd3c2be2160ec208be43d590a4589fec6c5316c8e781dd84279e6356
BLAKE2b-256 checksum
How to use checksums
56abc119a25ae983b2dfd18d1b6f58de131251db8d7e726f6a4e998a223ddf63
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

Release files / yoro_maps-0.5.0-py3-none-any.whl

Download URL yoro_maps-0.5.0-py3-none-any.whl
Size 34.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dd8623521c89c5e9df0efc805207047cbda974bcad245af4ae82cae979180e98
BLAKE2b-256 checksum
How to use checksums
666ac44de9dc86ccd48da0beb3600ea24b0d434ff8d901f53bdce030e670ee2c
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

Release history Release notifications | RSS feed

0.7.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

This release

0.5.0 This release

2 release files

0.4.1

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page