# nearest latitude and longitude • ### Question

• I need to have this function to calculate which latitude or longitude is nearest to the user.

how do I do that?

1002614D

Wednesday, August 15, 2012 2:03 AM

• Hi,

Based on your code, I don't see you call getGeopositionAsync. Your code seems to be a function calcuating the distance between two geo locations. Is there any difficulties to calculate the result? You can also try to make it easy. Ignore altitudes, and treat the earth as a sphere (ignore polar flatterning). Then you can use the great circle distance formular to calculate the distance: http://en.wikipedia.org/wiki/Great-circle_distance. More specifically, the Haversine formula (which uses great circle distance formular under the hook) helps to calculate the distance between two points on the earth's surface. It is not needed to learn the math details. Please simply use the Haversine formula.

Below is some quick JavaScript code to calculate the approximate distance between two points

// haver sine function.

function haversine(angle) {

return Math.pow(Math.sin(angle / 2), 2);

}

// Convert the value to radius.

return value * Math.PI / 180;

}

function distance(lat1, long1, lat2, long2) {

varR = 6371; // km (change this constant to get miles)

var dLat = toRadius(lat2 - lat1) ;

var dLon = toRadius(long2 - long1);

var result = Math.acos(1 - 2 * haversined) * varR;

return result;

}

Note the above code treats earth as a sphere and ignores altitudes. If you want a more presice calculation, you may want to use a cloud service, such as Bing Maps API: http://msdn.microsoft.com/en-us/library/ff701717.aspx.

Best Regards,

Ming Xu.

Please mark the replies as answers if they help or unmark if not.
Microsoft One Code Framework

• Marked as answer by Friday, September 14, 2012 9:20 AM
Thursday, August 30, 2012 11:21 AM

### All replies

• Hi,

I think you can achieve that using the Geolocator class and it's getGeopositionAsync() method. Reference http://msdn.microsoft.com/en-US/library/windows/apps/hh973537

-Sagar

Wednesday, August 15, 2012 6:08 PM
• I have written this code.

but I cant get the value out.

var lon2 = 55;

var lat2 = 33;

function

distance(lat, long, lat2, lon2) {

varR = 6371; // km (change this constant to get miles)

vardLat = (lat2 - lat) * Math.PI / 180;

vardLon = (lon2 - long) * Math.PI / 180;

vara = Math.sin(dLat/2) * Math.sin(dLat/2) +

Math.cos(lat * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *

Math.sin(dLon/2) * Math.sin(dLon/2);

varc = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

vard = R * c;

if(d>1) returnMath.round(d)+"km";

elseif(d<=1) returnMath.round(d*1000)+"m";

returnd;

// var outputArea1 = document.getElementById("lat2");

//var outputArea1 = document.getElementById("lon2");

}

1002614D

Thursday, August 16, 2012 6:03 AM
• I don't know what you mean by "can't get the data out".  Can you be more specific?

Jeff Sanders (MSFT)

Friday, August 17, 2012 1:25 PM
• Hi,

Based on your code, I don't see you call getGeopositionAsync. Your code seems to be a function calcuating the distance between two geo locations. Is there any difficulties to calculate the result? You can also try to make it easy. Ignore altitudes, and treat the earth as a sphere (ignore polar flatterning). Then you can use the great circle distance formular to calculate the distance: http://en.wikipedia.org/wiki/Great-circle_distance. More specifically, the Haversine formula (which uses great circle distance formular under the hook) helps to calculate the distance between two points on the earth's surface. It is not needed to learn the math details. Please simply use the Haversine formula.

Below is some quick JavaScript code to calculate the approximate distance between two points

// haver sine function.

function haversine(angle) {

return Math.pow(Math.sin(angle / 2), 2);

}

// Convert the value to radius.

return value * Math.PI / 180;

}

function distance(lat1, long1, lat2, long2) {

varR = 6371; // km (change this constant to get miles)

var dLat = toRadius(lat2 - lat1) ;

var dLon = toRadius(long2 - long1);

var result = Math.acos(1 - 2 * haversined) * varR;

return result;

}

Note the above code treats earth as a sphere and ignores altitudes. If you want a more presice calculation, you may want to use a cloud service, such as Bing Maps API: http://msdn.microsoft.com/en-us/library/ff701717.aspx.

Best Regards,

Ming Xu.

Please mark the replies as answers if they help or unmark if not.