# How to do a search based on the user's location & search term and return proximity-based results?

I'm working on a directory site for post offices. I want to let the user search for the nearest post office which offers the service they require. What would be the best way to do this? What would be the easiest or most efficient ways?

• If it helps the system would be similar to: tools.usps.com/go/POLocatorAction!input.action But would use use postcode or the user's current location as the search criteria. I also anticipate that each post office will have multiple services but not many will have the exact same services, so i will need to be able to refine each search by the services the user wants. Nov 16, 2016 at 12:47

It's possible to query the database by lat long form a zip code.

Then you need a way to utilize the Haversine formula to calculate the distance and sort by the shortest value.

``````function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
var R = 6371; // Radius of the earth in km
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}

return deg * (Math.PI/180)
}
``````

Look at these answers to see a couple ways to do it.