# scottschluer/geolocation

### Subversion checkout URL

You can clone with
or
.
A C# class library that will calculate distance and cardinal direction between two sets of coordinates and provides the lat/long boundaries around an origin coordinate allowing for simple SQL or LINQ selection of locations within the given radius.
C# ASP
latest commit 556671d79a
authored
 Failed to load latest commit information. Geolocation.Example Dec 12, 2012 Geolocation.UnitTests Jun 15, 2013 Geolocation Jun 15, 2013 packages May 31, 2012 .gitignore May 31, 2012 Geolocation.sln Dec 13, 2012 LICENSE Sep 3, 2013 README.md Aug 14, 2013

USAGE:

All methods support passing Coordinate objects as parameters as well as decimal lat/long values. Assuming the following Coordinate objects, the examples below show two different ways to make the same call:

```Coordinate origin = new Coordinate(34.0675918, -118.3977091);
Coordinate destination = new Coordinate(34.076234, -118.395314);```

Find the distance between two points:

```double distance = GeoCalculator.GetDistance(34.0675918, -118.3977091, 34.076234, -118.395314, 1);
//OR
double distance = GeoCalculator.GetDistance(origin, destination, 1);```

Find the cardinal direction (e.g. N, NW, W) from an origin coordinate to a destination coordinate:

```string direction = GeoCalculator.GetDirection(34.0675918, -118.3977091, 34.076234, -118.395314);
//OR
string direction = GeoCalculator.GetDirection(origin, destination);```

Find the bearing (degrees) from an origin coordinate to a destination coordinate:

```double bearing = GeoCalculator.GetBearing(34.0675918, -118.3977091, 34.076234, -118.395314);
//OR
double bearing = GeoCalculator.GetBearing(origin, destination);```

Find the lat/long boundaries for a given origin coordinate and radius:

```CoordinateBoundaries boundaries = new CoordinateBoundaries(34.0675918, -118.3977091, 25);
//OR
CoordinateBoundaries boundaries = new CoordinateBoundaries(origin, 25);

double minLatitude = boundaries.MinLatitude;
double maxLatitude = boundaries.MaxLatitude;
double minLongitude = boundaries.MinLongitude;
double maxLongitude = boundaries.MaxLongitude;

var results = _locations
.Where(x => x.Latitude >= minLatitude && x.Latitude <= maxLatitude)
.Where(x => x.Longitude >= minLongitude && x.Longitude <= maxLongitude)
.Select(result => new
{
Name = result.Name,
Distance = GeoCalculator.GetDistance(origin.Latitude, origin.Longitude, result.Latitude, result.Longitude, 1),
Direction = GeoCalculator.GetDirection(origin.Latitude, origin.Longitude, result.Latitude, result.Longitude)
})
.Where(x => x.Distance <= 25)
.OrderBy(x => x.Distance);```
Something went wrong with that request. Please try again.