Types available for geospatial modeling.

`GeoPoint`

- a point on the surface of a sphere expressed in degrees latitude and longitude.`GeoSpatialIndex<T> : IDictionary<T,GeoPoint>`

- a dictionary for radius search.`ArcDistance`

- The length of the shortest path connecting two GeoPoints.

The foundational type is the `GeoPoint`

representing a point on the surface of a sphere (usually the earth) using Latitude and Longitude coordinates. Use GeoPoint when defining custom entity classes or in conjunction with `GeoSpatialDictionary<T>`

.

The distance between two points calculated using the haversine formula to an accuracy within 0.5%.

A custom implementation of `IDictionary<T,GeoPoint>`

. It uses three SortedSet structures to achieve radius search at O(log N). Use only for radius search, otherwise itâ€™s just a waste of memory.

The graph modeling example uses a GeoSpatialIndex.

```
var cheops = new GeoPoint(29.9792345,31.1342019);
var eiffel = new GeoPoint(48.8583701,2.2944813);
ArcDistance d = cheops.DistanceTo(eiffel);
Console.WriteLine("Distance in radians: " d.Radians);
Console.WriteLine("Distance in km: " d.ToKilometers());
var geoIndex = new GeoSpatialIndex<string>();
geoIndex["cheops"] = cheops;
geoIndex["eiffel"] = eiffel;
geoIndex["notre dame"] = new GeoPoint(48.8493659, 2.3386519);
geoIndex.Add("arc de triomphe", new GeoPoint(48.8640344,2.3187821));
//get items within a 5 km radius of the eiffel tower, nearest first
foreach(var pair in geoIndex.WithinRadius(eiffel, 5))
{
string item = pair.Key;
ArcDistance d = pair.Value;
Console.WriteLine("Distance to {0} is {1}", item, d.ToKilometers());
}
```