Ooru

The model

How does a coordinate become three words?

9 min read

A Ooru address is a path down a hierarchy of squares, computed entirely in a projected, metric coordinate system. There is no lookup table of places and no database — the same input always produces the same output, offline, in under a microsecond.

1. Datum and coordinate reference systems

Two CRSs are involved, and the discipline of never mixing them is what makes the cells honest.

  • EPSG:4326 — WGS84 geographic is the interfaceCRS: degrees of latitude and longitude. It is what a GNSS receiver reports and what a URL carries. Degrees are not a metric unit — a degree of longitude is about 108.5 km at Chennai’s latitude and 0 km at the pole — so no grid arithmetic is ever done in it.
  • EPSG:32644 — WGS84 / UTM zone 44N is the workingCRS: a Transverse Mercator projection with central meridian 81°E, scale factor 0.9996 and false easting 500,000 m. Its units are metres, so a “250 m cell” is genuinely 250 m on the ground rather than 250 m of longitude that quietly narrows as you move north.

Why zone 44N

UTM zone 44 spans 78°E–84°E. The Chennai Metropolitan Area sits between roughly 79.94°E and 80.40°E — entirely inside the zone, with no zone-edge straddle to special-case. The point scale factor follows

k(x) ≈ k₀ · (1 + x² / 2R²)
k₀ = 0.9996 is UTM's deliberate central scale reduction; x is the distance from the central meridian in metres; R is the mean Earth radius.

Over this extent that gives 0.999652 at the eastern edge and 0.999763 at the western edge. Both deviate from 1 by a few hundred parts per million, but that absolute deviation is not the number that matters.

Web Mercator (EPSG:3857) was rejected outright: it is not equal-area, and at 13°N its scale error of about 2.6 % would make cells visibly non-square on the ground. It appears in this project only where it is unavoidable — inside the basemap’s tile addressing.

2. The nested tessellation

The grid is anchored at a fixed round UTM coordinate — easting 3,85,000 m, northing 14,15,000 m — and extends 50 km east by 60 km north.

LevelCellLatticeCells per parentWord means
1 · Region5 km10 × 12120which 5 km part of the metropolitan area
2 · Locality250 m20 × 20400which 250 m block within that region
3 · Spot12.5 m20 × 20400which 12.5 m square within that block
4 · Pinpoint3.13 m4 × 416which 3.125 m quarter within that square — optional, off by default
Level 4 is optional and off by default. Three words address 1,92,00,000 distinct 12.5 m cells; adding the fourth refines that to 3.13 m— parity with what3words’ 3 m square.

Why 20 × 20 and not 10 × 10

A subdivision factor of 20 rather than 10 buys two things. The terminal cell becomes 12.5 m rather than 50 m — 50 m is coarser than a city block and fails the core case of “which of these four doorways”. And a 400-word block is large enough to carry real semantic structure when laid out as a 20 × 20 map, whereas a 100-word block is too small for embedding neighbourhoods to be legible. The cost is vocabulary size: 920 words rather than 320.

3. Encoding, step by step

Encoding is a descent: each level consumes its share of the offset from the origin and hands the remainder to its child. Here is the real arithmetic for 13.0499, 80.2824 — a point on Marina Beach.

  1. Project to EPSG:32644 → E 422196.2 m, N 1442764.0 m.
  2. Subtract the origin → ΔE 37196.2 m, ΔN 27764.0 m.
  3. Level 1 (5 km cells): col = floor(37196.2 / 5000) = 7, row = floor(27764.0 / 5000) = 5. Flat index = 5 × 10 + 7 = 57, which the level-1 lexicon maps to cavern.
  4. Level 2 (250 m cells): col = floor(2196.2 / 250) = 8, row = floor(2764.0 / 250) = 11. Flat index = 11 × 20 + 8 = 228, which the level-2 lexicon maps to organza.
  5. Level 3 (12.5 m cells): col = floor(196.2 / 12.5) = 15, row = floor(14.0 / 12.5) = 1. Flat index = 1 × 20 + 15 = 35, which the level-3 lexicon maps to panther.

The result is cavern.organza.panther, naming a 12.5 m square of 156 m². Decoding runs the same descent backwards; the address resolves to the cell’s centre, so the worst-case distance between the point you encoded and the point you get back is half a cell diagonal — 8.84 m.

4. What the structure buys

  • Containment is prefix comparison. Cell [4, 91] is the parent of [4, 91, 213], and you can read that off the address without computing anything. No geometry, no tolerance.
  • Every prefix is a valid address. cavern alone names a real 5 km cell. This is progressive disclosure, and it is a privacy control: you can say where you are to 5 km without revealing your doorway.
  • Adjacency is computable. Converting the path to absolute lattice coordinates is a mixed-radix numeral conversion; stepping ±1 and converting back gives the neighbouring cell, crossing parent boundaries without a special case.
  • A word announces its level. Each level draws from a disjoint semantic domain, so a transposed address is rejected rather than silently resolved to somewhere else.
Get this word wrongYou stay withinWorst-case error
Word 1 (Region)the whole extent84.9 km
Word 2 (Locality)the level-1 cell7.1 km
Word 3 (Spot)the level-2 cell354 m
The flip side of hierarchy — see what hierarchy costs.