Skip to content

Packing and unpacking lat-long coordinates into small byte sequences

Notifications You must be signed in to change notification settings

rboulton/geoencode

Repository files navigation

GeoEncode

This repository contains code for converting geospatial coordinates (ie, latitude-longitude coordinates) to and from a compact byte encoding. The code has been written for use by Xapian (http://xapian.org), but is being kept as a separate project since it may be useful for other projects.

The encoding has some interesting features:

  • 6 bytes can encode a coordinate to an accuracy of 1/16th of an arcsecond (which translates to a maximum of slightly under 2 meters on the surface of the earth).
  • truncating the encoding to lengths of 5, 4, 3 or 2 bytes produces bounding boxes which include the box encoded by the 6 byte representation, at successively lower accuracy. These truncated representations can be used for indexing.
  • tests on a several-years-old desktop show that over a million encode-decode cycles can be performed in a second. Moreover, decoding is considerably faster than encoding.

Code is provided for encoding and decoding coordinates. A class is also provided which can be used to perform a bounds check while decoding, aborting the decoding operation if the coordinate is out of bounds; this designed to avoid excess calculation when decoding many coordinates, but when you are only interested in those coordinates within a bounding box.

About

Packing and unpacking lat-long coordinates into small byte sequences

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published