Geolocatie dichstbijzijnde

Heeft iemand een idee hoe deze functie in de hieronderstaande webapp werkt die de dichtstbijzijnde bushalte laat zien? Ik wil hem namelijk gebruiken voor mijn eigen web app.

nextbus.com (webapp werkt alleen op iphone en ipod touch).

Dat zou ik doen met behulp van javascript of html5.
Hier vind je er meer over:
http://diveintohtml5.org/geolocation.html

Ja dit stukje heb ik zelf ook al maar nu heb ik een lijst met plaatsen en coordinaten en nu wil ik weten welke plaats het dichstbij is en 2,3,4,5e enzovoort.

Dat is heel erg afhankelijk van de hoeveelheid locaties je hebt waarmee je wilt vergelijken.
Al zijn had er een paar dan pas je gewoon pythagoras op alle locaties t.o.v. van je eigen locatie en dan heb je hem zo gevonden.
Al heb je een hoop locaties om mee te vergelijken, dan snap je dat dit lang zal duren. Dan kan je het het best het gehele gebied opdelen in kleine gebiedjes. Vervolgens bepaal binnen welk gebiedje de gebruiker zit. Vervolgens zoek je binnen dit gebiedje de dichts bij zijnde locatie. Het zelfde doe je voor de locaties die in de gebiedjes die aan het gebiedje grenzen, want je kan aan rand van een gebiedje zitten. Vervolgens kijk je welke locatie het dichtsbij is (die in het huidige gebiedje, of misschien wel in het andere gebiedje). En dan ben je klaar.

Dit kan ook weer gedetailleerder en sneller uitgedacht worden, maar daarvoor moet je je echt gaan verdiepen in algoritmes. Maar dit is een beetje de basis.

Ik hoop dat ik je hiermee een beetje op weg heb geholpen.

Google heeft zelf uitleg op zijn site over hoe de dichtsbijzinde punten in een bepaalde straal weer te geven. http://code.google.com/intl/nl/apis/maps/articles/phpsqlsearch.html

In PHP is een voorbeeld van een functie om de afstand tussen 2 coordinaten uit te rekenen (in kilometers):

[code]
public function distance($lat1, $long1, $lat2, $long2)
{
$theta = $long1 - $long2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
return ($dist * 60 * 1.1515 * 1.609344);
}
[/code]

Vervolgens even een loopje om ze te vergelijken en de resultaten even sorteren en je bent er :smile:. Zelf haal ik de locatie van een bezoeker op via een webservice van Maxmind. Dat gaat op basis van IP en werkt vrij goed. Afgezien van mensen die thuiswerken met een VPN naar kantoor ;)