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

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.3
File Size Uploaded
yoro_maps-0.5.3.tar.gz 147.2 kB Details

Built distribution (wheel)

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

Total release size: 181.6 kB

Release files / yoro_maps-0.5.3.tar.gz

Download URL yoro_maps-0.5.3.tar.gz
Size 147.2 kB
Tags Source
SHA-256 checksum
How to use checksums
4b27a19c07836e32c1eab212f9de5809cffc5609fde7ef3f746387e33b89b06e
BLAKE2b-256 checksum
How to use checksums
c70b192c0018231f05a22d884a20e8021b271d497c2a934d5f9b415c36dd69e8
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.3-py3-none-any.whl

Download URL yoro_maps-0.5.3-py3-none-any.whl
Size 34.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cbf451c87d2767f644498ddca664ad82c5cd8251e50bfe74eee23473ca4d84c9
BLAKE2b-256 checksum
How to use checksums
2a234e974af543d58aeca5d451463f7baec2a953ff243485f7165bd15f6e0947
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

This release

0.5.3 This release

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

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