Buy a conference ticketBook a master classBest prices for the
hotel room at the venue

3dgeonames - A 3d open location code written in perl5

Ervin Ruci — 20 minutes 🐪

Location encoding has gained a lot of attention lately, from newer iterations of the popular geohash algorithm, to serious commercial efforts like what3words, to new and revisited open source systems like Google's plus codes. Still, nobody has tackled the problem of 3d location encoding, yet, although there is an obvious use case for it with the growing popularity of 3d mapping. 3dgeonames is the 3d version of the perl5 module Geo::Code. It produces location codes for latitude,longitude,elevation triplets with a resolution of 1 meter for an elevation of up/down to +- 17576 metres. This talk expands of the use case and methodology used to solve this problem.

Geocode is a one-dimensional location code. It uses a simple space-filling technique to map a three dimensional point (latitude,longitude,elevation) to either an alphanumeric string or a geoname triple with no loss of information. It is a one-to-one mapping (no two geocodes map to the same point and no two points map to the same geocode).

Geocode has several advantages over similar systems.

The alphanumeric geocode is short (10 bytes), has higher accuracy (up to 1 meters) and avoids the borderline discontinuities and many to one mappings of other one-dimensional location codes such as geohashes.

Triple geoname codes on the other hand are more memorizable, are intuitively reprentative of the location and are composed of relatively short existing geo names (up to 8 letters).

The first name in a triple geoname code represents the most prominent location name inside a 21,403 km² area containing the point with an elevation of up/down to +- 17576 metres.


This human readable algorithm uses 146300 geonames from http://geonames.org and http://geonames.nga.mil/gns/html/gis_countryfiles.html with several requirements for the names (chosen to be recognizable, short, easy to pronounce, distinct from each other and evenly spread throughout the earth.) We also shorten geonames to their acronyms whenever possible (LA -> Los Angeles, NY -> New York, etc)

Geonames also have phonetic distance from each other of at least 2, meaning the probability for error is low in audio transmission of geocodes.

Unlike many grid-based location codes, geocodes represent points not areas. Each geocode maps to a latitude,longitude,elevation triplet with accuracy up to the 5th decimal point (i.e. 1 meter)

A geolocation expressed as (latitude,longitude,elevation) can be converted offline into a geocode, and vice versa using a data structure embeded in the software.

The software is in the public domain to be used without any restrictions.



Talk tags
location, geocode, geolocation, space fitting curves
Perl versions
🐪 Perl 5
Target audience
Any
Talk duration
20 minutes
Talk status
accepted
Related links

https://fosdem.org/2019/schedule/event/geo_3geonames/