Geografische locaties in webapplicaties

Geplaatst 2011-08-30 17:30:59 om

Tegenwoordig maken steeds meer (web)applicaties gebruik van geografische locaties. Er zijn een aantal API's (Application Protocol Interface) die hiervoor gebruikt kunnen om bijvoorbeeld berekeningen en het weergeven van kaarten te vereenvoudigen. De meest gebruikte API is de Google Maps API. Echter heeft deze een aantal beperkingen

Wanneer u in een bestaande applicatie, locatie gebaseerde elementen moet toevoegen, kan het vaak voorkomen dat u al met een behoorlijke database zit. De geografische locaties kan dan al bestaan op basis van een straatnaam, postcode en/of plaatsnaam. Dit is voor mensen handig om te weten waar de locatie ligt. Een systeem kan hier echter niet veel mee. Deze heeft een geolocation nodig op basis van longitude en latitude (lengtegraad en breedtegraad).

De Google Maps API laat het echter niet toe om een grote database met menselijk leesbare locaties om te zetten naar een geolocation. Er zijn voldoende services op het internet die dit tegen een betaling wel toelaten. GPS Visualizer heeft een zeer eenvoudige online formulier waarin u uw adressen knipt en plakt. Vervolgens gaat deze online tool bezig met het vertalen, en na verloop van tijd kunt u hieruit weer uw longitudes en latitudes extraheren.

Plaats deze nieuwe waarden in je database en je kunt aan de slag met bijvoorbeeld het zoeken in een radius. Om dit verhaal nu compleet te maken volgt hier een snippet voor het zoeken binnen een bepaalde straal:

 

$geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$plaats.'&sensor=false');

$output= json_decode($geocode);

$lat = $output->results[0]->geometry->location->lat;
$long = $output->results[0]->geometry->location->lng;

$query = mysql_query(" 
SELECT * 
 FROM locaties
WHERE round(
6378.7 * acos(
sin(radians(".$lat.")) *
sin(radians(o.latitude)) + 
cos(radians(".$lat.")) *
cos(radians(o.latitude)) * 
cos(radians(o.longitude) - radians(".$long."))
),0) <".mysql_real_escape_string($zoekactie['straal']));


Auteur: Rajiv Mohan

Terug naar nieuwsoverzicht