Convert meters to decimal degrees

Peter picture Peter · Aug 11, 2014 · Viewed 31.7k times · Source

I need to convert meters to decimal degrees in C#. I read on Wikipedia that 1 decimal degree equals 111.32 km. But it is on equator, so if I'm located above/below it my the conversion will be wrong? I assume this is wrong:

long sRad = (long.Parse(sRadTBx.Text)) / (111.32*1000); 

EDIT: I need this search radius to find nearby users

    long myLatitude = 100;
    long myLongitude = 100;
    long sRad = /* right formula to convert meters to decimal degrees*/

long begLat = myLatitude - searchRad;
long endLat = myLatitude + searchRad;
long begLong = myLongitude - searchRad;
long endLong = myLongitude + searchRad;

List<User> FoundUsers = new List<User>();

foreach (User user in db.Users)
{
    // Check if the user in the database is within range
    if (user.usrLat >= begLat && user.usrLat <= endLat && user.usrLong >= begLong && user.usrLong <= endLong)
    {
        // Add the user to the FoundUsers list
        FoundUsers.Add(user);
    }
}

Answer

Christofer Ohlsson picture Christofer Ohlsson · Aug 11, 2014

Also from that very same Wikipedia article:

 As one moves away from the equator towards a pole, however,
 one degree of longitude is multiplied by
 the cosine of the latitude,
 decreasing the distance, approaching zero at the pole.

So this would be a function of latitude:

double GetSRad(double latitude)
{
    return 111.32 * Math.Cos(latitude * (Math.PI / 180));
}

or similar.

edit: So for going the other way around, converting meters to decimal degrees, you need to do this:

double MetersToDecimalDegrees(double meters, double latitude)
{
    return meters / (111.32 * 1000 * Math.Cos(latitude * (Math.PI / 180)));
}