About me
and my company, Geolytica inc
-
Ervin Ruci
I hit the keyboard repeatedly until I make the computer do something
-
My latest startup launched in 2017
Geoparse and Geocode the World
Location Codes
From X,Y to Z
Encoding geographic coordinates into a string is a trivial thing. Yet, there are many grid based systemsM 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
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:
-
Fast
Just flipping bits. -
Worldwide
No discontinuities. Even at the 180th meridian.
-16.9074,+179.9999 : QOVU-BTDUH
-16.9074,+180.0000 : QOVU-BTLJA
-16.9074,-180.0000 : QOVU-BTLJA
-16.9074,-179.9999 : QOVU-BTLIZ -
Extendible/Customizable
Use custom wordlists without altering the code.
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