0

I'm making a script that will hopefully be mainly PHP so it doesn't require Javascript later on, but right now I'm stuck on a few things.

  1. What is the best way to store GPS locations, and then compare them? I could use to store them in a database (currently using MySQL), and then find people nearby with some code, but I fear this would quite intensive, especially if a lot of values are in the database. This should be executed on the server, I'm currently using PHP right now.

  2. How can I get this data, and then represent it in Google Maps? I've currently got my code working when I have already put in the data, but I would like to get this data from a database. Would it be asking too much of the user to place say 100 markers on a single Google Maps view to represent all people around the world? Or should I just stick with people within a certain area? My current code is:

    var people = [ ['Type1', -33.890542, 151.274856],
                   ['Type2', -33.923036, 151.259052],  
                   ['Type2', -34.028249, 151.157507],  
                   ['Type2', -33.80010128657071, 151.28747820854187],  
                   ['Type1', -33.950198, 151.259302]
                 ];
    

    Each 'type' displays a different image, so I need to pull the type, lat and long from a database and put them into this Javascript Array.

I know there's a few questions thrown in there, I'm new to this side of javascript and Maps :)

3

1 Answer 1

1

1. Your first question

I had to solve something like this last week and I did it like this.
Let's say I have a list of some offices in MySQL database with their GPS coordinates (gps_lat, gps_lon) and I want to sort them by their distance to my current location ($latitude, $longtitude) in km.

// MySQL query in PHP
// btw, I'm storing GPS coordinates in decimal format like 51.123234
$varA = "(POW(SIN((gps_lat - $latitude) / 2 * 0.017453293), 2) + COS($latitude * 0.017453293)
        * COS(gps_lat * 0.017453293) * POW(SIN((gps_lon - $longtitude) / 2 * 0.017453293), 2))";
    
$query = "SELECT *, (6378.140 * 2 * ATAN2(SQRT($varA), SQRT(1-$varA))) AS distanceInKm ";
$query += 'FROM Office ORDER BY distanceInKm'); 

$mysqli->query($query);
// ...

// the magic constant 0.017453293 is PI / 180 (just check the link below).

Maybe check this link Deriving the Haversine Formula, it helped me a lot. I know this looks weird in SQL. The $varA is just one part of the formula that repeats twice. Original formula in the link above looks like this:

dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2(sqrt(a), sqrt(1-a)) 
d = R * c
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for that, looks very good. Had a read of the link, and I think I get how it works, I'll try and implement it now. I'm assuming we're comparing the current location of the user (gps_lat and gps_lon) with some variable coordinates, $latitude and $longtitude? I don't quite get the last bit, but I'm not that knowledgeable on that kind of syntax! :(
Yes, you're right. I updated the post so it's maybe a bit more understandable.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.