Precision Levels¶
Canonical Precisions¶
Due to base-29 quantization, not every Hilbert order p produces a distinct code length. Only canonical precisions create unique grids. Requesting a non-canonical p silently snaps to the nearest canonical one.
import yoro
for level in yoro.precision_levels(domain="CI"):
print(
f"p={level['precision']:>2} "
f"{level['code_length']} chars "
f"{level['grid_size']:>8}×{level['grid_size']:<8} "
f"~{level['resolution_m']:>10.2f} m"
)
Cote d'Ivoire (CI)¶
| Code Length | Precision (p) | Grid | Resolution | Use Case |
|---|---|---|---|---|
| 1 | 2 | 4×4 | ~177 km | Country quadrant |
| 2 | 4 | 16×16 | ~44 km | Region |
| 3 | 7 | 128×128 | ~5.5 km | City |
| 4 | 9 | 512×512 | ~1.4 km | Neighborhood |
| 5 | 12 | 4096×4096 | ~173 m | Block (default) |
| 6 | 14 | 16K×16K | ~43 m | Building |
| 7 | 17 | 131K×131K | ~5.4 m | Entrance |
| 8 | 19 | 524K×524K | ~1.35 m | Meter-level |
| 9 | 21 | 2M×2M | ~34 cm | Sub-meter |
| 10 | 24 | 16M×16M | ~4 cm | Centimeter |
Snap Precision¶
If you request a non-canonical precision, Yoro snaps to the canonical one:
yoro.snap_precision(10) # → 12 (both use 5-character codes)
yoro.snap_precision(11) # → 12
yoro.snap_precision(12) # → 12 (already canonical)
yoro.snap_precision(18) # → 19 (both use 8-character codes)
Resolution by Domain¶
Resolution depends on the domain's geographic extent. Larger domains (like XX global) have coarser resolution at the same precision:
yoro.resolution(12, "CI") # ~173 m (small country)
yoro.resolution(12, "XX") # ~5,533 m (entire globe)
Choosing a Precision¶
| Need | Precision | Characters |
|---|---|---|
| Rough area (delivery zone) | 7-9 | 3-4 |
| Address (house/building) | 12-14 | 5-6 |
| Exact location (survey point) | 17-19 | 7-8 |
| Sub-meter (precision agriculture) | 21+ | 9+ |
The default precision of 12 (5 characters) is a good balance for most addressing use cases: ~173 m in Cote d'Ivoire, enough to identify a building or intersection.