About me

and my company, Geolytica inc

Location Codes

From X,Y to Z

Encoding geographic coordinates into a string is a trivial thing. Yet, there are many grid based systems

M L S, Geohash, Mapcodes, Plus codes, O P C, N A C, XADDRESS, What3words, Zippr, MapTags, OkHi, Geokey, FB ...

Reinventing the wheel?

...

Geocode Attributes

  • → Free

    Same as Latitude,Longitude. (Eratosthenes circa 3rd century BC)
  • Short

    Optimal location encoding.
  • Spatial Locality

    2D <-> 1D
  • Memorizable / Distinct

    For Humans
  • Deterministic

    Must be generated offline.
  • Unique

    One to One

→ Free

And Open Source:
https://github.com/eruci/geocode   
            

Short

 33.75850,-118.22020 → LA-ABXXD 
 40.78286,-73.974109 → NY-JSYXG  

City names are shortened to acronyms whenever possible.
            

Spatial Locality

 33.75850,-118.22020 → LA-ABXXD 
 33.75860,-118.22020 → LA-ABXWY 
 33.75870,-118.22020 → LA-ABXWZ 
 33.75850,-118.22030 → LA-ABXWS 
 33.75850,-118.22040 → LA-ABXWT 
 33.75850,-118.22050 → LA-ABXWO 
            

Memorizable / Distinct

LA-ABXXD → LONG-KUKOR-AYAZ



            





Geonames have Levenshtein distance of at least 2. 

Phonetic distance of at least 1 (Metaphone Algorithm).

Deterministic

Offline:

use Geo::Code;

my $g = Geo::Code->new();
my $geocode = $g->geocode(lat=>52.52699,lon=>13.40521);

my $xy = $g->geocode(gc=>$geocode);
my ($lat,$lon) = @$xy;
            

Unique

 33.75850,-118.22020 → LA-ABXXD
 LA-ABXXD → 33.75850,-118.22020

            

Under the hood - The Algorithm



Divide Earth into 510100 'Hilbert' simple polygons → each polygon into squares → use skiplist data structures to name each square.

Each polygon is about 1000 km2, each square is about 100 m2 or 1 m2 (triple geoname version)



No Database is needed.

Hilbert Curve

Hilbert curve properties

  • Quick Encoding/decoding
  • Spatial locality preservation
A Hilbert polygon for Berlin.

3geonames.org

A triple geoname geocode for the world.

  • Resolution

    1x1 metre grid of the world.
  • Hilbert space of 720 trillion squares

    latitude range of [90.00000,-90.00000]
    and longitude range of [180.00000,-180.00000]
  • 3GeoName Geocode

    A unique 3 geoname address for each 1x1 m2 cell.

Other Attributes

In addition to being precise, geocodes are also:

Customizations


  • Custom Geoname lists

    Greater Levenshtein/Phonetic distance for better error correction.
  • Adaptive Hilbert polygons

    Variable size polygons for remote areas
  • Other languages

    Translated geonames based on geonames.org are available

API

Geocode.xyz

Reverse Geocoding.

IoT

Questions?