Hoi allemaal,

Ik heb een lijst met alle steden van nederland inclusief long en latitude. Nou haal ik de lng en lat op via GeoLocation en krijg dus een lng en lat. Hoe kan ik nou uitzoeken welke stad daarbij hoord?
Wat klopt er niet.... de titel (afstand berekenen) of de vraag (hoe een stad te vinden aan de hand van lng/lat)?
Geen afstand, wel een plaatsbepalen a.h.v. de API.
Dit script heb ik vorig jaar eens gebouwd voor een projectje en haal het land op.

Met even rondneuzen in de debug-array (&debug=1) kan je de plaatsnaam ook wel ophalen.


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test van coordinaat-metadata ophalen....</title>
  </head>
  <body>
	<p>Hier kan je de landcode zien van een coordinaat:</p>
	<?php
	if(isset($_GET['coords'])) {
		$url = "http://maps.googleapis.com/maps/api/geocode/xml?latlng=".$_GET['coords']."&sensor=true";
		$xml = simplexml_load_file($url,NULL, LIBXML_NOCDATA);
		if(isset($_GET['debug'])) {
			echo "<pre>".print_r($xml,true)."</pre>";
		}
		if($xml->status == "ZERO_RESULTS") {
			echo "Geen resultaten gevonden!";
		} else {
			echo "<ul>";
			foreach ($xml->result->address_component as $item) {
				$item = (array)$item;
				if($item['type'][0] == "country") {
						echo "<li>Landcode:".$item['long_name']."</li>";
						echo "<li>Landcode:".$item['short_name']."</li>";
						break;			
				}
			}
			echo "</ul>";
		}
	} else {
		echo "Ik heb coordinaten nodig (zoals 51.8055,4.73534), anders sta ik uit mijn neus te eten.<br />Snap je het niet? Klik eens <a href='locationcheck.php?coords=51.8055,4.73534'>hier</a>.";
	}
		
	?>
  </body>
</html>

Sorry, bedoeling is echt alleen de stad ophalen. Ik heb een database die er zo uit ziet:

Stad = Amsterdam -> lng = 5.5698 -> lat = 3.4745
Stad = Rotterdam -> lng = 3.4785 -> lat = 1.4754

Nu krijg ik via de GLocation de volgende waarde binnen:
lng: 5.4987
lat: 5.6984

Nou moet dus de stad die het meest in de buurt komt getoond worden
Om even te herhalen....

Met even rondneuzen in de debug-array (&debug=1) kan je de plaatsnaam ook wel ophalen.
Ik heb voor het bepalen van de afstand een UDF in MySQL:

DELIMITER $$

CREATE FUNCTION GetDistance (orgLat float, orgLong float, destLat float, destLong float) RETURNS float(10,2)
BEGIN
	DECLARE dist float;
	SET dist := ROUND(6371 *
        	acos(cos(radians(orgLat) ) *
        	cos(radians(destLat)) *
        	cos(radians(destLong) - radians(orgLong)) + sin(radians(orgLat))
        	* sin(radians(destLat))), 2);
	RETURN dist; 
END;
$$

DELIMITER ;

Dit voer je eenmalig uit en daarna kan je hem in query aanroepen, bv:

SELECT
	city_name,
	GetDistance(51.8055,4.73534,lat,lng) distance
FROM
	cities
ORDER BY distance
LIMIT 1
@aar: ik kom er niet uit. Heb van alles geprobeerd vannacht maar heb er moeite mee. kan je me een zetje in de goede richting erbij geven?

@get: het gaat niet om afstand, het gaat om weten welke stad iemand is met lng en lat. Deze functie geeft je de afstand in meters/kilometers aan volgens mij?
Wat heb je dan geprobeerd?
je kan dan als ik het goed heb zoeken (lijn 22) op de type 'locality'. Dan moet je Dordrecht te zien krijgen.
@aar: fantastisch! Ik had lijn 22 naar city veranderd. En de item array veranderd naar $item['city'] maar het werkte niet. Top!
city komt ook helemaal niet voor in de array. ;-)

Maar fijn dat het nu werkt.

Reageren