**GlobeCalc** ("Global Calculator") is a C language library of
computational primitives that promotes "Round World Computing", by performing
fundamental engineering calculations with the mathematical representation of
the planetary surface and locations on it.

GlobeCalc Library computations assume that the planetary surface is a spheroid (an ellipsoid of rotation, represented by gcPlanet data object, see below), and that an atomic location descriptor on this surface (gcPoint, see below) is an opaque data object, that describes the location on the planetary surface with some finite, millimetric resolution. All the computations are therefore performed with a finite precision, commensurate with the gcPoint granularity. The library also provides a set of functions that return the differences between a selected set of such computations and their equivalent ellipsoidal variants.

The fundamental data types of the GlobeCalc library are:

**gcPlanet** is a data object consisting of several double precision
numbers, initialised by gcInitPlanet() function. It represents the
spheroidal planetary surface as a mathematical abstraction: an ellipsoid
of rotation.

**gcLatLong** is a data object consisting of two double precision
numbers, radian measurements of latitude and longitude of a point on the
planetary surface represented by an associated gcPlanet object. gcLatLong
is an application-semantic rooted numerical representation of a point on
Earth (or some other spheroidal planetary surface).

**gcPoint** is an eight-byte integer that represents an atomic location
(point, vertex, "0-cell"...) on the surface of spheroidal body, in a compact
form well suited for storage in the computer systems, as well as spherical
and spheroidal calculations. On the planet the size of Earth, the precision
of gcPoint is about 6 millimetres (mean, 20 millimeters maximum). gcPoint
is transformed from and into gcLatLong object by gcPointToLatLong() and
gcLatLongToPoint() functions.

**gcDelta** is an opaque two byte object that represents the
position "rounding error", incurred by transforming a location expressed
by a gcLatLong object into a corresponding gcPoint object. If an
application requests this value while calling gcLatLongToPoint() and
provides it to gcPointToLatLong(), the location returned by the latter
is guaranteed to differ less than a third of a millimeter from the one
supplied to the former.

**gcProximity** is an opaque double precision number that describes
the proximity relationship between two gcPoint objects. gcProximity is
not the same as the distance between two objects, but it has one important
property relative to it: in any given vicinity, "proximities" (implied by
the gcProximity number magnitude) will order the same as the distances.
gcProximity may be transformed into geodesic distance with more or less
precision, depending on the items (in addition to the gcPlanet) known
and the precision required.

As of this writing (2011-05-29), GlobeCalc is work in progress. A brief inventory of library functions can be consulted [here]. "Round World" computation geometry fundamentals are depicted [here].

GlobeCalc Library is distributed in source form and can be compiled on many (if not most) 32 and 64 bit platforms. GlobeCalc source code is protected by copyright and distributed under "BSD-style" [license]: this means that the Library can be used without payment by both commercial and non-commercial software applications, whether they are "open" or "closed" source.

If you require further information or if you would like to use the
Library in your software project, write to *Round World Computing* at: