"Near me" functionality?
I have an application with a bunch of "geolocated" messages, I would like to display only messages "near me" and not all of them. Does anyone have an example to share?
Thanks :)
3 Answers
-
Accepted Answer
Hi,
You need to determine how close things are to you, which requires you to GeoLoc everything… My current solution uses a server side SQL query which is based upon http://code.google.com/apis/maps/articles/phpsqlsearch_v3.html
Here's the SQL statement that will find the closest 20 locations that are within a radius of 25 miles to the 37, -122 coordinate. It calculates the distance based on the latitude/longitude of that row and the target latitude/longitude, and then asks for only rows where the distance value is less than 25, orders the whole query by distance, and limits it to 20 results. To search by kilometers instead of miles, replace 3959 with 6371.
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
The alternative is to extend the Titanium Framework with your own module. I have one which I have not finished testing yet, but it appears to work ok. I lost interest when I discovered that I wasnt able to then take those and create a routemap without some significant extra coding.
Hope this helps.
-
SQLite doesn't support ACOS and other math function. So in order to make it work, custom function is needed. Kindly refer to this thread:
http://developer.appcelerator.com/question/125649/defining-a-custom-sqlite-function#219361
It provides the final syntax to get 'distance' function that provides distance is KM between latitudes and longitudes.
-
That was like a perfect answer, thank you!