I’ve done some reading so far and I am at a crossroads.
My situation is this:
- Table with a list of lat/lng values ( we can take these to be “cities” ) with a radius
- Table with a list of movement values, including a lat/lng
My requirement is that I return the list of movements and include the nearest city (if it’s within the radius). I’ve so far used the haversine formula in PHP to do this for each record I return but it’s not particularly efficient.
My two options I’ve found is either to:
1/ create a stored procedure in MySQL to do the Haversine that side (something like this: Proximity Search )
2/ use a “bounding box” method of positioning the cities instead of a circle. This is not a big problem and would allow the sql to be simplified.
However, in some cases the typical logic of determining whether the point lies between the top left and bottom right will not work if the lat and lng are in negatives. In PHP, to work around this, I would do a quick “if” where I’d check if the top-left lat/lng is greater than the bottom-right and use AND/OR depending on the result.
After some extra reading I found this question here on SO.
https://stackoverflow.com/a/5548877/1749630
This answer was exactly what I needed to point me in the right direction. In this way I am now using a sub-select in order to find the city.
If someone posts a better answer than this one I’ll mark that instead of this one 🙂