GeoGnomo is an open-source project designed to provide a quick, easy and effective method for geostamping. Fundamentally, it uses geometry to split the world up into triangles and assigns each triangle a geocode. The part that makes it special is that the size of the triangles can be controlled, meaning that different sized areas of land can be described by the geocodes.
Currently, GeoGnomo is able to take any point given by latitude and longitude, find the triangle in which the point lies and produce the geocode of that triangle. The way in which the geocodes are produced means that if more or less detail is required, the code can simply be extended or reduced. Neighbouring triangles also share very similar geocodes, so that when we are faced with multiple geocodes, we can tell roughly how far away they are from each other.
The advantage of allowing the size of the triangles to vary is that we can adjust it for what the geostamp is for; we can use small triangles to keep track of the location of a computer and large triangles to keep track of the area of land a farmer owns. In many cases such as insurance, geostamps would be used in conjunction with timestamps and hence GeoGnomo has been built alongside MetroGnomo.
The functionality for defining paths and areas by latitude and longitude to produce a list of geocodes is under development. Once this has been introduced, we will be able to describe things like roads by exact path rather than postcodes.
The beauty in the single point algorithm is that for any level of detail, the same set of calculations are done but the numbers are scaled up, meaning that more detail doesn't make it slower.
How to Use GeoGnomo
GeoGnomo is actually very easy to use and produce geocodes with; the hard part (relatively speaking) is understanding how the geocodes are formed and what they tell us.
To produce a geocode for a certain latitude and longitude, simply enter them in the boxes and then in the last box enter the 'level' of detail: the larger the level the smaller the triangles become (you can use the table to check exactly how small they become, but if you play with the higher levels for fun do note that the accuracy of floating point numbers is limited!). You will then be presented with a quarternary (base4) code and a GeoGnomo (base32) code, along with GeoGnomo codes for the neighbouring triangles.
To find the latitude and longitude of a certain triangle, simply enter the GeoGnomo Code or Alphabetic Code in the boxes and the 'level' of detail. You will then be presented with a triangle with the latitude and longitude of its centroid point.
In order to understand the code, it is helpful to understand the underlying geometry. First, the globe is projected onto an icosahedron (a 3d shape made up of 20 equilateral triangles). Each of the 20 faces is then divided into 4 smaller triangles and this division is repeated depending on how many levels are chosen. In both formats of geocode, the number before the comma indicates which of the 20 faces the point lies within. In the quarternary code, the following numbers indicate the zooming in 'path' taken when dividing the triangles. For example, a string of 2s means you simply keep zooming in towards the left corner of the triangle. The base32 GeoGomo code simply shortens the quarterny code into a reasonable length.
The quarternary code is very useful as changing the level simply adds or removes numbers from the current code. The base32 code does this if you change the level by a multiple of 5 and we are working on a more cunning system that allows it behave itself for all changes in level.
Below are some links to a few papers that will perhaps give you a better understanding of the potential uses for this system and also the inspiration behind the mathematics we used.