function closestLocation(targetLocation, locationData) {
function vectorDistance(dx, dy) {
return Math.sqrt(dx * dx + dy * dy);
}
function locationDistance(location1, location2) {
var dx = location1.latitude - location2.latitude,
dy = location1.longitude - location2.longitude;
return vectorDistance(dx, dy);
}
return locationData.reduce(function(prev, curr) {
var prevDistance = locationDistance(targetLocation , prev),
currDistance = locationDistance(targetLocation , curr);
return (prevDistance < currDistance) ? prev : curr;
});
}
var data = {
"Locations": {
"Location": [
{
"id": "3066",
"latitude": "57.6494",
"longitude": "-3.5606",
"name": "Kinloss"},
{
"id": "3080",
"latitude": "57.077",
"longitude": "-2.836",
"name": "Aboyne"},
{
"id": "3091",
"latitude": "57.206",
"longitude": "-2.202",
"name": "Aberdeen Dyce"},
{
"id": "3134",
"latitude": "55.907",
"longitude": "-4.533",
"name": "Glasgow/Bishopton"},
{
"id": "3136",
"latitude": "55.515",
"longitude": "-4.585",
"name": "Prestwick Rnas"},
{
"id": "3144",
"latitude": "56.326",
"longitude": "-3.729",
"name": "Strathallan"}
]
}
},
targetLocation = {
latitude: 56,
longitude: -5
},
closest = closestLocation(targetLocation, data.Locations.Location);
// closest is now the location that is closest to the target location
Bookmarks